ESP32 GSM SIM800l Strano bug non mi legge la risposta del client..

Ciao ragazzi !

E’ la prima volta che scrivo qui!! Di solito mi basta “guardarvi” e già ho risolto…
Ma questa volta non capisco cosa succeda.
Sto costruendo un sistema IOT un pò complesso nell’insieme e ho riservato la funzione di trasmissione dei dati ad un modulo ESP32 SIM800l tipo i TTGO che va molto bene, mi sembra, nel complesso.
In pratica questo modulo appena acceso si mette in modalita ascolto e quando riceve via Seriale una stringa la registra in un file .txt nella memoria FLASH SPIFFS e la trasmette via GSM.
In più c’è la possibilità via bluetooth di scaricare il file e fare altre operazioni.
Una sorta di scatola nera che registra tutto anche se non può connettersi.
Il mio problema è che appena modifico il file di esempio di trasmissione GSM (che funziona perfettamente…) con le funzioni seriali e Bluetooth succede qualcosa che non capisco. Il SIM800 si connette all’apn e server ma apparentemente senza messaggi di errore non riesce a fare la chiamata get, e non mi da la risposta dal server. Però quando gli dai una stringa sbagliata ti visualizza la risposta del server bad request E400 ecc.
Ho provato di tutto. L’ultima versione sono arrivato a mettere le funzioni Seriale, bluetooth e SPIFFS in un WHILE nel setup che se riceve una stringa resetta il tutto e si riaccende solo con la funzione GSM ma nulla.
Cosa potrebbe essere?!
Se utilizzo lo stesso schetch con tutte le seriali attive, BT e SPIFFS con BEGIN ma NON gli faccio “ascoltare” le seriali funziona.
Il codice è lunghino effettivamente… grazie per chiunque mi possa aiutare o dare un’idea su come risolvere!!
Ho il sospetto che sia una “cavolata”… ma è un mese che faccio prove ma nulla.

seriale_gsm_reboot_vs_pref_mod2.ino (9.25 KB)

Buongiorno e benvenuto, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Ops scusate. Sono Matteo 44 anni, elettro strumentista professionista, diplomato in elettronica e appassionato di audio e programmazione. Ho lavorato per 20 anni come elettricista, strumentista e riparatore. Il mio "hobby" è la musica e suono diversi strumenti. Arduino è stato un regalo di una cara amica che aveva intuito quanto mi sarebbe piaciuto. Ora sto costruendo un sacco di cose con il 328p e ho esplorato le sue capacità in lungo e in largo. Ora sto provando un "upgrade" programmando le samd21 e esp32 ma mi rendo conto dei miei enormi limiti.
Per esempio sono sicuro che il mio problema di questo post sia probabilmente una cavolata (sperooo!!) ma è qualche settimana che mi scervello e non capisco cosa non vada..
Grazie siete fantastici!!

Vado a naso perché NON hai dato né le specifiche dell'hardware su cui il programma deve girare (... ma visto che parli di 328P immagino Arduino UNO) né i link alle varie librerie ...

Il ATmega328P ha UNA sola seriale fisica che è quella che usi con le Serial.print(), tutte le altre seriali immagino (non avendo i link alle librerie) che siano state create con la SoftwareSerial la quale però, se si studia il suo reference, ha un grosso limite ... può trasmettere su più seriali virtuali, ma ricevere da SOLO UNA per volta ed occorre selezionare a mano, con il metodo listen(), quale porta è selezionata per ricevere.

Guarda l' esempio che trovi nel reference di nome "Two Port Receive".

Guglielmo

Grazie mille Guglielmo, pensavo si capisse che sto usando una esp32 con un modulo SIM800l , ma comunque anche questo consiglio, che non sapevo, me lo ricorderò .. Potrebbe essere lo stesso sulla esp32. Ho provato a modificare lo scketch con streamdebug per vedere ciò che succede ma continua a fare cose strane.. che appena posso posto.. ma in pratica ripete diverse volte i comandi AT come se non li prendesse senza dare errori di connessione. Ripeto se uso lo schetch di esempio tutto ok sul mio db e anche la risposta da server.. con la mia modifica leggo la risposta del server solo se c'è un errore nella stringa di update.. che quindi mi da errore 400. Mentre se scrivo la stringa giusta non mi stampa la risposta e nemmeno mi aggiorna il db.. Non è strano?!?
In questi giorni ho pensato ad un'altra modifica al programma ma non stravolgerebbe il tutto.. Effettivamente però potrebbe essere un problema tipo quello che descrivi tu nel 328p...
Mo stasera mi vado a studiare questo listen() e vi posto i messaggi del mio programma.
Grazie e buona giornata!!

