SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
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:
daniele.costarella@gmail.com
danielecostarella.com | openmakersitaly.org
https://plus.google.com/u/0/+DanieleCostarella
@dcostarella
http://github.com/blackbliss
Linux Embedded per l'automazione

Contenu connexe

Tendances

Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
MongoDB
 
Windows Phone 7.5 Refresh: Performance e localizzazione
Windows Phone 7.5 Refresh: Performance e localizzazioneWindows Phone 7.5 Refresh: Performance e localizzazione
Windows Phone 7.5 Refresh: Performance e localizzazione
Matteo Pagani
 

Tendances (20)

Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
Docker
Docker Docker
Docker
 
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetes
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
 
Windows Phone 7.5 Refresh: Performance e localizzazione
Windows Phone 7.5 Refresh: Performance e localizzazioneWindows Phone 7.5 Refresh: Performance e localizzazione
Windows Phone 7.5 Refresh: Performance e localizzazione
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2
 
Git best practices
Git best practicesGit best practices
Git best practices
 
Automation Night (Docker)
Automation Night (Docker)Automation Night (Docker)
Automation Night (Docker)
 
Progetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnicaProgetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnica
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
 
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-source
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Progetto Linux va a scuola
Progetto Linux va a scuolaProgetto Linux va a scuola
Progetto Linux va a scuola
 
Anatomia di un progetto open-source
Anatomia di un progetto open-sourceAnatomia di un progetto open-source
Anatomia di un progetto open-source
 
Launchpad vs GitHub
Launchpad vs GitHubLaunchpad vs GitHub
Launchpad vs GitHub
 
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
 
Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
 

En vedette

C++ idioms by example (Nov 2008)
C++ idioms by example (Nov 2008)C++ idioms by example (Nov 2008)
C++ idioms by example (Nov 2008)
Olve Maudal
 

En vedette (16)

Distribuzione delle sessioni in PHP in caso di load balancing su più server
Distribuzione delle sessioni in PHP in caso di load balancing su più serverDistribuzione delle sessioni in PHP in caso di load balancing su più server
Distribuzione delle sessioni in PHP in caso di load balancing su più server
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
 
TDD in C - Recently Used List Kata
TDD in C - Recently Used List KataTDD in C - Recently Used List Kata
TDD in C - Recently Used List Kata
 
Parte 2 - Linux ed i sistemi embedded per le reti (di Massimiliano Toce)
Parte 2 - Linux ed i sistemi embedded per le reti (di Massimiliano Toce)Parte 2 - Linux ed i sistemi embedded per le reti (di Massimiliano Toce)
Parte 2 - Linux ed i sistemi embedded per le reti (di Massimiliano Toce)
 
Parte 1 - Linux ed i sistemi embedded per le reti (di Andrea Tassi)
Parte 1 - Linux ed i sistemi embedded per le reti (di Andrea Tassi)Parte 1 - Linux ed i sistemi embedded per le reti (di Andrea Tassi)
Parte 1 - Linux ed i sistemi embedded per le reti (di Andrea Tassi)
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain
 
Insecure coding in C (and C++)
Insecure coding in C (and C++)Insecure coding in C (and C++)
Insecure coding in C (and C++)
 
C++ idioms by example (Nov 2008)
C++ idioms by example (Nov 2008)C++ idioms by example (Nov 2008)
C++ idioms by example (Nov 2008)
 
Advanced C
Advanced C Advanced C
Advanced C
 
C Programming - Refresher - Part I
C Programming - Refresher - Part I C Programming - Refresher - Part I
C Programming - Refresher - Part I
 
Top C Language Interview Questions and Answer
Top C Language Interview Questions and AnswerTop C Language Interview Questions and Answer
Top C Language Interview Questions and Answer
 
Solid C++ by Example
Solid C++ by ExampleSolid C++ by Example
Solid C++ by Example
 
Embedded c c++ programming fundamentals master
Embedded c c++ programming fundamentals masterEmbedded c c++ programming fundamentals master
Embedded c c++ programming fundamentals master
 
Embedded C programming based on 8051 microcontroller
Embedded C programming based on 8051 microcontrollerEmbedded C programming based on 8051 microcontroller
Embedded C programming based on 8051 microcontroller
 
INTRODUCTION TO C PROGRAMMING
INTRODUCTION TO C PROGRAMMINGINTRODUCTION TO C PROGRAMMING
INTRODUCTION TO C PROGRAMMING
 
Deep C
Deep CDeep C
Deep C
 

Similaire à Linux Embedded per l'automazione

Similaire à Linux Embedded per l'automazione (20)

Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Arduino - Massimiliano D'Ambrosio
Arduino - Massimiliano D'AmbrosioArduino - Massimiliano D'Ambrosio
Arduino - Massimiliano D'Ambrosio
 
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMwareSistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdf
 
