Arduino scambia dati tramite ethernet/wifi

Salve,
Ho in mente di attuare un progetto composta da più arduino+ethernet_shield connessi insieme.

In pratica in diverse stanze della casa vorrei piazzare degli arduino+ethernet_shield "slave" che:

  • leggono alcuni sensori: temperatura, umidità, luminosità, pressione;
  • comandano alcune uscite digitali (tipo LED on/off);
  • visualizzano dati tramite display locale.

Periodicamente (ogni 10 sec) l'arduino "Master", connesso alla stessa rete:

  • chiede ai vari slave i valori letti;
  • crea uno più datalog (uno per ogni stanza) e li salva su una SD;
  • visualizza i valori su una pagina web (per visualizzarli con smarphone, PC etc);
  • tramite la stessa pagina vorrei poter comandare le uscite sui dispositivi "slave", o comunque inviare loro delle istruzioni.

Sono capace di scrivere un codice in grado di leggere sensori, creare datalog e attivare/disattivare uscite.
Perciò la mia domanda è:
Quale è il metodo più semplice per fare comunicare, via web, i vari moduli "slave" con il modulo master?

Cercando la risposta in rete, si trovano diverse soluzioni (invio UDP, invio TCL, creare pagina HTML e leggere i dati da essa).
Per ognuna di queste soluzioni mi dovrò studiare bene i vari esempi e un minimo di teoria, ma chiedo aiuto a voi per sapere quale "strada" mi consigliate (quale è la più semplice o la più adatta) per fare comunicare i vari moduli slave con il master.

Piccoli appunti:
Utilizzo ethernet shield poiché ho già la predisposizione in casa con le prese LAN su 2 stanze, ovvero quelle che voglio monitorare.
Non voglio usare moduli di comunicazione radio tipo 433MHz, NRFL04 o bluetooth;
Non voglio usare comunicazione seriale "fisica" tra i vari moduli (tipo SPI o I2C), poichè saranno messi in stanze diverse e non posso tirare cavi tra di loro.
Inoltre, in un prossimo futuro vorrei poter sostituire le ethernet shield con dei moduli wifi ESP01, basati su ESP12 (credo li conosciate meglio di me). Così avrei la possibilità di connettere moduli anche dove non ho prese LAN disponibili. In quel caso però penso programmerò direttamente l'ESP12 al posto di arduino ma la sostanza (e il codice di scambio informazioni) non dovrebbe cambiare.

Grazie in anticipo,
Daniele

Danz892:
si trovano diverse soluzioni (invio UDP, invio TCL, creare pagina HTML e leggere i dati da essa).

Il livello di comunicazione più elementare, simile ad una seriale, è lo scambio di pacchetti UDP (non c'è garanzia che vengano ricevuti, non c'è ack). Il TCP richiede una fase di connessione preliminare, gestisce autonomamente ritrasmissioni in caso di errore, ack, ricomposizione dei pacchetti eventualmente frammentati, ma per questo è più lento e in caso di stazione fuori servizio potrebbe bloccarsi in attesa di risposta.

L'HTTP invece è un protocollo di livello superiore, i suoi dati (request e response) vengono trasportati tramite pacchetti TCP, e per un semplice dialogo tra moduli è una complicazione inutile.

Serve invece se si vuole che un Arduino funzioni da webserver interrogabile da un qualsiasi browser.

Grazie per la risposta rapida,
E per la rapida spiegazione dei vari protocolli.
Ero orientato su UDP, perché, vorrei dire che è quello che ho trovato più documentato, ma in realtà è quello che ho capito di più :slight_smile: .
Per qiantoquanto riguarda l'ack pensavo di farne uno io con un messaggio del tipo "ricevuto", non sarà serio come, immagino, quella del tcp/ip ma credo di poter farmelo bastare.
Per documentarmi e studiare il protocollo TCP qualcuno di questo forum ha degli esempi/link da condividere?
Spero di trovare tempo (e voglia) di studiarlo.

L'HTTP invece è un protocollo di livello superiore, i suoi dati (request e response) vengono trasportati tramite pacchetti TCP, e per un semplice dialogo tra moduli è una complicazione inutile.

Questa è la mia ultima scelta infatti, per quanto riguarda la comunicazione tra il master e gli slave. Userò il protocollo per creare la pagina "consultabile" da Internet.

Intanto grazie ancora
Saluti,
Daniele