Non ho idea se l'implementazione su ESP32 richieda, come sugli AVR, la chiamata al metodo listen() ... ma non credo. Leggo che la versione per ESP32 è derivata dalla versione per ESP8266 la quale dice:

The same functionality is given as the corresponding AVR library but several instances can be active at the same time.

... quindi sembrebbe che più istanze possono essere contemporaneamente attive.

Ripeto ... occorre verificare, io NON l'ho usata su ESP.

Guglielmo

Ecco cosa mi scrive senza il streamdebugger con una stringa sbagliata:

Il dispositivo è pronto per il bluetooth!
Comandi:
L leggi lista.
S cancella lista e resetta.
R resetta.
Stringa che ho letto: stsfhf

Appending to file: /bee.txt
Message appended
Spedisco stringa:
stsfhf

IP5306 KeepOn OK
Initializing modem...
Signal quality: 26
Stringa posizione: 
Connecting to APN: iot.1nce.net OK
Connecting to update.beeethicfamily.com OK
Performing HTTP POST request...
Heventuale:
TTP/1.1 400 Bad Request
Server: nginx
Date: Wed, 02 Dec 2020 14:15:14 GMT
Content-Type: text/html
Content-Length: 150
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

Server disconnected
GPRS disconnected
Guru Meditation Error: Core  1 panic'ed (InstrFetchProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x00000000  PS      : 0x00060f30  A0      : 0x800d6f50  A1      : 0x3ffc9610  
A2      : 0x00000000  A3      : 0x3ffc4f60  A4      : 0x3ffc6350  A5      : 0x0000270f  
A6      : 0x00000048  A7      : 0x3ffba264  A8      : 0x800d2fe0  A9      : 0x3ffc95f0  
A10     : 0x00800000  A11     : 0x00000000  A12     : 0x00000000  A13     : 0x3f401b60  
A14     : 0x3f401b58  A15     : 0x00000001  SAR     : 0x00000009  EXCCAUSE: 0x00000014  
EXCVADDR: 0x00000000  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x00000000  

Backtrace: 0x00000000:0x3ffc9610 0x400d6f4d:0x3ffc9680 0x4008e84d:0x3ffc96a0

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac
Il dispositivo è pronto per il bluetooth!
Comandi:
L leggi lista.
S cancella lista e resetta.
R resetta.

Come potete vedere mi risponde il server correttamente.

Ora con una stringa giusta:

Il dispositivo è pronto per il bluetooth!
Comandi:
L leggi lista.
S cancella lista e resetta.
R resetta.
Stringa che ho letto: /?id_centralina=4&id_arnia=91&id_colonia=13&t_aria=245&t_covata=234&frequenza=456

Appending to file: /bee.txt
Message appended
Spedisco stringa:
/?id_centralina=4&id_arnia=91&id_colonia=13&t_aria=245&t_covata=234&frequenza=456

IP5306 KeepOn OK
Initializing modem...
Signal quality: 25
Stringa posizione: 
Connecting to APN: iot.1nce.net OK
Connecting to update.beeethicfamily.com OK
Performing HTTP POST request...
eventuale:

Server disconnected
GPRS disconnected
Guru Meditation Error: Core  1 panic'ed (InstrFetchProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x00000000  PS      : 0x00060f30  A0      : 0x800d6f50  A1      : 0x3ffc9610  
A2      : 0x00000000  A3      : 0x3ffc4f60  A4      : 0x3ffc6350  A5      : 0x0000270f  
A6      : 0x3f4017a1  A7      : 0x3ffba264  A8      : 0x800d2fe0  A9      : 0x3ffc95f0  
A10     : 0x00800000  A11     : 0x00000000  A12     : 0x00000000  A13     : 0x3f401b60  
A14     : 0x3f401b58  A15     : 0x00000001  SAR     : 0x00000009  EXCCAUSE: 0x00000014  
EXCVADDR: 0x00000000  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x00000000  

