Ciao a tutti, sto uscendo pazzo con un problema banale.
La situazione è questa: ESP8266 collegato ad arduino tramite SoftwareSerial.
Arduino dovrebbe interrogare una pagina PHP in un server ma...
Finche si tratta di ricevere pochi byte con il modulo ESP8266 non ci sono problemi, ma quando ne ricevo una manciata in più (intendo da 20/30 bytes a 200bytes) tra ESP8266 e seriale succede il finimondo.
Tralasciando il fatto che il codice è scritto con i piedi (ma mi serve solo per testare questa cosa), voi vedete qualcosa di strano?
Questo è lo sketch
#include <SoftwareSerial.h>
SoftwareSerial eb(5, 6);
void setup()
{
Serial.begin(4800);
while (!Serial);
Serial.println("Start");
eb.begin(4800);
eb.write("AT+RST\r\n");
delay(1000);
a();
eb.write("ATE1\r\n");
delay(1000);
a();
eb.write("AT+CIPMODE=0\r\n");
delay(1000);
a();
eb.write("AT+CWMODE=1\r\n");
delay(1000);
a();
eb.write("AT+CIPMUX=1\r\n");
delay(1000);
a();
eb.write("AT+CWJAP=\"myAP\",\"myPassword\"\r\n");
delay(10000);
a();
eb.write("AT+CIPSERVER=1,1745\r\n");
delay(1000);
a();
eb.write("AT+CIPSTART=0,\"UDP\",\"0.0.0.0\",2512,2512,2\r\n");
delay(1000);
a();
String cmd;
String cmd1;
eb.write("AT+CIPSTART=1,\"TCP\",\"192.168.0.1\",80\r\n");
delay(1000);
a();
cmd = "GET /p.php?marca=fiat&modello=panda HTTP/1.0\r\n";
cmd1 ="Host: 192.168.0.1\r\n\r\n";
eb.write("AT+CIPSEND=1,");
eb.print(String(cmd.length()));
eb.write("\r\n");
delay(1000);
a();
eb.print(cmd);
delay(1000);
a();
eb.write("AT+CIPSEND=1,");
eb.print(String(cmd1.length()));
eb.print("\r\n");
delay(1000);
a();
eb.print(cmd1);
delay(1000);
a();
eb.println("fine");
}
void loop()
{
//while(eb.available()) Serial.print((char)eb.read());
}
void a(void)
{
while(!eb.available());
while(eb.available()) Serial.print((char)eb.read());
}
Questo è quello che riceve arduino sulla softwareserial:
Start
AT+RST
OK
WIFI DISCONNECT
a`⸮!⸮aF⸮⸮B9⸮%⸮4⸮⸮⸮⸮⸮
Ai-ThiATE1
OK
AT+CIPMODE=0
OK
AT+CWMODE=1
OK
WIFI CONNECTED
AT+CIPMUX=1
OK
WIFI GOT IP
AT+CWJAP="myAP","myPassword"
WIFI DISCONNECTAT+CIPSERVER=1,1745
OK
AT+CIPSTART=0,"UDP","0.0.0.0",2512,2512,2
0,CONNECT
OK
AT+CIPSTART=1,"TCP","192.168.0.1",80
1,CONNECT
OK
AT+CIPSEND=1,46
OK
>
Recv 46 bytes
SEND OK
AT+CIPSEND=1,21
OK
>
Recv 21 bytes
SEND OK
+IPD,1,202:HTTP/1.1 200 OK
Date: <==== QUI IL PACCHETTO VIENE TRONCATO
e questo è quello che in realtà riceve il modulo ESP (cioè tutto quello che deve ricevere)
AT+RST
OK
WIFI DISCONNECT
{�'�N�^b��
Ai-Thinker Technology Co. Ltd.
invalid
ATE1
OK
AT+CIPMODE=0
OK
AT+CWMODE=1
OK
WIFI CONNECTED
AT+CIPMUX=1
OK
WIFI GOT IP
AT+CWJAP="myAP","myPassword"
WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP
OK
AT+CIPSERVER=1,1745
OK
AT+CIPSTART=0,"UDP","0.0.0.0",2512,2512,2
0,CONNECT
OK
AT+CIPSTART=1,"TCP","192.168.0.1",80
1,CONNECT
OK
AT+CIPSEND=1,46
OK
>
Recv 46 bytes
SEND OK
AT+CIPSEND=1,21
OK
>
Recv 21 bytes
SEND OK
+IPD,1,202:HTTP/1.1 200 OK
Date: Wed, 18 Oct 2017 18:49:57 GMT
Server: Apache/2.4.25 (Raspbian)
Content-Length: 33
Connection: close
Content-Type: text/html; charset=UTF-8
Hai scelto una fiat modello panda1,CLOSED
fine
ERROR
Come potete vedere, sniffando quello che viene ricevuto e trasmesso ad arduino dal modulo esp8266 si vede bene che la risposta dal server web arriva completa, mentre su arduino solo pochi byte.
Ho fatto un sacco di prove (tra cui alzare ed abbassare il baudrate tra esp ed arduino) ma non riesco a venirne fuori
Qualche consiglio?
Grazie.
Stefano