Linux Embedded per l'automazione
-
Upload
daniele-costarella -
Category
Engineering
-
view
242 -
download
5
description
Transcript of Linux Embedded per l'automazione
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
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")
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)
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)
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+
Github:
danielecostarella.com | openmakersitaly.org
https://plus.google.com/u/0/+DanieleCostarella
@dcostarella
http://github.com/blackbliss