Backtrace: 0x00000000:0x3ffc9610 0x400d6f4d:0x3ffc9680 0x4008e84d:0x3ffc96a0

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac

Qua scrive che è un metodo POST ma è GET.

Grazie.

Ciao Guglielmo,

Non so se si capisce cosa vorrei fare… mi sembrava semplicissimo in realtà!
Per altro mi sembra molto interessante per tutti e condivido volentieri questo mio quasi funzionante schetch che mi ha creato non pochi grattacapi… come far funzionare la memoria interna SPIFFS la quale necessita di creare una cartella DATA nella cartella dello schetch… vabbè devo leggere meglio i post…
Comunque ci sono rimasto male quando ho visto che funzionava tutto ma non si aggiornava il db e mi non visualizzava la risposta senza darmi errori di connessione.
In pratica dovrei fare un datalogger che immagazzina dei dai da seriale sulla memoria interna dell’esp32 (fatto) e
dopo spedire via HTTP , utilizzando la sim800l, ogni riga di seriale che arriva seguita da carattere /n ognii 20 minuti…
Adesso posto quello che succede quando, attivando la libreria streamdebugger (si vede decommentata nel mio schetch sopra…) la quale mi mostra anche i messaggi AT.

Il dispositivo è pronto per il bluetooth!
Comandi:
L leggi lista.
S cancella lista e resetta.
R resetta.
Stringa che ho letto: /?id_centralina=4&id_arnia=91&id_colonia=13&t_aria=245&t_covata=234&frequenza=456 

Appending to file: /bee.txt
Message appended
Spedisco stringa:
/?id_centralina=4&id_arnia=91&id_colonia=13&t_aria=245&t_covata=234&frequenza=456 

IP5306 KeepOn OK
Initializing modem...
AT
AT
⸮AT

OK
ATE0

OK
AT+CMEE=0

OK
AT+CLTS=1

OK
AT+CBATCHK=1

OK
AT+CPIN?

ERROR
AT+CPIN?

ERROR
AT+CPIN?

+CPIN: READY

OK
AT+CPIN?

+CPIN: READY

OK
AT+CPIN="791400"

ERROR
AT+CSQ

+CSQ: 0,0

OK
AT+CSQ

+CSQ: 25,0

OK
AT+CLBS=1,1

+CLBS: 3

OK
Signal quality: 25
Stringa posizione: 
Connecting to APN: iot.1nce.netAT+CIPSHUT

SHUT OK
AT+CGATT=0

OK
AT+SAPBR=3,1,"Contype","GPRS"

OK
AT+SAPBR=3,1,"APN","iot.1nce.net"

OK
AT+CGDCONT=1,"IP","iot.1nce.net"

OK
AT+CGACT=1,1

*PSUTTZ: 2020,12,2,17,29,13,"+4",0

DST: 0

+CIEV: 10,"22288","WINDTRE","WINDTRE", 0, 0

+CTZV: +4,0

*PSUTTZ: 2020,12,2,17,29,18,"+4",0

DST: 0

+CIEV: 10,"22288","WINDTRE","WINDTRE", 0, 0

OK
AT+SAPBR=1,1

OK
AT+SAPBR=2,1

+SAPBR: 1,1,"100.77.92.1"

OK
AT+CGATT=1

OK
AT+CIPMUX=1

OK
AT+CIPQSEND=1

OK
AT+CIPRXGET=1

OK
AT+CSTT="iot.1nce.net","",""

OK
AT+CIICR

OK
AT+CIFSR;E0

100.77.92.1

OK
AT+CDNSCFG="8.8.8.8","8.8.4.4"

OK
 OK
Connecting to update.beeethicfamily.comAT+CIPCLOSE=0,1

ERROR
AT+CIPSSL=0

OK
AT+CIPSTART=0,"TCP","update.beeethicfamily.com",80

OK

0, CONNECT OK
 OK
Performing HTTP POST request...
AT+CIPSEND=0,98

>GET /?id_centralina=4&id_arnia=91&id_colonia=13&t_aria=245&t_covata=234&frequenza=456 
 HTTP/1.1

DATA ACCEPT:0,98
AT+CIPSEND=0,33

>Host: update.beeethicfamily.com

DATA ACCEPT:0,33
AT+CIPSEND=0,21

