• Non ci sono risultati.

Una buona “user story”, secondo i canoni della programmazione Agile, deve essere INVEST, acronimo di:

• Independent, ogni storia deve essere indipendente dalle altre;

• Negotiable, non definisce una specifica, ma una “feature” (“Dovrebbe fare...”), quindi negoziabile;

• Valuable, deve essere valutabile da tutti gli attori coinvolti; • Estimable, banalmente deve essere stimabile;

• Small, cio`e abbastanza corta (e ragionevolmente esplicativa) da essere conseguita in poco tempo;

• Testable, naturalmente deve essere testabile. Le U.S. sviluppate in fase di pianificazione sono state 3:

1. L’utente deve registrare la propria rete WiFi attraverso una routine; 2. L’utente pu`o resettare le credenziali di rete attraverso una routine; 3. L’utente pu`o visitare il Web Service sulla piattaforma.

4.3 Progettazione 29

In seguito a questa prima stesura, le “dipendenze” da risolvere sono au- mentate: il modulo ESP, viste le esigenze, deve cambiare “modalit`a di setup”, poich´e oltre a leggere da memoria EEPROM e, se possibile, collegarsi alla WiFi, ora deve switchare (all’occorrenza) in modalit`a STA MODE (Station) per fare una scansione delle reti Wireless rilevate e caricarle sulla DropDown List degli ESSID disponibili (e non hidden) a cui collegarsi, poi switchare in SOFTAP MODE (Software Access Point ) per servire un Web Service su una nuova rete locale creata e, alla chiusura del gateway/server, resettarsi e ripartire in AP MODE (Access Point ) per incominciare/riprendere l’attivit`a solita (Post di dati attraverso una WiFi ).

In un secondo momento, sono state aggiunte U.S. pi`u specifiche, riferite alle informazioni di cui il dispositivo deve tenere traccia:

1. Il dispositivo deve misurare la potenza del segnale WiFi (RSSI, Recei- ved Signal Strength Indication) a cui `e collegato;

2. Il dispositivo deve rilevare la potenza (in Volt) dell’alimentazione elet- trica;

3. Il dispositivo deve prevedere una modalit`a a basso consumo / deepSleep Mode e risvegliarsi autonomamente;

4. Il dispositivo deve dare all’utente un minimo di feedback attraverso dei led.

4.3

Progettazione

La progettazione software `e stata scandita in 6 aree di pertinenza: 1. Setup, funzione che fa parte delle Structures di Arduino insieme alla

Loop, eseguita una volta sola al lancio di uno sketch; solitamente gli sketches per ESP sviluppano il main tutto all’interno di questa fun- zione; il nostro Setup inizializza la seriale per il debugging e i pin di

30 4. Software

INPUT/OUTPUT per i led e il bottone B1, setta i pin per attivare il protocollo I2C (necessario per la comunicazione con il sensore BMP), legge da EEPROM le credenziali (se esistono) e tenta di connettersi all’ ESSID trovato con la relativa password di rete, scatta la routine di registrazione altrimenti.

v o i d s e t u p() ;

2. Loop, `e il main della nostra Weather Station; d`a la possibilit`a di re- gistrare la il dispositivo, se premuto il bottone B1 in tempo, altrimenti inizializza i sensori, li legge (se inizializzati correttamente) e li posta al server. In seguito va in deepSleep Mode per 30 minuti e, al risveglio, riparte dalla Setup.

v o i d l o o p() ;

3. Connections, funzioni che gestiscono le connessioni del modulo, cio`e la connessione Standalone (Crea una nuova rete locale a cui collegarsi per registrare la Weather Station), la connessione alla rete WiFi, la scansione delle reti WiFi disponibili e la post al server.

