Trasformare un progetto utilizzando WiFI

Salve a tutti ho da poco approcciato ad Arduino e nelle ultime settimane mi sono dedicato ad un progettino che pian piano ho ampliato.
Spero di essere nella sezione giusta...nel caso mi scuso in anticipo.

Ho utilizzato una board uno e tutto funziona bene (lo sto testando da qualche giorno), ma ora vorrei gestirlo da remoto utilizzando il wifi.

Avevo a disposizione un paio di boards che montano esp8266, ho quindi attivato un servizio di cloud server (non Blynk), ho settato le schede che utilizzano esp8266 e al primo colpo hanno effettuato regolarmente la connessione, gestiscono tranquillamente da remoto alcune operazioni etc.

Ora avrei necessità di mettere in comunicazione la uno con la scheda wifi in modo da lasciare la parte operazionale alla uno e utilizzare l'altra scheda solo per inviare/ricevere dati e comandi dalla rete.

Leggendo qua e là nel forum mi è parso di capire che il collegamento fra le schede è possibile utilizzando un collegamento seriale I2C gestendo una configurazione master/slave, ma confesso che non ci ho capito moltissimo soprattutto per gli aspetti pratici e per la gestione del codice.

Vorrei chiedere quindi, se possibile, qualche breve spiegazione in merito, giusto per iniziare a capirci qualcosa in più.

Grazie

Puoi collegarle anche solo in seriale, ma quanto sono distanti le due schede?

In ogni caso, a meno che non ci siano vincoli hardware di qualche tipo (es. usi più di un ingresso analogico?), perché non valuti di migrare alle WeMos D1, che di fatto sono come delle Arduino col WiFi già integrato (montano appunto ESP) ed hanno anche più memoria? Le D1 R2 hanno le dimensioni e schema di pin di Arduino Uno, ma ci sono persino le Mini che sono piccolissime (ovviamente a discapito del numero di pin).

Le due schede sono vicinissime, solo che al di la del collegamento fisico che mi sembra intuitivo non ho capito come gestire la comunicazione fra le due.

In realtà la scelta è caduta su questa modalità per disperazione, poichè fra le schede che ho c'e' anche la wemos D1 R2 e funziona tutto benissimo anche in remoto, solo che ha un solo pin analogico e a me ne servono tre o almeno due e almeno 7-8 pin digitali. So che ci sono gli ADC per risolvere il problema ma mi pare di aver capito che alternano le letture su tutti i pin di espansione riportandoli sul pin target e con molta onestà non ne ho capito la logica, nel senso che non capito come utilizzarli nel progetto. Ho anche una Uno + atmega328p+esp8266 ma se programmo l'esp (selezionando con i dip switch) mi si blocca segnalando l'errore perchè non riconosce i pin analogici diversi da A0, se programmo l'atmega mi da errore perchè non riconosce la libreria dell'esp. Quindi dovrei, così a senso però perchè ancora non sono ad un livello tale da poter avere certezze, spezzare il codice in due dividendolo fra la parte destinata all'atmega e la parte destinata all'esp (ognuno per le operazioni di competenza) e poi con i dip attivare la comunicazione fra i due ? che è di tipo seriale ? Ho visto anche un progetto realizzato con un mosfet che permette di aggiungere un altro pin, ma non vorrei far danni con i voltaggi.
Ma una Lolin D32/pro wroom, che leggevo ha 6 pin analogici e 22 digitali, sarebbe una soluzione più semplice ?

Ok, viste le condizioni mi sembra più semplice implementare la comunicazione seriale rispetto al cambiare quasi tutto. Io ho fatto una cosa mooolto simile ad esempio per un progetto creato con una UNO (è un monitor della produzione del fotovoltaico e attuatore di due ventole di raffreddamento, quindi con RTC, sensore di corrente, due sensori di temperatura) che inizialmente volevo gestire via radio, poi con Bluetooth ma poi ho visto che è molto più pratico via WiFi per cui ho affiancato alla UNO una WeMos D1 che in sostanza non fa altro che ricevere via UDP i comandi che poi "gira" via seriale alla UNO, e da quest'ultima sempre via seriale riceve ogni 10 secondi le informazioni sull'energia prodotta e le manda via UDP ad un display dentro casa (WeMos D1 mini) e, opzionalmente, anche ad un PC.

Detto questo, la comunicazione in sé non è complicatissima, quello che scrivi sulla seriale di uno lo ricevi nell'altra. Il primo problema potrebbe essere nella sincronizzazione e nell'integrità del dato, ossia devi accertarti che chi riceve riceva tutto il dato e non solo qualche parte di esso, e che sia quindi in grado di acquisire le informazioni in modo corretto (tralascio eventuali problemi legati ad errori di trasmissione, ma se sono vicine non hai problemi).

