Sei sulla pagina 1di 8

CODICE

Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con


Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di
domotica e robotica. Il codice utilizzato per la realizzazione di questo
progetto non è molto complesso ma richiede alcune parti di spiegazione,
specialmente per chi è alle prime armi con questo tipo di ambienti.

ANALISI DEL CODICE

Queste sono le prime due righe del codice. Dato che è possibile includere
delle librerie predefinite, con la funzione ‘#include’ inserisco la libreria
SPI che mi permette la comunicazione seriale tra la scheda Arduino e il
computer, inoltre inserisco anche la libreria WiFi perché la piattaforma
deve comunicare con il router tramite la modalità WiFi.
Inserendo questi due tipi di librerie si può usufruire di tutte le funzioni e
metodi ad esse associate.
Una delle parti fondamentali di quasi tutti i linguaggi di programmazione
è la dichiarazione delle variabili. Per quanto riguarda questo codice
dichiarare le variabili vuol dire selezionare la porta desiderata
assegnandole dei nomi con la parola ‘int’.
Esempio: int alza = 9 ; significa che la porta 9 della scheda ha il nome
‘alza’. Una cosa importante è inoltre il punto e virgola alla fine della riga di
codice. Per scrivere i commenti basta mettere // davanti al commento.

Oltre a dichiarare le variabili generali è fondamentale anche definire le


variabili necessarie per la comunicazione WiFi. Con il comando ‘char’
si definisce un array di caratteri contenenti il nome della rete a cui
collegarsi, mentre nell’altro array si memorizza anche la rispettiva
password per creare la connessione tra router e Arduino.
Si deve implementare anche uno stato iniziale dello shield WiFi con ‘int’
e grazie alla funzione ‘WiFiServer’ si può inizializzare il numero di porta
contenente il server web di Arduino che in questo caso è la porta 80.
Per scrivere una procedura che non deve restituire nessun valore e deve
solo contenere le informazioni per le modalità delle porte e controlli
generali si usa la ‘void setup’ . Questa procedura è necessaria in tutti i
programmi Arduino. Con il comando ‘pinMode’ si può scegliere la
modalità di lavoro delle varie porte che possono essere di INPUT o
OUTPUT, in questo caso le porte sono tutte OUTPUT dato che bisogna
accendere dei componenti. Con il comando ‘Serial.begin(9600)’ si può
aprire la porta seriale così da poter iniziare la comunicazione seriale tra
Arduino e il PC con la velocità di 9600bps. Con il primo ‘if’ si controlla che
lo shield sia presente (questo serve soprattutto per verificare che non vi
siano danneggiamenti tra shield e Arduino) e naturalmente se non è
presente non si continua il programma e stampo nelle finestra seriale che
lo shield non è presente. Tutto questo è possibile realizzarlo grazie alla
funzione ‘WiFi.status()’ che permette di leggere lo stato del WiFi.
Con il ciclo ‘while’ verifico se lo stato del WiFi non è connesso e mentre
questa condizione è vera stampa nella finestra del seriale l’operazione di
ricerca della rete e una volta trovata si collega grazie alla funzione
‘WiFi.begin’ contenente il nome della rete e la rispettiva password. Una
volta collegato si deve anche far partire il server web in modo da
verificare se è stata ricevuta una richiesta di connessione da parte di un
client.

Con la procedura ‘stampaStato’ è possibile scrivere nella finestra seriale


le varie informazioni necessarie per verificare che la procedura ‘setup’ sia
stata eseguita correttamente. Le informazioni vengono scritte grazie alla
funzione ‘ Serial.println’ che in questo caso permette di stampare il
nome della rete preso dalla ’ WiFi.SSID’, l’indirizzo IP (ottenuto grazie al
servizio DHCP) con il ‘WiFi.localIP’, la potenza del segnale ottenuta da
‘WiFi.RSSI’.
In questo pezzo di codice viene definito il programma principale, cioè la
parte del programma in cui si possono far compiere determinate azioni
alla scheda Arduino. La parola per identificarlo è ‘void loop’ che è
obbligatoria anche se presenta la parola void che potrebbe essere vista
come una procedura. Tuttavia, essa non restituisce alcun valore se non
quello di far verificare le condizioni del programma. Dato che questo
progetto si basa sulla struttura di un server e di una pagina web è
necessario verificare determinate condizioni; la prima è vedere se vi sono
dei client con la funzione ‘server.available()’ in modo da implementare
un oggetto nella variabile client definita con il ‘WiFiClient’. Come seconda
cosa devo verificare se si è ottenuto una richiesta di connessione da
parte del client cioè verificare che esista l’oggetto client, in caso di
conferma implemento una stringa vuota chiamata comando con la
funzione ‘string’. Inoltre implemento un ciclo while in cui verifico se la
connessione è avvenuta da parte di un client con la ‘client.connected()’ e
leggo i byte inviati sempre dal client con la ‘client.available()’. È
necessario inoltre salvare i byte in un carattere per poi in seguito
verificare se è di riga nuova. Con l’ultimo if invece se posso stampare la
pagina web confrontando la lunghezza del comando.
Con il comando ‘client.println’ stampo la pagina web con gli appositi
comandi.
Con queste funzioni è possibile verificare che nella stringa comando sia
contenuta una funzione di tipo ‘GET’. Per leggere la stringa uso
‘comando.endsWith’ mentre per accendere la porta desiderata basta
scrivere ‘digitalWrite’ contenente il nome della porta e il comando HIGH
per accendere e LOW per spegnere. In aggiunta si è pensato di far
spegnere le porte automaticamente dopo tre secondi grazie alla funzione
‘Delay’. Per far disconnettere il client è necessario scrivere ‘client.stop()’

Per terminare il ciclo è fondamentale scrivere ‘break’. I controlli che


vengono di seguito appartengono al gruppo di if che vi sono all’inizio.
Servono per ripulire la stringa comando e controllare che il carattere
contenente i byte sia diverso dal carattere di fine riga concatenandolo
nella stringa comando.

Una volta terminata la realizzazione del programma è necessario caricarlo


sulla scheda hardware in modo da verificarlo concretamente.

Potrebbero piacerti anche