+ All Categories
Home > Engineering > Linux Embedded per l'automazione

Linux Embedded per l'automazione

Date post: 30-Aug-2014
Category:
Upload: daniele-costarella
View: 242 times
Download: 5 times
Share this document with a friend
Description:
Una rapidissima dimostrazione di come sia possibile controllare da remoto dispositivi utilizzando una board con Linux.
Popular Tags:
29
Transcript

Linux Embedded per l’automazione GNU/Linux, Google App Engine e Android

Daniele Costarella

Electronic Engineer, GDG Campania Co-Organizer, Open Makers Italy

Mobile Innovation Day Caserta | 16 maggio 2014, Caserta

Part 1: Linux Embedded Vantaggi – Un esempio reale – Esempi di utilizzo

Cos’è?

Con Embedded Linux ci si riferisce a quell’insieme di distribuzioni

concepite per essere utilizzate su sistemi embedded.

[Wikipedia]

● Riutilizzo dei componenti

● Capacità di riutilizzo dei componenti

● Molti componenti per il nostro sistema sono già disponibili e open-source

● Supporto hardware ai protocolli di rete, periferiche multimediali, librerie grafiche ecc.

● Focus sul prodotto finale

● Costo basso

● Il software libero può essere copiato su più dispositivi e senza alcun costo

● Strumenti di sviluppo per la maggior parte liberi

● Costo delle licenze software estremamente ridotto

● Incremento del budget per l’hardware

Vantaggi

● Pieno controllo su tutto il software utilizzato

● Disponibilità di componenti di qualità elevatissima

● Semplicità nella fase di testing

● Supporto della community

● Entrare a far parte di una gigantesca community

Vantaggi

Scelta della board: BeagleBone Black

Un computer su singola scheda, progettato per mantenere bassi i costi di vendita, pur

offrendo prestazioni e connettività prossime a quelle di un laptop.

In grado di eseguire il boot di Linux in meno di 10 secondi. Uno strumento di sviluppo ideale

per hobbisti e sviluppatori.

● GNU/Linux

● Filesystem

● Multitasking

● Supporto di rete

● Connettività

● Timekeeping

● Accesso remoto

● Dimensioni

● Community

Tutto in una scheda

BeagleBone Black: caratteristiche tecniche

Processore: AM335x 1GHz ARM® Cortex-A8

512MB DD3 RAM

2GB 8-bit eMMC on-board flash storage

Acceleratore grafico 3D

Connettività

USB client for power and communications

USB host

Ethernet

HDMI

2x46 pin headers

Compatibilità software

Ångström Linux

Android

Cloud9 IDE on Node.js w/ BoneScript Library

E altro ancora…

Operativi in pochi secondi

● Connessione tramite cavo USB

● Test della connessione

● Da browser: http://192.168.7.2

● Pagine introduttive su BeagleBone

● Tutto pronto per iniziare

Connessione tramite SSH

● Su Linux e Mac basta semplicemente lanciare un terminale e digitare il

seguente comando:

$ ssh 192.168.7.2 –l root

La libreria Adafruit_BBIO

Una volta eseguito l’accesso tramite SSH (su Angstrom Linux):

$ opkg update && opkg install python-pip python-setuptools python-smbus

$ pip install Adafruit_BBIO

Per verificare che l’installazione sia avvenuta con successo:

import Adafruit_BBIO.GPIO as GPIO; print GPIO

#you should see this or similar:

<module 'Adafruit_BBIO.GPIO' from '/usr/local/lib/python2.7/dist-packages/Adafruit_BBIO/GPIO.so'>

Utilizzo della libreria Adafruit_BBIO

Aprire una console Python e importare la libreria (per esempio GPIO)

Python 2.7.5 (default, Sep 2 2013, 05:24:04)

