Teaching within the course "The frontier of the Internet of Things", organized by "Ordine degli Ingegneri della Provincia di Salerno". Lecturing on the subject held "IoT and the Arduino platform" on October 29, 2016
1. La frontiera dell’Internet of
Things
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Software Engineer
francescopascale87@gmail.com
2. OUTLINE
Arduino
– Architettura e moduli
– La programmazione Arduino
– Librerie
– Esempio
Differenze tra Arduino e un Microcontrollore PIC
– Dispositivi a confronto
– Codici a confronto
Microcontrollore vs Microprocessore
– Differenze
– Esempi di utilizzo
Problematiche in Arduino
– Problemi noti risolti
– Come rendere arduino professionale: alcune problematiche
29/10/2016 2
IoT e la piattaforma Arduino
Ing. Francesco Pascale
3. OUTLINE
Come strutturare la progettazione e lo sviluppo di un sistema
embedded
– Definizione dell’architettura
– Sviluppo SW-FW e HW
– Esempi di Sistemi Embedded
Arduino in Iot
– Problematiche sulla connessione alla rete per un MCU
– Arduino e la connessione alla rete
Arduino e Cyber Security
– Problematiche generali
– Come rendere sicuro Arduino come device IoT: Esempio
DDOS
29/10/2016 3
IoT e la piattaforma Arduino
Ing. Francesco Pascale
4. Arduino
• Arduino è una scheda elettronica dotata di un microcontrollore ATmega,
sviluppata da alcuni membri dell'Interaction Design Institute di Ivrea
• L’hardware nella sua versione Arduino uno è composto da un circuito
stampato in cui sono presenti un microcontrollore (Atmega328) con
dei pin connessi alle porte I/O, un regolatore di tensione, un header
ICSP (In-Circuit Serial Programming), un jack di alimentazione, un
risuonatore utilizzato come oscillatore, un pulsante di reset e
un'interfaccia USB che permette la comunicazione con il computer.
• L'ambiente di sviluppo integrato (IDE) di Arduino è un'applicazione
multipiattaforma in Java (per Linux, Apple Macintosh e Windows
29/10/2016 4
IoT e la piattaforma Arduino
Ing. Francesco Pascale
5. Arduino
• l'IDE include un editor di testo con al suo interno syntax highlighting per il controllo
delle parentesi e l'indentazione automatica
• L'editor è inoltre in grado di compilare e lanciare il programma eseguibile in una sola
passata e con un solo click. In genere non vi è bisogno di creare dei Makefile o far girare
programmi dalla riga di comando
• L'ambiente di sviluppo integrato di Arduino è fornito di una libreria software C/C++
che prende il nome di wiring
• L’IDE Arduino è gratuito e scaricabile dal sito ufficiale
https://www.arduino.cc/en/Main/Software con licenza GNU GPLv2
• I programmi in Arduino vengono prendono il nome di sketch
• E’possibile sviluppare programmi per connettere, a questo hardware, più o meno
qualsiasi oggetto elettronico, computer, sensori, display o attuatori
29/10/2016 5
IoT e la piattaforma Arduino
Ing. Francesco Pascale
7. Architettura e Moduli
29/10/2016 7
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Componente Caratteristiche
Microcontroller Atmega328
Tensione di funzionamento 5V
Tensione in ingresso 7-12V (consigliata)
Tensione in ingresso 6-20V (limiti)
I / O digitali 14 (di cui 6 di fornire output PWM)
Ingressi analogici 6
Corrente continua per I / O Pin 40 mA
Corrente per Pin 3,3 V CC 50 mA
Flash Memory 32 KB di cui 0,5 KB utilizzati dal bootloader
SRAM 2 KB
EEPROM 1 KB
Velocità di clock 16 MHz
Riepilogo caratteristiche Principali
8. Architettura e Moduli
29/10/2016 8
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Generalmente il microcontrollore della scheda è pre-programmato con un
bootloader che semplifica il caricamento dei programmi sulla memoria
flash incorporata nel chip
• Per alimentare il microcontrollore, è sufficiente collegarsi a un computer
con un cavo USB (l'alimentazione può essere derivata alla presa USB)
oppure alimentare con un adattatore AC-DC oppure tramite batteria
• La Scheda Arduino Uno si differenzia principalmente da tutte le schede
precedenti, dal fatto che non usa come convertitore USB/seriale un chip
driver FTDI ma è utilizzato un processore Atmega8U2 programmato
come convertitore seriale/USB
10. La programmazione Arduino
29/10/2016 10
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Per poter creare un file eseguibile, non è richiesto di scrivere
un programma in C, ma solo di definire due funzioni:
void setup ()
funzione invocata una sola volta all'inizio di un programma
che può essere utilizzata per i settaggi iniziali
void loop ()
funzione invocata ripetutamente, la cui esecuzione si
interrompe solo con lo spegnimento della scheda
11. La programmazione Arduino
29/10/2016 11
IoT e la piattaforma Arduino
Ing. Francesco Pascale
1 #define LED_PIN 13
2
3 void setup () {
4 pinMode (LED_PIN, OUTPUT); // abilita il pin 13 per l'output digitale
5 }
6
7 void loop () {
8 digitalWrite (LED_PIN, HIGH); // accende il LED
9 delay (1000); // aspetta 1 secondo (1000 millisecondi)
10 digitalWrite (LED_PIN, LOW); // spegne il LED
11 delay (1000); // aspetta un secondo
12 }
Un tipico esempio di programma per iniziare a far pratica con un microcontrollore è
quello che permette l'accensione ripetuta di un LED
13. La programmazione Arduino
29/10/2016 13
IoT e la piattaforma Arduino
Ing. Francesco Pascale
1 #include "WProgram.h" // include la libreria WProgram
2 #define LED_PIN 13
3
4 void setup () {
5 pinMode (LED_PIN, OUTPUT); // abilita il pin 13 per l'output digitale
6 }
7
8 void loop () {
9 digitalWrite (LED_PIN, HIGH); // accende il LED
10 delay (1000); // aspetta 1 secondo (1000 millisecondi)
11 digitalWrite (LED_PIN, LOW); // spegne il LED
12 delay (1000); // aspetta 1 secondo
13 }
14
15 int main(void)
16 {
17 init();
18
19 setup();
20
21 for (;;)
22 loop();
23
24 return 0;
25 }
Quando l'utilizzatore seleziona il bottone di comando "Upload to I/O board" (presente nell'IDE), una copia del codice viene
automaticamente trascritta in un file temporaneo con l'aggiunta di un extra include header all'inizio del codice e l'implementazione
di una semplicissima funzione main()
14. La programmazione Arduino
29/10/2016 14
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• "WProgram.h" è lo header file principale per la libreria Wiring.
• La funzione main() effettua solo tre chiamate, init(), setup() e loop();
• le ultime due sono definite dall'utente, mentre la prima è scritta nella
libreria stessa.
• La funzione loop(), come richiesto, è automaticamente nidificata in un
loop infinito
16. La programmazione Arduino
29/10/2016 16
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Sintassi
• Punto e virgola ;
• Le parentesi graffe { }
17. La programmazione Arduino
29/10/2016 17
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Commenti
– Blocco di commenti /* …. */
– Linea di commento //
Funzioni
• Dichiarazione di funzione
18. La programmazione Arduino
29/10/2016 18
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Le costanti
• Costanti booleane
• Costanti INPUT e OUTPUT
– INPUT
– OUTPUT
• Costanti HIGH e LOW
– HIGH
– LOW
• Costanti a numero interi ( Integer )
• Formattatori U e L (Unsigned e Long)
19. La programmazione Arduino
29/10/2016 19
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Le variabili
• Dichiarazione di una variabile
int inputVar=0; //inizializza la variabile di nome inputVar
inputVar=analogRead(2); // assegna alla variabile su inizializzata il valore
// letto dal pin analogico 2 variandone il contenuto
• Variabile globale e locali
21. La programmazione Arduino
29/10/2016 21
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Tipo di dati
• Void (dichiarazione di funzione che non restituisce un risultato)
• Boolean (variabile di tipo true o false)
• Char (1 byte 1 Carattere da 0 a 255 ASCII)
• Unsigned Char
• Byte (8bit Es. B010101)
• Int (2 byte interi da -32768 a 32767)
• Unsigned int
• Word (2 byte senza segno)
• Long (4byte)
• unsigned long (4byte senza segno)
• char array - String (Stringhe di caratteri)
– Array di char (Es. char Str[ ]= “arduino”; )
– Array di stringhe (Es. char* mieStringhe[ ]= { “Stringa 1”, “Stringa 2”, “Stringa 3”, “Stringa 4”, “Stringa 5” };)
– String – oggetto (classe)
• Array
– Creazione e/o dichiarazione di un array Es. int mioArray[]={1,2,3,4,5};
– Accesso agli elementi di un array Es. int var = mioArray[n];
– Assegnare un valore ad un array Es. mioArray[n]=3;
22. La programmazione Arduino
29/10/2016 22
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Istruzioni condizionali
• Istruzione if
• Condizioni if/else
• Istruzioni switch … case
• Istruzione for / ciclo for
• Ciclo while
• Ciclo do/while
• Break
• continue
• Return
• #define
23. La programmazione Arduino
29/10/2016 23
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Operatori aritmetici
• Operatore di assegnamento =
• Addizione(+), sottrazione (-), moltiplicazione (*) e divisione ( / )
• Modulo %
Operatori di confronto
• Operatore booleano
– && operatore AND
– || operatore OR
– ! operatore not
• Operatori tra bit ( su interi a 16 bit )
– AND tra bit &
– Operatore OR tra bit |
– Operatore tra bit XOR
– Operatore NOT tra bit ~
• Scorrimento verso sinistra (<<) e verso destra ( >> )
– Operatori composti
– ++ (incremento) - - (decremento)
– += -= *= /=
• AND composto tra bit (&=) e OR composto tra bit ( | = )
– AND composto ( & =)
– OR composto ( |= )
24. La programmazione Arduino
29/10/2016 24
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Funzioni I/O
• I/O digitali
– pinMode(pin,mode);
– digitalWrite
– digitalWrite(pin,valore)
– digitalRead
• I/O analogici
– analogReference(type)
– analogRead()
– analogWrite( )
• Time
– mills()
– micros( )
– delay( )
– delayMicroseconds()
25. La programmazione Arduino
29/10/2016 25
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Altre Funzioni
• min(x,y)
• max(x,y)
• abs(x)
• sin(rad)
• cos(rad)
• tan(rad)
• lowByte()
• highByte( )
• bitRead( )
• Serial
– begin()
– end( )
– available( )
– read( )
– flush( )
– print( )
– println( )
– write( )
26. Librerie
29/10/2016 26
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Esistono vari tipi di librerie, quelle standard (10) e quelle terze parti
• Alle librerie terze parti appartengono quelle sviluppate per supportare in
modo specifico uno shield o un particolare chip, quelle legate ad hardware
specifici e le librerie funzionali
• Tutte le librerie sono pensate al fine di migliorare e di espandere le
potenzialità di arduino sui vari dispositivi
27. Librerie
29/10/2016 27
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• EEPROM – per leggere e scrivere su memorie EEPROM, che conservano
i dati anche senza alimentazione
• Ethernet - per collegarsi ad Internet e a una rete Ethernet attraverso
Arduino Ethernet Shield
• Firmata – per comunicare con il computer collegato ad Arduino secondo
un protocollo standard
• LiquidCrystal – per gestire i display a cristalli liquidi basati su controller
HD44780 o compatibile (LCD)
• SD – per leggere e scrivere le schede di memoria SD.
• Servo – per controllare i servomotori (I/O PWM)
• SPI – per dialogare con dispositivi che utilizzano l’interfaccia e il protocollo
Serial Peripheral Interface (SPI)
• SoftwareSerial – per creare una porta seriale su qualsiasi pin digitale
• Stepper – per gestire i motori passo passo (stepper)
• Wire - per gestire la comunicazione con uno o più dispositivi che impiegano
la modalità di comunicazione a due fili Two Wire Interface (TWI/I2C)
Librerie Standard
28. Esempio
29/10/2016 28
IoT e la piattaforma Arduino
Ing. Francesco Pascale
/* uso del display LCD 16x2 standard Hitachi HD44780
Circuito:
* pin RS collegato al pin digitale 12
* pin E (Enable) collegato al pin digitale 11
* pin D4 collegato al pin digitale 5
* pin D5 collegato al pin digitale 4
* pin D6 collegato al pin digitale 3
* pin D7 collegato al pin digitale 2
* pin R/W collegato al GND
* pin 1 e pin 4 collegati a GND
* pin 2 collegato a +Vcc
* centrale del potenziometro/trimmer da 10 KOhm collegato al pin 3 del'LCD
* pin SX potenziometro/trimmer collegato a +Vcc
* pin DX potenziometro/trimmer collegato a GND
* i pin SX e DX del potenziometro/trimmer possono essere interscambiati
*/
// includere la libreria:
#include <LiquidCrystal.h>
/*
Viene creata l'istanza dell'oggetto LiquidCrystal chiamata lcd in cui
sono indicati i pin dell'LCD collegati alle uscite digitali di Arduino
*/
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
29. Esempio
29/10/2016 29
IoT e la piattaforma Arduino
Ing. Francesco Pascale
void setup() {
//impostiamo il numero di colonne ed il numero di righe di lcd
lcd.begin(16, 2);
// Visualizzo il messaggio sul display
lcd.print("Salve mondo!");
}
void loop() {
// posiziona il cursore in colonna 0 e linea 1
// (nota: la linea 1 e la seconda linea, poichè si conta incominciando da 0):
lcd.setCursor(0, 1);
// stampa il numero di secondi dall'ultimo reset
lcd.print(millis()/1000);
}
30. Esempio
29/10/2016 30
IoT e la piattaforma Arduino
Ing. Francesco Pascale
https://www.arduino.cc/en/Reference/LiquidCrystal
31. Esempio
29/10/2016 31
IoT e la piattaforma Arduino
Ing. Francesco Pascale
https://www.youtube.com/watch?v=i2r7rSvAwBw
32. Differenze tra Arduino e un
Microcontrollore PIC
29/10/2016 32
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Arduino come detto fa parte della famiglia dei microcontrollori ed è
dotato nella sua versione Arduino uno di un microcontrollore Atmega328
• PIC è una famiglia di circuiti integrati a semiconduttore con funzioni
di microcontrollore
• Il PIC è un microcontrollore che opportunamente programmato è in grado
di svolgere diverse funzioni in modo autonomo. Essenzialmente gestisce
delle linee di input e di output in relazione al programma in esso
implementato
• Molto utilizzati soprattutto nel settore industriali e dell’automazione, ma
anche in ambito biomedico e domotico
34. Dispositivi a confronto
29/10/2016 34
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• I microcontrollori PIC equelli della famiglia AVR prodotti dalla
Atmel usati da Arduino presi in considerazione hanno architettura
RISC
• I PIC sono disponibili nelle versioni 8 bit, 16 bit e 32bit, mentre AVR
presente su Arduino Uno è a 8 bit
• I PIC sono programmabili in Assembler o C mentre con Arduino è
possibile utilizzare codice derivato da C/C++
35. Dispositivi a confronto
29/10/2016 35
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Per programmare un PIC c’è bisogno di programmi appositi (Es.
Ktechlab) mentre Arduino è dotato di un proprio IDE
• Il costo di un microcontrollore PIC varia dai 2€ ai 5€ in base al
modello, mentre quello di un Arduino varia dai 10€ ai 40€
• Il PIC è un chip al quale vanno collegati tutti gli altri elementi
hardware, mentre Arduino essere una board già completa e dotata
di altri elementi può essere utilizzata facilmente e a questo si
aggiunge la possibilità di montarci sopra altre shield per ampliarle
sue funzionalità
36. Codici a confronto
29/10/2016 36
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Led_on_off
; setup a pointer to the base address of port 1
LDR R1,=0x2009c020 ; pointer to base of port1
loop
LDR R3,=0x00000000 ; set LED 1 off (all bits 'zero')
CALL Delay
LDR R3,=0x00040000 ; set LED 1 on (bit 18 aka P1.18 is
'one')
CALL Delay
B loop ; branch to loop (endless loop!)
Delay
…
END
37. Microcontrollore vs Microprocessore
29/10/2016 37
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Microcontrollore: dispositivo elettronico
integrato su singolo chip, che nasce come
evoluzione del Microprocessore, utilizzato
all’interno dei sistemi embedded (special purpose)
Microprocessore: Processore elettronico
costituito da uno o più circuiti integrati
di dimensioni molto ridotte
38. Differenze
29/10/2016 38
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Un microprocessore è attualmente l'implementazione fisica più
comune di una CPU ed ha bisogno di elementi esterni per funzionare
(Es. memoria, periferiche I/O), mentre un microcontrollore,
riunisce tutti gli elementi all'interno di un unico piccolo contenitore
• Le capacità di calcolo di un microcontrollore sono estremamente
ridotte. Ad esempio la memoria RAM è formata da qualche
centinaio di celle, e di solito non è espandibile. I microprocessori,
al contrario, possono essere usati per effettuare elaborazioni
complesse su grandi quantità di informazioni
39. Differenze
29/10/2016 39
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• I microcontrollori vengono utilizzati per gli antifurti, gli strumenti
di misurazione, quelli per la regolazione della luminosità, i carica
batterie e i trasmettitori/ricevitori. I microprocessori invece sono
il core di elaborazione all’interno dei PC, capace di leggere,
elaborare e scrivere informazioni in una memoria o in altri
dispositivi digitali
• I microprocessori eseguono i programmi applicativi sfruttando
dispositivi di memoria di massa o a memoria volatile, i
microcontrollori eseguono il programma applicativo che è
solitamente memorizzato su un dispositivo di memoria ROM.
41. Problematiche in Arduino
29/10/2016 41
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Uno dei problemi principali su Arduino è la saturazione della
memoria. Questo avviene quando ad esempio si alloca più spazio di
quello disponibile in fase di inizializzazione o durante un ciclo
Questo problema prende il nome di Stack Overflow
42. Problematiche in Arduino
29/10/2016 42
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• La saturazione della RAM porta a comportamenti strani del
microcontrollore dato che i dati delle variabili iniziano ad essere
recuperati a caso nella memoria, portando ad esempio a
visualizzazioni di caratteri strani su un display LCD, alla stampa di
dati senza senso sulla seriale oppure al blocco stesso dell’esecuzione
del codice.
• La saturazione della RAM è anche un problema che spesso non
viene diagnosticato correttamente: l’utente, spesso, pensa che i
motivi di queste anomalie possano risiedere nel suo codice oppure
nello stesso circuito
43. Problematiche in Arduino
29/10/2016 43
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Come prevenire lo stack overflow?
• Attraverso un software messo a disposizione dalla toolchain
Avr, avr-size. Questo programma restituisce l’occupazione statica di
RAM e della FLASH analizzando lo sketch compilato, prima di
farne l’upload sul microcontrollore
44. Problematiche in Arduino
29/10/2016 44
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Come prevenire lo stack overflow?
• Attraverso l’uso di una libreria denominata MemoryFree che
permette di avere il consumo di memoria istantaneo, vale a dire
durante l’esecuzione del programma stesso
45. Problematiche in Arduino
29/10/2016 45
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Come prevenire lo stack overflow?
• Attraverso la funzione freeRam che fa semplicemente la differenza
fra l’indirizzo di inizio dell’HEAP e quello di inizio dello STACK,
restituendo il numero di byte di SRAM ancora disponibili
46. Problemi noti risolti
29/10/2016 46
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Esistono una serie di problemi noti risolti che sono riportati sul sito
ufficiale di Arduino:
http://playground.arduino.cc/Italiano/Pobleminoti
Questi problemi riguardano sia l’hardware che il software che sono
stati rilevati dalla community nel corso degli anni. Sul portale è
possibile segnalare un nuovo problema ancora non riscontrato il
quale verrà poi trattato ed elaborato al fine di ottenere la risoluzione
dello stesso
49. Come rendere Arduino
professionale: Alcune problematiche
29/10/2016 49
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Alimentazione della scheda: nel momento in cui la scheda va su un
circuito più complesso che deve essere alimentato ad un voltaggio
maggiore (Es. 12V) si rischia di avere dei problemi. Questo può
essere risolto con un regolatore di tensione o con un alimentazione a
voltaggio differente
• Protezione degli I/O : i pin Input e Output non sono protetti e come
tale se li colleghiamo male o gli applichiamo una sovratensione si
rischia di bruciare tutto. Questo può essere risolto sia facendo molta
attenzione sia aggiungendo ad esempio delle resistenze di protezione
in serie
• Vibrazioni meccaniche della board: E’ possibile che durante
l’utilizzo vi possano essere delle vibrazioni meccaniche che possono
andare a danneggiare la board. E’ possibile ovviare a ciò andando ad
applicare dei fissaggi meccanici
50. Come strutturare la progettazione e
lo sviluppo di un sistema embedded
29/10/2016 50
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Un sistema embedded è un sistema sia hardware che software,
progettato appositamente per una determinata applicazione (special
purpose)
51. DEFINIZIONE DELL’ARCHITETTURA
29/10/2016 51
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Durante questa fase si pongono le basi per la definizione
dell’architettura di base del sistema e la scelta dei componenti da
utilizzare.
• Verranno effettuate scelte sia tecniche che economiche che di
reperibilità
• Successivamente verrà mappata l’applicazione scelta
sull’architettura e si stimano le prestazioni
• Questa fase iniziale richiede molto tempo e preparazione da parte di
chi la svolge
52. SVILUPPO SW-FW e HW
29/10/2016 52
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Lo Sviluppo Software-Firmware consiste nella programmazione vera
e propria del sistema e consiste in: Codifica dell’algoritmo, definizione
e codifica dei protocolli di comunicazione interni ed esterni,
customizzazione delle routine di sistema.
•Lo sviluppo Hardware consiste nella realizzazione EX-NOVO o nella
personalizzazione di Circuiti dedicati. Questo avviene quando non è
possibile utilizzare componenti hardware già implementati quali
microprocessori o microcontrollori
•Le due fasi vengono svolte in stretto contatto tra di loro
53. Esempi di Sistemi Embedded
29/10/2016 53
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Telefoni Cellulari (WAP, UMTS, ECC.)
• Sottosistemi intelligenti per il controlo di funzionalità particolari di
auto, treni o aerei (AUTOMOTIVE). Ad Esempio il sistena ABS, il
sistema di controllo dei tergicristalli, sistema di espulsione degli
AIRBAG o la centralina di bordo
• Dispositivi e/o sensori collegati in rete per l’automazione di una casa
(HOME AUTOMATION)
• Riproduttori digitali di suoni portatile ES. Lettore MP3;
• Telecamere di
• Elettrodomestici intelligenti (MACCHINA DA
CAFFÈ;FRIGORIFERO; CONDIZIONATORE; ECC.)
• Dispositivi di automazione di macchine industriali
54. Esempi di Sistemi Embedded
29/10/2016 54
IoT e la piattaforma Arduino
Ing. Francesco Pascale
https://www.youtube.com/watch?v=nfqEt4SSFsQ
55. Arduino in Iot
29/10/2016 55
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Utilizzare la rete Internet per far comunicare tra di loro “oggetti”
• Anche oggetti non strettamente elettronici possono essere collegati o
“attuati” tramite Internet
• Ponte tra il mondo reale e “virtuale”
• Potenzialità cloud offerte dal Web (>=2.0) su oggetti che ne sono
esclusi per natura
57. Arduino in Iot
29/10/2016 57
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• L'elemento di criticità di questo approccio é che sono pochi i
tentativi di normalizzare i protocolli di comunicazione tra questi
dispositivi - spesso chiusi - , impedendo di avere un approccio
olistico nei confronti della domotica e degli oggetti che parlano alla
rete
• Arduino ha introdotto diversi devices in grado di parlare, in diversi
modi, ad internet
58. Problematiche sulla connessione alla
rete
29/10/2016 58
IoT e la piattaforma Arduino
Ing. Francesco Pascale
1. Co-processore
• Soluzione adatta per MCU di fascia bassa (core a 8 bit)
• Semplice e veloce per progetti non complessi
• Arduino Ethernet Shield utilizza il coprocessore Wiznet W5100
• Layer di rete TCP/IP implementato in hardware nel chip
• Layer applicativo a carico della MCU
59. Problematiche sulla connessione alla
rete
29/10/2016 59
IoT e la piattaforma Arduino
Ing. Francesco Pascale
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
60. Problematiche sulla connessione alla
rete
29/10/2016 60
IoT e la piattaforma Arduino
Ing. Francesco Pascale
2. MCU con Ethernet
• 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
61. Problematiche sulla connessione alla
rete
29/10/2016 61
IoT e la piattaforma Arduino
Ing. Francesco Pascale
3. Embedded PC/SoC (System-on-a-Chip)
• 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
62. Problematiche sulla connessione alla
rete
29/10/2016 62
IoT e la piattaforma Arduino
Ing. Francesco Pascale
3. Embedded PC/SoC (System-on-a-Chip)
• La presenza del kernel non permette controlli realtime
• Mancano (o sono molto complesse da utilizzare) le interfacce
elettriche tipiche dei dispositivi elettronici (SPI, I2C...)
63. Problematiche sulla connessione alla
rete
29/10/2016 63
IoT e la piattaforma Arduino
Ing. Francesco Pascale
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
65. Arduino e la connessione alla rete
29/10/2016 65
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Shield Ethernet (Co-processore)
66. Arduino e la connessione alla rete
29/10/2016 66
IoT e la piattaforma Arduino
Ing. Francesco Pascale
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
67. Arduino e la connessione alla rete
29/10/2016 67
IoT e la piattaforma Arduino
Ing. Francesco Pascale
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print(“Start Connection");
Serial.println(Ethernet.localIP());
}
68. Arduino e la connessione alla rete
29/10/2016 68
IoT e la piattaforma Arduino
Ing. Francesco Pascale
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
while (client.connected()) {
if (client.available()) {
…….
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disconnected");
}
}
69. Arduino e la connessione alla rete
29/10/2016 69
IoT e la piattaforma Arduino
Ing. Francesco Pascale
https://www.youtube.com/watch?v=nYzEbEOMGuo
70. Arduino e la connessione alla rete
29/10/2016 70
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Arduino Yun (Ibrido Soc + MCU)
71. Arduino e la connessione alla rete
29/10/2016 71
IoT e la piattaforma Arduino
Ing. Francesco Pascale
72. Arduino e la connessione alla rete
29/10/2016 72
IoT e la piattaforma Arduino
Ing. Francesco Pascale
73. Arduino e la connessione alla rete
29/10/2016 73
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Scheda in modalità Access Point alla prima accensione
• Configurazione tramite WebPanel semplificato
• Programmazione del microcontrollore tramite wireless e tramite
Ethernet
• La libreria Bridge consente la comunicazione tra Arduino e il
sistema operativo (SoC)
• Per poter comunicare si crea una connessione protetta tra Yún ed il
computer via SSH
• La classe Process consente al microcontrollore di richiamare
processi eseguiti dal sistema operativo (SoC)
• Sul processore di YUN è disponibile un server web. Per poterlo
utilizzare bisogna inserire una scheda micro-SD e crearci sopra le
cartelle “/arduino/www” e “/data” che saranno poi utilizzate dal
webserver
74. Arduino e Cyber Security
29/10/2016 74
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Uno dei problemi principali è quello di garantire la sicurezza dei
dispositivi che si utilizzano
• Spesso errori banali quali rendere l’IP pubblico o non utilizzare
alcun sistema di crittografia dei dati sono alla base di possibili
vulnerabilità
• In generale ogni dispositivo ogni volta che aggiungiamo un
dispositivo alla rete dobbiamo ricordarci che questo dovrà essere
trattato come ogni altro oggetto già esistente, sicurezza inclusa.
• La problematica della Cyber Security in ambito IoT è ad oggi molto
dibattuta
75. Problematiche generali
29/10/2016 75
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• IP Pubblici
• Comunicazioni non Criptate
• Attacchi DDOS
• Vulnerabilità di sistema
• Credenziali di accesso
• Mancanza di Firewall
• Mancanza di Approccio Middleware (Esempio sistemi Scada)
• …
76. Come rendere sicuro Arduino come device
IoT: Esempio DDOS
29/10/2016 76
IoT e la piattaforma Arduino
Ing. Francesco Pascale
• Verificare il comportamento le performance dei moduli di rete
ethernet software TCP/IP e hardware TCP/IP nel caso di attacco di
tipo DDOS
• Questo è un caso molto comune al giorno d’oggi in quanto la
saturazione della banda comporta una indisponibilità del sistema che
nel caso di sistemi delicati potrebbe essere un grosso problema
• Nell’esempio verranno valutate le prestazioni di 2 dispositivi in
particolare: Hardware TCP/IP ethernet module - WIZ550io e
Software TCP/IP ethernet module - ENC28J60
• Nell’esempio l’attacco verrà simulato via software tramite il
programma DDOS attack tool : LOIC (Freeware)
77. Come rendere sicuro Arduino come device
IoT: Esempio DDOS
29/10/2016 77
IoT e la piattaforma Arduino
Ing. Francesco Pascale
78. Come rendere sicuro Arduino come device
IoT: Esempio DDOS
29/10/2016 78
IoT e la piattaforma Arduino
Ing. Francesco Pascale
Verranno efettuati 4 test in questo modo:
• 1. Hardware TCP/IP Ethernet module / no DDOS network attack
• 2. Hardware TCP/IP Ethernet module / DDOS network attack
• 3. Software TCP/IP Ethernet module / no DDOS network attack
• 4. Software TCP/IP Ethernet module / DDOS network attack
79. Come rendere sicuro Arduino come device
IoT: Esempio DDOS
29/10/2016 79
IoT e la piattaforma Arduino
Ing. Francesco Pascale
https://player.vimeo.com/video/119504737
80. Come rendere sicuro Arduino come device
IoT: Esempio DDOS
29/10/2016 80
IoT e la piattaforma Arduino
Ing. Francesco Pascale
https://player.vimeo.com/video/119504736
81. Come rendere sicuro Arduino come device
IoT: Esempio DDOS
29/10/2016 81
IoT e la piattaforma Arduino
Ing. Francesco Pascale
https://player.vimeo.com/video/119504738
82. Come rendere sicuro Arduino come device
IoT: Esempio DDOS
29/10/2016 82
IoT e la piattaforma Arduino
Ing. Francesco Pascale
https://player.vimeo.com/video/119504739
83. Come rendere sicuro Arduino come device
IoT: Esempio DDOS
29/10/2016 83
IoT e la piattaforma Arduino
Ing. Francesco Pascale