29

Linux Embedded per l'automazione

Embed Size (px)

DESCRIPTION

Una rapidissima dimostrazione di come sia possibile controllare da remoto dispositivi utilizzando una board con Linux.

Citation preview

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