DUE ARDUINO COLLEGATI IN LAN

In questa pagina spiego come collegare tra di loro, in rete locale, due Arduino dotati di shiel Ethernet, questo tipo di comunicazione non e' ne peggiore ne migliore, in senso assoluto, delle tante altre possibili (I^2Cbus, RS323, RS485...) ma e' solo un altro modo per far comunicare delle periferiche usando il protocollo Ethernet. In questo contesto, data la singolarita' del collegamento, ho chiamato gli Arduino con nomi inerenti alla loro funzione e cioe' Master e Slave, il primo spedisce dei dati ed il secondo li riceve e agisce di conseguenza, tutto qui.
In particolare il Master spedisce un carattere numerico (1, 2, 3...) che viene incrementato ad ogni pressione di un tasto collegato al suo pin 2, lo slave,  una volta connesso, legge il carattere numerico ricevuto e con questo cambia stato del pin corrispondente della porta A ed illumina il led collegato ad esso.
Il programma e' assolutamente semplice e serve solo a dimostrare il meccanismo di questo collegamento.

Ma veniamo alla descrizione particolareggiata del programma partendo da quello del Master.
Come sempre consiglio di abilitare la visualizzazione del numero delle righe nell'IDE di Arduino perche' faro' riferimento ad esse per la spiegazione.

https://digilander.libero.it/el840/Arduino%20in%20lan_files/Cattura1.JPG

Nella riga 3 c'e' la dichiarazione della stringa MAC, nella riga 4 quella relativa all'indirizzo IP locale entrambi le due dichiarazioni sono relative alla scheda  Master, per ultima, nella riga 5, troviamo la dichiarazione dell'indirizzo IP della scheda Slave.
Dalla riga 6 alla riga 13 troviamo queste istruzioni:

https://digilander.libero.it/el840/Arduino%20in%20lan_files/Cattura2.JPG
Le prime due sono delle semplici dichiarazioni di variabili, in void setup() alla riga 10 c'e' l'istruzione per l'inizializzazione di Ethernet,  alla riga 10 c'e'  quella per un ritardo di 1 sec occorrente all'hardware della scheda Ethernet shield per inizializzarsi, alla riga 12 la messa in input del pin 2 con pullup (dove sara' collegato un tasto attivo basso).
Dalla riga 14 alla riga 28 troviamo le seguenti istruzioni:

https://digilander.libero.it/el840/Arduino%20in%20lan_files/Cattura3.JPG
L'istruzione alla riga 16 controlla se il tasto collegato al pin 2 e' premuto (livello basso), se non è stato premuto (livello alto grazie al pullup interno) il programma ritorna ad void loop() senza eseguire alcuna operazione.
Nel caso che il tasto sia stato premuto la if esegue il suo corpo, tralasciando per il momento le due istruzioni alla riga 18 e 19 (si suppone che abbiamo appena acceso Arduino e la variabile "i" è a 1)  arriviamo all'istruzione alla riga 20 dove la if esegue il suo corpo solo se lo slave è connesso, (con l'istruzione client.connect(server, 80) si attiva la connessione tra il Master e lo Slave).
Una volta connesso il Master invia il carattere numerico contenuto nella variabile "i" e successivamente lo incrementa. Alla riga 24 viene interrotto il collegamento tra Master e Slave, alla riga 25 la for serve, assieme al delay,  a creare una sorta di antirimbalzo per il tasto, infatti quando il tasto è premuto il pin 2 va basso e la for ripete se stessa fino a quando il tasto  viene rilasciato.
La variabile i viene incrementata fino al valore 9, dopo di che tramite la if alla riga 18 viene azzerata..

Vediamo ora il programma dello slave.
Nella riga 3 c'e' la dichiarazione  della stringa MAC , nella riga 4 quella relativa all'indirizzo IP locale entrambi le due dichiarazioni sono relative alla scheda  Slave, per ultima, nella riga 5, troviamo la dichiarazione del server porta 80.

https://digilander.libero.it/el840/Arduino%20in%20lan_files/Cattura4.JPG
Alla riga 8 l'inizializzazione di Ethernet, alla riga 9 avverte il Master che lo Slave si mette in ascolto, alla riga 10 imposta come uscita  la porta A, poi c'e' il solito ritardo.

https://digilander.libero.it/el840/Arduino%20in%20lan_files/Cattura5.JPG
Alla riga 15 il programma carica nella variabile client lo stato ritornato dalla funzione server.available(), se è 1 (ovvero il Master e' disponibile)  la if alla riga 16 esegue il suo corpo se no il programma non esegue alcuna operazione e torna, tramite void loop(), a controllare se il master e' disponibile.
Alla riga 18 il while ripete il suo corpo fino fintanto che  il Master e' connesso, alla riga 20 la if esegue il suo corpo se un dato è pronto per essere letto, nella riga 22 viene letto il dato.
https://digilander.libero.it/el840/Arduino%20in%20lan_files/Cattura6.JPG

Dalla riga 23 alla 43 la switch, in base al carattere letto, illumina il led corrispondente. Alla riga 47 si interrompe il collegamento tra Master e Slave  e quest'ultimo torna ad ascoltare

https://digilander.libero.it/el840/Arduino%20in%20lan_files/Cattura7.JPG

Tenete conto che per il funzionamento del sistema non c'è bisogno del computer, basta il router.

File sorgente
Fabio

HOME