[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>>

>>> import Adafruit_BBIO.GPIO as GPIO

Accesso ai pin tramite pin “key” o nome

import Adafruit_BBIO.GPIO as GPIO

GPIO.setup("P8_10", GPIO.OUT)

GPIO.output("P8_10", GPIO.HIGH

GPIO.setup("P8_14", GPIO.IN)

if GPIO.input("P8_14"):

print("HIGH")

else:

print("LOW")

Esempio 1: LED blinking

Anodo sul pin 6 e catodo su GND

LED Blinking: scriviamo il codice

Creiamo un file eseguibile con un semplice programma per il lampeggio del LED

$ nano blink.py

Python import Adafruit_BBIO.GPIO as GPIO

import time

GPIO.setup("P8_10", GPIO.OUT)

while True:

GPIO.output("P8_10", GPIO.HIGH)

time.sleep(0.5)

GPIO.output("P8_10", GPIO.LOW)

time.sleep(0.5)

Esempio 2: misura di temperatura

MCP9700

Misura di temperatura: scriviamo il codice

Creiamo un file eseguibile con un semplice programma per la misura

$ nano temperature.py

Python import Adafruit_BBIO.ADC as ADC

import time

sensor_pin = 'P9_40'

ADC.setup()

while True:

reading = ADC.read(sensor_pin)

millivolts = reading * 1800 # 1.8V reference = 1800 mV

temp_c = (millivolts - 500) / 10

temp_f = (temp_c * 9/5) + 32

print('mv=%d C=%d F=%d' % (millivolts, temp_c, temp_f))

time.sleep(1)

Part 2: Software Scrittura dell’applicazione per il controllo remoto

Scritto in Python, è uno strumento molto flessibile per realizzare infrastrutture complesse e

performanti.

Caratteristiche

● Contiene server e debugger per lo sviluppo

● Richieste RESTful

● Supporta cookie di sicurezza (sessioni lato client)

● 100% WSGI 1.0 compatibile

● Documentazione estensiva

● Compatibilità con Google App Engine

● Estensioni disponibili per migliorare le caratteristiche desiderate

Flask

Python

Hello Flask

from flask import Flask

app = Flask(__name__)

@app.route("/")

def hello():

return "Hello World!"

if __name__ == "__main__":

app.run()

● Project Directory/ - Contiene tutti i file della tua app

● app.py – Codice Python/Flask

● requirements.txt – Lista di tutte le dipendenze

● static/

● js/ - file javascript, per contenuti web interattivi

● css/ - file CSS, per offrire alla tua app un proprio stile

● img/ - immagini

● templates/ - directory contenente I template Flask

Struttura

BASH

Lista dei dispositivi connessi

$ curl -i http://localhost:5000/remote/api/v1.0/devices

{

"devices": [

{

"active": true,

"description": ”Temperatura rilevata in camera di Daniele",

"status": false,

"title": “Room Temperature",

"type": "Termometer",

"uri": "http://localhost:5000/remote/api/v1.0/devices/1",

"value": "20.1"

},

….

….

Esempio 1: accendere (e spegnere) un LED

GET

$ curl -i http://localhost:5000/remote/api/v1.0/devices/2

PUT (value: 0 | 1)

$ curl -i -H "Content-Type: application/json" -X PUT -d '{"value":1}'

http://localhost:5000/remote/api/v1.0/devices/2

BASH

Esempio 2: pilotare un termostato

GET

$ curl -i http://localhost:5000/remote/api/v1.0/devices/1

PUT (temp_on e temp_off)

$ curl -i -H "Content-Type: application/json" -X PUT -d '{"temp_on":1, "temp_off":10}'

http://localhost:5000/remote/api/v1.0/devices/term

BASH

Metodi implementati

Metodo HTTP Azione Esempio

GET Ottenere informazioni sulle risorse http://localhost:5000/remote/api/v1.0/devices

GET Ottenre informazioni su una risorsa http://localhost:5000/remote/api/v1.0/devices/123

POST Aggiungere un nuovo dispositivo http://localhost:5000/remote/api/v1.0/devices

(creare un nuovo dispositivo a partire dai dati presenti nella richiesta)

PUT Aggiornare lo stato di un

parametro/dispositivo

http://localhost:5000/remote/api/v1.0/devices/123

(modificare #123 con i dati presenti nella richiesta)

DELETE Eliminare un dispositivo http://localhost:5000/remote/api/v1.0/devices/123

(eliminare l’item #123)

Android Un’App per i nostri test

● Semplicità d’uso

● Codice semplice e pulito

● Struttura modulare

● Ricezione automatica dei nuovi dispositivi

● Compatibile con tutte le versioni più

recenti di Android

Open Makers Day 16 giugno 2014 | Università Parthenope, Centro Direzionale di Napoli

Partecipa al Call For Makers su www.openmakersitaly.org

Scadenza: 30 maggio 2014

Grazie per l’attenzione

email:

web:

G+

Twitter

Github:

[email protected]

danielecostarella.com | openmakersitaly.org

https://plus.google.com/u/0/+DanieleCostarella

@dcostarella

http://github.com/blackbliss


Recommended