S t r i n g l a u n c h S t a n d A l o n e(c o n s t c h a r * essid,c o n s t c h a r * pwd) ; // d e f a u l t : " W e a t h e r S t a t i o n E S P " ," h e l l o i o t " v o i d c o n n e c t T o N e t w o r k(c o n s t c h a r e s s i d[] , c o n s t c h a r p a s s w o r d[] , c o n s t c h a r s t r i n g[]) ; c h a r* s c a n N e t w o r k s() ; int p o s t T o S e r v e r(S t r i n g api_key, f l o a t f1, f l o a t f2,

f l o a t f3, f l o a t f4) ; // key per s c r i v e r e sul server , f o r n i t a d a l l ’ U n i b o ( o da T h i n g S p e a k ) , t e m p e r a t u r a DHT , u m i d i t a ’ DHT , t e m p e r a t u r a BMP , p r e s s i o n e BMP

4. Sensors, funzioni per gestire l’inizializzazione e la lettura dei sensori, attraverso l’uso di librerie esterne.

v o i d i n i t i a l i z e D H T 2 2() ;

f l o a t r e a d D H T 2 2(int s e n s) ;// per d e c i d e r e q u a l e dei due v a l o r i l e g g e r e ( t e m p ./ u m i d .)

4.3 Progettazione 31

b o o l i n i t i a l i z e B M P 2 8 0() ;

f l o a t r e a d B M P 2 8 0(int s e n s) ;// per d e c i d e r e q u a l e dei due v a l o r i l e g g e r e ( t e m p ./ p r e s s .)

5. Web Service, set di funzioni che gestiscono la pagina web; ogni fun- zione carica una pagina HTML diversa, con del CSS embedded e senza alcun linguaggio di scripting, e proprio per questo motivo si `e cercato di creare/emulare un servizio HTTP RESTful (sebbene non sia presente nessun tipo di scripting) assegnando ad URI diverse servizi differenti; la handleRoot() `e quella pi`u importante, poich´e `e quella che contiene il form di registrazione del dispositivo.

v o i d h a n d l e R o o t() ; // H o m e del s e r v i z i o , c o n t i e n e il f o r m di r e g i s t r a z i o n e v o i d h a n d l e P o s t() ; // P a g i n a c r e a t a al m o m e n t o di s u b m i t del form , r e d i r e c t a h a n d l e E x i t () v o i d h a n d l e R e s e t() ;// P e r m e t t e di l a n c i a r e una r o u t i n e per r e s e t t a r e le c r e d e n z i a l i d a l l a m e m o r i a E E P R O M v o i d h a n d l e E x i t() ; // P e r m e t t e di c h i u d e r e il server , la m o d a l i t a ’ S t a n d a l o n e e di r e s e t t a r e il d i s p o s i t i v o v o i d h a n d l e N o t F o u n d() ; // P a g i n a non t r o v a t a v o i d h a n d l e I o T() ; // C a r i c a una p a g i n a i n f o r m a t i v a su IoT v o i d h a n d l e T o o l s() ; // C a r i c a una p a g i n a che c o n t i e n e p u l s a n t i a s e r v i z i ( h a n d l e R e s e t () e h a n d l e E x i t () ) v o i d h a n d l e A b o u t() ; // C a r i c a una p a g i n a i n f o r m a t i v a sul p r o g e t t o v o i d h a n d l e C o n t a c t() ; // C a r i c a una p a g i n a i n f o r m a t i v a sui n o s t r i c o n t a t t i e l i n k u t i l i

6. Auxiliary , routines utili e utilizzate pi`u volte

i n t 3 2 _ t g e t R S S I(c o n s t c h a r* t a r g e t _ s s i d) ; // L e g g e s e g n a l e W i F i

v o i d b l i n k L e d(int pin,int r e p e a t) ;

32 4. Software

4.4

Sviluppo

4.4.1

Ambiente di sviluppo

Il progetto `e stato sviluppato e testato interamente attraverso tools e soft- ware open-source:

abbiamo lavorato solo su piattaforme con Linux come sistema operativo (Li- nux Mint 17.3 Rosa-Cinnamon)3, l’IDE utilizzato `e statoArduino IDE4, e le

librerie tutte scaricabili da GitHub.

4.4.2

Librerie utilizzate

# i n c l u d e < A r d u i n o . h >

# i n c l u d e < W i r e . h >

La prima per includere il core di Arduino, cio`e tutte le macro, le costanti e i controlli sul microcontrollore (versioni di Atmel AVR5, famiglia di micro-

controllori RISC);