Quindi per prima cosa dovresti definire un tuo seppur minimo protocollo di comunicazione, che implementerai magari su pin diversi da quelli della UART interna (D0 e D1), ossia usando la libreria SoftwareSerial su altri pin.
Non so se tu abbia mai avuto a che fare con protocolli di comunicazione, comunque per farla più breve e semplice possibile, diciamo che devi stabilire un carattere di "start" ed uno di "end" che delimitano il "pacchetto" dati in modo che questi non possano confondersi col contenuto (ossia non devono essere caratteri che potrebbero trovarsi anche nel pacchetto). Ad esempio io ho usato '@' come start e '\n' come end (cosa che mi consente anche di "vedere" in debug sulla seriale ciò che si scambiano). Il "pacchetto" dipende da cosa devi comunicare, io generalmente riservo il primo carattere dopo lo start ad un codice che identifica il comando e da questo anche il tipo di dato (il "payload").

Il protocollo immagino che lo implementerai, come ho fatto anche io, sulla UNO, mentre la WeMos (o comunque la ESP) fa solo da "passante" delle comunicazioni che nel mio caso vengono gestite tramite degli UDO broadcast, ma non so tu cosa avevi in mente.

Quindi prova ora a descrivere meglio in quale modo pensavi di far "controllare" via WiFi la tua UNO (protocolli? comandi da rete alla UNO? o emessi dalla UNO? o sono informazioni bidirezionali come nel mio caso?), così vediamo se magari qualche parte del mio codice, almeno lato seriale, possa esserti utile.

Innanzitutto ci tenevo a ringraziare per l'aiuto.

Quindi prova ora a descrivere meglio in quale modo pensavi di far "controllare" via WiFi la tua UNO (protocolli? comandi da rete alla UNO? o emessi dalla UNO? o sono informazioni bidirezionali come nel mio caso?)

Allora sostanzialmente vorrei che la uno inviasse e ricevesse comandi dalla rete e che inviasse anche le letture dei sensori che poi vengono visualizzate all'interno della gui della app sullo smartphone (già pronta e funzionante con la d1).

Quindi per prima cosa dovresti definire un tuo seppur minimo protocollo di comunicazione, che implementerai magari su pin diversi da quelli della UART interna (D0 e D1), ossia usando la libreria SoftwareSerial su altri pin.
Non so se tu abbia mai avuto a che fare con protocolli

Purtroppo non conosco l'argomento, se non nelle linee generali teoriche.

Ti ringrazio ancora

Come dicevo, solo tu conosci quali sono i comandi che vorresti poter gestire ossia ricevere dalla rete e le relative risposte, non possiamo darti indicazioni più precise. Posso farti l'esempio del mio protocollo, così forse capisci meglio qualche base, ma poi devi per prima cosa "disegnare" tu il protocollo, iniziando da stabilire come comunicare (TCP? UDP?) e come deve essere fatto un pacchetto (vedi l'esempio che ti ho descritto).

Ti riporto alcune delle note che scrissi per definire il mio protocollo (si, anche se lo progetti tu e lo usi tu, sempre meglio scrivere tutto, altrimenti dopo 2 anni se vuoi fare qualche modifica ti sei scordato tutto...):

(EDIT visto che non risultava leggibile il testo per via dei bbcode, sia come "code" sia come "quote", l'ho tolto da qui e messo come allegato)
IF4.zip (1.5 KB)

Ora tu dovresti fare qualcosa di simile, magari inizia appunto come ti ho detto definendo il carattere di start ('@') e di end ('\n'), quindi quali sono i caratteri che rappresentano tutti i comandi e risposte (nel mio caso ad esempio 'T' riguarda l'orario dell'RTC, 'C' la configurazione, e così via). Fatto questo, puoi iniziare a codificare.

Se la strada che prenderai è questa, fammi sapere se vuoi che ti passi qualcosa dal codice del mio WeMos (il "server") che fa da "ponte" tra WiFi UDP e la seriale di Arduino UNO (il "core"), visto che la logica è praticamente identica a quello che servirebbe a te, a meno del protocollo che per me è differente...

Da una prima lettura, la logica mi è molto più chiara.
Seguo il tuo consiglio e comincio a pianificare uno schema di gestione dei comandi e di protocollo per poi passare a sperimentare praticamente.
Se in corso d'opera mi sorgesse qualche dubbio o problema spero non ti dispiaccia se ti dovessi disturbare ancora con qualche domanda, magari un po stupida.
Ti ringrazio davvero molto per la disponibilità.

Bene, sono contento di esserti stato utile, e non c'è problema se hai domande fai pure!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.