Ciao a tutti amici!
Sto avendo un problemino e sono 2 giorni che provo a risolvere ma neanche in rete ho trovato una soluzione e per questo mi affido a voi.
Sto realizzando un progetto dove il mio Arduino Mega invia dei dati tramite ESP8266 (quindi wifi) ad un web server per memorizzarli. La connessione che uso è TCP. Purtroppo non sono un grande esperto di protocolli internet e quello che ho realizzato finora lo devo a ricerche internet.
Veniamo al problema:
Tutto funziona bene e riesco a registrare dati anche una volta al secondo (che credo sia un buon risultato o comunque sia per il mio scopo più che sufficiente (da tener presente che nel loop non ci sono delay())
Il problema viene fuori quando la connessione è un po' lenta; infatti può arrivare ad impiegare anche 20 secondi per la registrazione di ogni GET mandata al server ed in questo lasso di tempo Arduino non continua ad eseguire il loop ma mentre è in comunicazione col server non esegue nient'altro (me ne sono accorto perché ho un LCD touch collegato al MEGA e quando la connessione è lenta se premo un pulsante sul touch prima che Arduino reagisca passano quei secondi in cui si sta eseguendo l'invio della GET e la ricezione della risposta e questo è un bel problema!!!).
Quale potrebbe essere una valida soluzione secondo voi?
Facendo ricerche ho letto che la connessione UDP è molto più veloce della TCP ma ha di contro che non esegue il controllo che i dati siano stati ricevuti. Però prima di avventurarmi a cambiare tipo di connessione vorrei chiedere un vostro parere; considerate che devo memorizzare dei dati e qualora si perdano alcuni pacchetti non è un enorme problema ma se la connessione è effettivamente lenta ho paura che vengano persi troppi dati o addirittura tutti rispetto alla TCP o forse sbaglio? :
Voi cosa ne pensate? Potrebbe risolvere il mio problema o peggiorarlo?
La libreria che uso per l'ESP8266 è la seguente: ITEADLIB_Arduino_WeeESP8266-master
Facendo un debug con connessione lenta ho notato che praticamente tutte le funzioni della libreria che uso rallentano il loop. Come vedete dallo sketch queste funzioni sono:
wifi.createTCP
wifi.send
wifi.recv
wifi.releaseTCP
dove all'interno della libreria il wifi. viene sostituito con ESP8266.
Secondo me le soluzioni possono essere almeno 2:
-
cercare di modificare la libreria o addirittura sostituirla se ne conoscete di migliori facendo in modo che le istruzioni vengano eseguite in una sorte di multitasking rispetto al loop ma non saprei assolutamente da dove cominciare! :o
-
cambiare il tipo di connessione da TCP ad UDP.
Se avete altre soluzioni siete i benvenuti! O se anche secondo voi una di queste può essere una buona soluzione ne possiamo discutere insieme.
Grazie a tutti!