Il problema è che ci sono diversi argomenti insieme che lasciano aperte troppe domande:
- comandi AT oppure sketch ad hoc su ESP
- connessione WiFi
- web server
- comunicazione seriale
- design generale dell'applicazione, interazione temporale tra le parti, dati che si devono scambiare (quando / quali / quanti byte)
Già il primo argomento porta a due universi totalmente differenti, per questo la frase «comunicare con il modulo» non ha molto senso se non si contestualizzano per bene anche gli altri punti.
Web server con Arduino e/o ESP non ne ho mai fatti per cui su questo non sono di aiuto, ma per comunicare via seriale (trasmettere e ricevere byte) bastano i comandi della seriale write / read / available. Come usarli però dipende appunto dal design di tutto il resto.
Se devo trasmettere via seriale qualche intero da uno sketch a un altro, devo innanzitutto decidere il formato dati della trasmissione (byte qualsiasi? caratteri ASCII? lunghezza fissa o variabile?), prevedere una forma di sincronizzazione tra gli sketch (timeout? preambolo? bit settati/resettati? sequenze di escape?) a seconda di come è più comodo, e magari aggiungere un controllo errori (checksum? xor? crc? altro?) se penso che la comunicazione possa avere problemi... e con le combinazioni di questi parametri abbiamo già oltre trenta modi diversi (e trenta diverse possibili coppie di routine di trasmissione e ricezione da scrivere) per far passare i nostri byte sulla seriale... solo per parlare del punto 4.
Ora il design generale, SE si sceglie la via dello sketch ad hoc su ESP, potrebbe essere questo:
- Arduino legge i sensori, comanda gli attuatori, e ogni tot secondi trasmette i dati all'ESP (nel formato da scegliere)
- L'ESP si connette in WiFi, fa girare il web server, e fa girare continuamente una funzione di ricezione seriale (speculare alla trasmissione del nano) che aggiorna le variabili usate dal web server per popolare la pagina.
E quindi, cosa deve passare tra i due sketch? Si è detto due interi a 16 bit tra diciamo -20 e 95 di valore, più un byte per indicare lo stato del relé, totale cinque byte di dati.
Se si vanno a vedere le configurazioni dei bit di questi cinque byte scopriamo che:
- I valori nell'intero range 96..235 non dovrebbero mai comparire
- Gli interi hanno il byte più significativo sempre a zero o sempre a 255
Per cui due byte di valore 166 in sequenza possono essere usati con certezza per rappresentare l'inizio trasmissione (preambolo di sincronizzazione).
Questo è quindi uno dei tanti possibili formati realizzabili di pacchetto dati nano→ESP
.-----. .-----. .-----.-----. .-----.-----. .-----.
| 166 | | 166 | | LOW |00/FF| | LOW |00/FF| | 0/1 |
'-----' '-----' '-----'-----' '-----'-----' '-----'
start valore1 valore2 rele`
In ricezione si devono attendere due byte 166 in sequenza, dopo di che si leggono i due byte del primo intero, quelli del secondo, e lo stato del relè (nota: questa semplificazione nel formato dati è possibile per via del ristretto range di valori assunto da 'valore1' e 'valore2' e per il fatto di trasmetterne anche il byte più significativo)