Tesi-Todone
Tesi-TodoneTesi-Todone
Tesi-Todone
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloud
 
Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018
 
Android
AndroidAndroid
Android
 
Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
 
Desktop searching
Desktop searchingDesktop searching
Desktop searching
 
Raspberrypi
RaspberrypiRaspberrypi
Raspberrypi
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
Link. javascript ajax
  Link. javascript ajax  Link. javascript ajax
Link. javascript ajax
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 

Plus de Daniele Costarella

energy-harvesting-pres-final-std
energy-harvesting-pres-final-stdenergy-harvesting-pres-final-std
energy-harvesting-pres-final-std
Daniele Costarella
 
Electronics LAB [with Arduino] | DAY 2
Electronics LAB [with Arduino] | DAY 2Electronics LAB [with Arduino] | DAY 2
Electronics LAB [with Arduino] | DAY 2
Daniele Costarella
 
Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1
Daniele Costarella
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3
Daniele Costarella
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embedded
Daniele Costarella
 

Plus de Daniele Costarella (10)

Fondamenti di GNU/Linux: FileSystem e Partizioni
Fondamenti di GNU/Linux: FileSystem e PartizioniFondamenti di GNU/Linux: FileSystem e Partizioni
Fondamenti di GNU/Linux: FileSystem e Partizioni
 
Arduino e stampa 3D - Le nuove frontiere della robotica homemade
Arduino e stampa 3D - Le nuove frontiere della robotica homemadeArduino e stampa 3D - Le nuove frontiere della robotica homemade
Arduino e stampa 3D - Le nuove frontiere della robotica homemade
 
energy-harvesting-pres-final-std
energy-harvesting-pres-final-stdenergy-harvesting-pres-final-std
energy-harvesting-pres-final-std
 
Development of a Wireless Sensors Network powered by Energy Harvesting techni...
Development of a Wireless Sensors Network powered by Energy Harvesting techni...Development of a Wireless Sensors Network powered by Energy Harvesting techni...
Development of a Wireless Sensors Network powered by Energy Harvesting techni...
 
Hands On Embedded Linux with BeagleBone Black
Hands On Embedded Linux with BeagleBone BlackHands On Embedded Linux with BeagleBone Black
Hands On Embedded Linux with BeagleBone Black
 
Electronics LAB [with Arduino] | DAY 2
Electronics LAB [with Arduino] | DAY 2Electronics LAB [with Arduino] | DAY 2
Electronics LAB [with Arduino] | DAY 2
 
Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3
 
Development of a wireless sensor network powered by energy harvesting techniques
Development of a wireless sensor network powered by energy harvesting techniquesDevelopment of a wireless sensor network powered by energy harvesting techniques
Development of a wireless sensor network powered by energy harvesting techniques
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embedded
 

Dernier

Dernier (9)

GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
 
GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI Alessandro
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA Roberto
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptx
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptx
 
GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO Antonio
 

Linux Embedded per l'automazione

  • 1.
  • 2. 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
  • 3. Part 1: Linux Embedded Vantaggi – Un esempio reale – Esempi di utilizzo
  • 4. Cos’è? Con Embedded Linux ci si riferisce a quell’insieme di distribuzioni concepite per essere utilizzate su sistemi embedded. [Wikipedia]
  • 5. ● 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
  • 6. ● 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
  • 7. 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.
  • 8. ● GNU/Linux ● Filesystem ● Multitasking ● Supporto di rete ● Connettività ● Timekeeping ● Accesso remoto ● Dimensioni ● Community Tutto in una scheda
  • 9. 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…
  • 10. 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
  • 11. Connessione tramite SSH ● Su Linux e Mac basta semplicemente lanciare un terminale e digitare il seguente comando: $ ssh 192.168.7.2 –l root
  • 12. 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'>
  • 13. 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")
  • 14. Esempio 1: LED blinking Anodo sul pin 6 e catodo su GND
  • 15. 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)
  • 16. Esempio 2: misura di temperatura MCP9700
  • 17. 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)
  • 18. Part 2: Software Scrittura dell’applicazione per il controllo remoto
  • 19. 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
  • 20. Python Hello Flask from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
  • 21. ● 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
  • 22. 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" }, …. ….
  • 23. 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
  • 24. 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
  • 25. 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)
  • 26. 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
  • 27. 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
  • 28. Grazie per l’attenzione email: web: G+ Twitter Github: daniele.costarella@gmail.com danielecostarella.com | openmakersitaly.org https://plus.google.com/u/0/+DanieleCostarella @dcostarella http://github.com/blackbliss