la seconda permette di creare il protocollo I2C su due pin dati in INPUT a piacere. Link su GitHub6. # i n c l u d e < E S P 8 2 6 6 W i F i M u l t i . h > # i n c l u d e < E S P 8 2 6 6 H T T P C l i e n t . h > # i n c l u d e < E S P 8 2 6 6 W i F i . h > # i n c l u d e < E S P 8 2 6 6 W e b S e r v e r . h > # i n c l u d e < E S P 8 2 6 6 m D N S . h > # i n c l u d e < W i F i C l i e n t . h >

Fanno parte del core ESP8266, citato precedentemente, forniscono primitive per sfruttare il modulo ESP nell’interfacciarsi alla rete. Inoltre ci hanno permesso di avere dei metodi fondamentali per il conseguimento in toto delle nostre User Stories:

3https://www.linuxmint.com/download.php 4https://www.arduino.cc/en/Main/Software

5http://www.atmel.com/products/microcontrollers/avr/

4.5 Testing 33

ESP.g e t V c c() ; // Per l e g g e r e la p o t e n z a d e l l ’ a l i m e n t a z i o n e ESP.r e s e t() ; // Per r e s e t t a r e il d i s p o s i t i v o

ESP.d e e p S l e e p(u i n t 3 2 t t i m e u s e c) ; // Per far d o r m i r e il d i s p o s i t i v o per t i m e u s e c m i c r o s e c o n d i

Link su GitHub7.

# i n c l u d e < E E P R O M f o r A u t h . h >

Libreria scritta da noi ad hoc per leggere/scrivere le credenziali sulla memoria EEPROM della board , basandoci sulla libreriaEEPROM.h di Arduino. Link su GitHub8.

# i n c l u d e < DHT . h >

# i n c l u d e < D H T _ U . h >

Libreria per gestire i sensori DHT (DHT Unified supporta DHT11, DHT21 e DHT22).

Link su GitHub9.

# i n c l u d e < A d a f r u i t _ S e n s o r . h >//

# i n c l u d e < A d a f r u i t _ B M P 0 8 5 . h >//

Libreria per gestire i sensori BMP (BMP085 supporta BMP180 e BMP280). Link su GitHub10 11.

4.5

Testing

Il lavoro svolto nella fase di testing `e stato incentrato nella produzione (manuale e via software) di test che emulavano un evento o un comporta- mento umano.

I primi ad essere stati prodotti sono stati i test di lettura dei sensori, per verificare la reale correttezza delle librerie importate e di queste ultime in concomitanza di altre routines e per assicurarci l’integrit`a dei nostri sensori. In seguito, i test per creare un “timed button” per far scatenare la routine

7https://github.com/esp8266/Arduino/tree/master/libraries 8https://github.com/eldiablo100000/EEPROM4Auth 9https://github.com/adafruit/DHT-sensor-library 10https://github.com/adafruit/Adafruit Sensor

34 4. Software

di registrazione, che sono consistiti nel testing manuale con i jumper sulla breadboard per la circuiteria, e sempre manuali per assicurare il comporta- mento del bottone in caso di deepSleep mode o meno.

I test per le connessioni, invece, sono stati quelli pi`u complicati da produrre: dopo aver esaminato le 3 modalit`a che avremmo utilizzato nello sketch sin- golarmente, cosa semplice visto che le librerie ESP8266* sono tutte corredate da esempi molto snelli da cui attingere, testare l’integrazione dei 3 moduli ha portato qualche conflitto risolvibile unicamente modificando l’ordine d’e- secuzione di alcune chiamate a funzione.

Figura 4.1: Screenshot della comunicazione via seriale tra computer

(attraverso l’IDE) e la Weather Station.

Documenti correlati