>Connection: close


DATA ACCEPT:0,21
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK
eventuale:

AT+CIPCLOSE=0,1

0, CLOSE OK
Server disconnected
AT+CIPSHUT

SHUT OK
AT+CGATT=0

+SAPBR 1: DEACT

OK
GPRS disconnected

Questa è la risposta quando da seriale arriva un comando giusto.
E di seguito quella quando la risosta è sbagliata:

Il dispositivo è pronto per il bluetooth!
Comandi:
L leggi lista.
S cancella lista e resetta.
R resetta.
Stringa che ho letto: zghsgfhsfgd

Appending to file: /bee.txt
Message appended
Spedisco stringa:
zghsgfhsfgd

IP5306 KeepOn OK
Initializing modem...
AT
AT
⸮AT

OK
ATE0

OK
AT+CMEE=0

OK
AT+CLTS=1

OK
AT+CBATCHK=1

OK
AT+CPIN?

ERROR
AT+CPIN?

ERROR
AT+CPIN?

+CPIN: READY

OK
AT+CPIN?

+CPIN: READY

OK
AT+CPIN="791400"

ERROR
AT+CSQ

+CSQ: 0,0

OK
AT+CSQ

+CSQ: 25,0

OK
AT+CLBS=1,1

+CLBS: 3

OK
Signal quality: 25
Stringa posizione: 
Connecting to APN: iot.1nce.netAT+CIPSHUT

SHUT OK
AT+CGATT=0

OK
AT+SAPBR=3,1,"Contype","GPRS"

OK
AT+SAPBR=3,1,"APN","iot.1nce.net"

OK
AT+CGDCONT=1,"IP","iot.1nce.net"

OK
AT+CGACT=1,1

*PSUTTZ: 2020,12,2,17,31,49,"+4",0

DST: 0

+CIEV: 10,"22288","WINDTRE","WINDTRE", 0, 0

+CTZV: +4,0

*PSUTTZ: 2020,12,2,17,31,54,"+4",0

DST: 0

+CIEV: 10,"22288","WINDTRE","WINDTRE", 0, 0

OK
AT+SAPBR=1,1

OK
AT+SAPBR=2,1

+SAPBR: 1,1,"100.77.92.1"

OK
AT+CGATT=1

OK
AT+CIPMUX=1

OK
AT+CIPQSEND=1

OK
AT+CIPRXGET=1

OK
AT+CSTT="iot.1nce.net","",""

OK
AT+CIICR

OK
AT+CIFSR;E0

100.77.92.1

OK
AT+CDNSCFG="8.8.8.8","8.8.4.4"

OK
 OK
Connecting to update.beeethicfamily.comAT+CIPCLOSE=0,1

ERROR
AT+CIPSSL=0

OK
AT+CIPSTART=0,"TCP","update.beeethicfamily.com",80

OK

0, CONNECT OK
 OK
Performing HTTP POST request...
AT+CIPSEND=0,27

>GET zghsgfhsfgd
 HTTP/1.1

DATA ACCEPT:0,27
AT+CIPSEND=0,33

>Host: update.beeethicfamily.com

DATA ACCEPT:0,33
AT+CIPSEND=0,21

>Connection: close


DATA ACCEPT:0,21
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","CONNECTED"

OK

+CIPRXGET: 1,0
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,295

OK
AT+CIPRXGET=2,0,295

+CIPRXGET: 2,0,295,0
HTTP/1.1 400 Bad Request
Server: nginx
Date: Wed, 02 Dec 2020 17:31:59 GMT
Content-Type: text/html
Content-Length: 150
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","REMOTE CLOSING"

OK
AT+CIPRXGET=4,0

+CIPRXGET: 4,0,0

OK
AT+CIPSTATUS=0

+CIPSTATUS: 0,0,"TCP","35.214.138.36","80","REMOTE CLOSING"

OK
Heventuale:
TTP/1.1 400 Bad Request
Server: nginx
Date: Wed, 02 Dec 2020 17:31:59 GMT
Content-Type: text/html
Content-Length: 150
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

AT+CIPCLOSE=0,1

0, CLOSE OK
Server disconnected
AT+CIPSHUT

SHUT OK
AT+CGATT=0

+SAPBR 1: DEACT

OK
GPRS disconnected