Arduino e l Internet delle cose Cristian Maglie (c.maglie@arduino.cc) 1
Notizie sul relatore - Programmatore Freelance - Entusiasta utilizzatore di tecnologie Open - Collabora con Arduino da oltre 5 anni 2
Cos è Arduino - È un framework opensource per la prototipazione rapida e l apprendimento veloce dei principi fondamentali dell elettronica e della programmazione 3
Filosofia di Arduino - Rendere l elettronica affrontabile senza il bisogno di avere conoscenze specifiche - Semplificare, focalizzare sull obiettivo eliminando il superfluo - Stimolare la voglia di metterci le mani dentro 4
Di cosa parleremo - Internet-Of-Things - Modalità di connessione a Internet - Arduino Yún 5
Internet-Of-Things 6
Internet-Of-Things - Utilizzare la rete Internet per far comunicare tra di loro oggetti - Anche oggetti non strettamente elettronici possono essere collegati o attuati tramite Internet 7
Internet-Of-Things - Ponte tra il mondo reale e virtuale - Potenzialità cloud offerte dal Web (>=2.0) su oggetti che ne sono esclusi per natura 9
Mettersi in rete! Ovvero: come ti faccio accedere a Internet il mio microcontroller? MCU? Internet 10
1. Co-processore - Soluzione adatta per MCU di fascia bassa (core a 8 bit) - Semplice e veloce per progetti non complessi MCU Network Unit Internet 11
1. Co-processore - Arduino Ethernet Shield utilizza il coprocessore Wiznet W5100 - Layer di rete TCP/IP implementato in hardware nel chip - Layer applicativo a carico della MCU MCU W5100 Internet 12
2. MCU con Ethernet - Si può trovare nelle MCU di fascia media (es. processori Cortex-M3 in su) - Layer di rete TCP/IP software nel firmware - Strato software consistente, ma permette ancora di svolgere compiti realtime MCU ETH Internet 13
Problemi con le MCU - Implementazione della crittografia (HTTPS) non banale - Crescente richiesta di utilizzo di API Web complesse (OAuth, OpenID, etc.) - Microcontroller non adatti a gestire questo tipo di applicazioni MCU 15
3. Embedded PC/SoC - SoC con processori di fascia alta - Chipset dedicati per il networking - Software implementa tutti i livelli di rete e applicativi - Kernel multithread - Spesso utilizzato GNU/Linux per il vasto supporto e applicazioni disponibili 16
3. Embedded PC/SoC SoC CPU Network Chipset Internet 17
Problemi - Anche se sono disponibili GPIO, la presenza del kernel non permette controlli realtime - Mancano (o sono molto complesse da utilizzare) le interfacce elettriche tipiche dei dispositivi elettronici (SPI, I2C...) 18
4. Ibrido Soc + MCU - Modulo SoC affiancato da un microcontroller - Il micro si interfaccia ai dispositivi elettronici e svolge i task realtime - Il modulo SoC ha il ruolo di supervisione e si occupa della comunicazione internet 19
4. Ibrido Soc + MCU CPU Network Chipset Internet MCU LEDs / Lights Relais Motors Pot. / Sliders Sensors 20
Riassumendo... Modalità Pro Contro Co-processore MCU con Eth integrato SoC Ibrido SoC + MCU -Firmware leggero -Facilità di integrazione -Elevata integrazione -Bassa latenza di rete -Sistema Operativo -Disponibiltà di applicativi -Tutti i PRO dei PC Embed -Collegamento con dispositivi elettronici e controllo realtime -Applicazioni Web2.0 medio/ complesse non possibili -Firmware complesso -Implementazione complessa -Difficile utilizzo di dispositivi elettronici -Controllo realtime impossibile (o molto difficile) -Comunicazione tra CPU e MCU -Bassa latenza di rete non facilmente ottenibile 21
))) Ok ma... il WiFi? 22
WiFi (802.11b/g/n) MCU Network Unit Internet MCU ETH Internet CPU Network Chipset Internet 23
WiFi (802.11b/g/n) MCU WiFi Unit ) ) ) Internet MCU WiFi ) ) ) Internet CPU WiFi Chipset ) ) ) Internet 23
WiFi (802.11b/g/n) - Layer di crittazione (WEP/WPA) - Disturbi elettromagnetici EMF (in particolare se il dispositivo andrà certificato) - Moduli WiFi, esistono ma costosi - Sicurezza nella prima configurazione 24
Arduino Yún 25
Arduino Yún - Yún significa nuvola in Cinese - È un sistema ibrido - GNU/Linux embedded basato sul SoC MIPS Atheros AR9331 - S.O. Linino (derivato da OpenWRT) - Microcontroller ATMega32u4 (lo stesso usato nell Arduino Leonardo) 26
Arduino Yún AR9331 WiFi ))) CPU ETH UART USB UART 32U4 USB GPIO 27
Caratteristiche AR9331 Mega32U4 Flash RAM CPU Clock USB WiFi OS 16MB 64MB DDR 400MHz Yes (Host) Yes Linino (OpenWRT) 32KB 2.5KB SRAM 16MHz Yes (Device) No No 28
Design della Yún - La scheda viene programmata tramite l IDE di Arduino - La scrittura degli sketch è molto simile alle altre schede Arduino - La comunicazione di rete viene delegata al lato MIPS - È possibile utilizzare la scheda esclusivamente tramite WiFi 29
Upload via WiFi Arduino Serial Uploader IDE 30
Upload via WiFi Arduino Serial Discovery Uploader IDE Network Discovery Uploader 30
Upload via WiFi Discovery Arduino IDE Serial Uploader Discovery Network Uploader 30
Upload via WiFi - Selezione della porta indipendente dalla modalità (seriale USB / rete) - Autodiscovery tramite zeroconf - Upload degli sketch via SCP - Riprogrammazione del chip tramite avrdude 31
Arduino Yún AR9331 WiFi ))) CPU ETH UART GPIO USB UART ISP 32U4 USB GPIO 32
Configurazione rete - Scheda in modalità Access Point alla prima accensione - Configurazione tramite WebPanel semplificato - Configurazioni avanzate disponibili tramite WebPanel di OpenWRT (luci) o da linea di comando 33
Bridge - Composta da due parti che comunicano: una libreria Arduino e un demone linux - Si occupa dello scambio di messaggi tra 32U4 e Atheros - I messaggi sono numerati e verificati da un CRC (no ripetizioni o messaggi persi) - Ad ogni messaggio inviato corrisponde un messaggio di risposta (anche vuoto) 34
Key/Value storage - È un storage di coppie chiave-valore che risiede lato linux - Può essere letto e modificato dal 32U4 - Può essere letto e modificato tramite chiamate REST 35
Key/Value storage REST endpoint: http://.../data/set/key/value http://.../data/get/key K/V Bridge API: Bridge.put( KEY, VALUE ); String value = Bridge.get( KEY ); 36
Process - Permette di eseguire processi linux dal 32U4 - Si possono lanciare processi standalone o usare linee di comando della shell - Cattura dello standard input/output 37
Process Process myproc; myproc.begin( curl ); myproc.addparamater( http://arduino.cc ); myproc.runasynchronously(); myproc.read(); // read std output myproc.write(... ) // write std input myproc.running(); int res = myproc.exitvalue(); 38
Message - È una coda di stringhe di bytes (messaggi) - È possibile inviare o leggere messaggi dalla coda dal 32U4 - È possibile inviare o leggere messaggi dalla coda tramite chiamate REST 39
Message Mailbox Queue write read REST endpoint: http://.../message/send/turn_on_led Bridge API: Mailbox.writeMessage( TURN_ON_LED ); String msg = Mailbox.readMessage(); int len = Mailbox.messageAvailable(); 40
3rd party API - Utilizzando Keystore, Message e Process è possibile costruire complesse catene di processing - È possibile interfacciarsi alle API dei servizi web più famosi utilizzando linguaggi di scripting o client linux dove già disponibili 41
3rd party API Twitter client Facebook client Linked-in client 42
Temboo - È un sito che offre un servizio cloud per accedere a API di terze parti - Libreria Arduino per accedere al servizio sviluppata in collaborazione con Temboo - Tutti i dettagli per interfacciarsi a API esterne sono già implementati da Temboo 43
Temboo Twitter client Facebook client Linked-in client 44
Temboo Temboo client 45
Q&A 46
Grazie! 47