Buongiorno a tutti.
Premetto, come il solito, che la mia conoscenza di elettronica è limitata, ma sono uno sviluppatore informatico, quindi me la cavo meglio con la parte software che hardware.
In ogni caso ho questo problema che mi sta facendo impazzire, e per esperienza so che quando capitano questi problemi solitamente sono cretinate o sviste.
Ho collegato un ARDUNO UNO ad n ESP8266-01.
Usando
SoftwareSerial Esp8266(6, 7);
(...)
Serial.begin(9600);
Esp8266.begin(115200);
ed
do {
//Wait Serial Monitor to start
while (!Serial);
Serial.println("--- Start ---");
Esp8266.println("AT+RST");
delay(1000);
if (Esp8266.find("READY"))
{
Serial.println("Module is ready");
(...)
} else {
Serial.println("Module have no response.");
delay(500);
riesco a eseguire il codice sul mio Arduino, ma lo stesso dice "Module have no response".
Mi sono accorto che se apro il Serial Monitor alla frequenza 115200 baud, i comand AT non funzionano. Tuttavia, se io faccio un ponte tra GND e RST (quindi metto il modulo ESP8266 in modalità flash) comunico tranquillamente con il serial monitor e il modulo esp mi risponde correttamente.
MA, finchè è il modalità flash, arduino non funziona. Quindi mi trovo i comandi AT che, via software vendono inviati da arduino ad esp8266, non funzionano mai: se è in modalità flash, arduino non funziona. Se tolgo la modalità flash, smette di rispondere esp8266.
Secondo voi , cosa sto sbagliando?
Aggiornamento: ho provato anche a settare nell'esp8266 la frequenza a 9600, ma non ha risolto il problema. Ora l'ho riportato a 115200.
la softwareserial mi pare che non funzioni benissimo a 115200
ha provato a collegare direttamente l'esp ai pin 0 e 1 di arduino e aprire il monitor seriale (questa volta a 115200) non in modalità flash e inviare comandi AT?
seconda prova collega direttamente via usb (via ftdi) al pc e con termite o PuTTY anche qui inviare comandi AT
in entrambi i casi se la comunicazione riesce ti conviene settare la velocità di comunicazione a 9600
con il comando AT
AT+UART_DEF=9600,8,1,0,0
in effetti con la softwareserial potresti anche usare i 19200...
AT+UART_DEF=19200,8,1,0,0
Ciao, grazie per la tua risposta.
Purtroppo ho provato a portare tutto a 9600 ma non ha funzionato lo stesso. L'ho portata a 19200 ma nessun successo, sempre MODULE HAVE NO RESPONSE.
L'ESP è collegato direttamente ai PIN TX-RX (sono quelli 0 e 1 sulla mia board).
Non so come effettuare il collegamento via FTDI.
Se collegato ad arduino senza flash mode, non risponde su nessuna delle frequenze.
non ho afferrato bene:
L'ESP è collegato direttamente ai PIN TX-RX (sono quelli 0 e 1 sulla mia board).
durante l'esecuzione del programma l'esp l'hai collegato ai pin 6 e 7
SoftwareSerial Esp8266(6, 7);
e più precisamente
arduino pin 6 (RX) con esp pin TX
arduino pin 7 (TX) con esp pin RX
vero?
poi ancora una cosa, il comando AT+RST non restituisce "READY" ma "OK"
prova a dare un'occhiata a questa guida
Si è collegato a 6 e 7 (sulla board c'è scritto TX 1 e RX 0), mi sono espresso malissimo rileggendo quello che ho scritto. Si è vero, restituisce ok... provo a leggere la guida, grazie intanto!
Anche nella guida però restituisce OK, mai READY....
e allora perchè tu controlli che ti risponda ready
if (Esp8266.find("READY"))
READY lo da dopo aver lanciato il comando AT+RST. In ogni caso provando sia READY che OK non va lo stesso. Nel momento in cui tolgo arduino dallo stato reset, ESP8266 smette di essere raggiungibile.
Nuovo aggiornamento: con uno script completamente vuoto riesco a scrivere i comandi nel serial monitor e inviarli al modulo esp senza reset. Se scrivo AT lui mi restituisce OK. Se però uso la serial per far inviare il comando AT da arduino ad ESP, allora ESP non risponde...
Sono abbastanza convinto che problemi del genere abbiamo una cretinata alle spalle che non vedo...
PS. Ci sono collegati anche un relays, un sensore DHT11 e un sensore HC-SR04. Potrebbero in qualche modo creare conflitto (senza che smonto tutto per provare, se già lo sapete è meglio ^^)?
prova con "Ready" solo la R maiuscola...
Ci sono motivi particolari per cui non puoi usare la libreria WiFiEsp?
Non conosco quella libreria... ora do un occhio... cmq il codice è questo...
Ma ripeto: l'impressione è che Arduino non invii niente a ESP (entrambi su 9600)
Esp8266.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");
if (Esp8266.find("OK")) {
Serial.println("TCP connection ready");
}
delay(1000);
http_request = "POST ";
http_request += pier;
http_request += " HTTP/1.1\r\n";
http_request += "Cache-Control: no-cache\r\n";
http_request += packet_to_send;
http_request += "Content-Type:multipart/form-data\r\n";
http_request += "Content-Length:";
http_request += http_request.length();
http_request += "\r\n";
String cmd_send = "AT+CIPSEND=";
cmd_send += http_request.length();
Esp8266.println(http_request);
delay(1000);
clearEsp8266SerialBuffer();
SukkoPera ho provato quello che mi hai detto, ma la risposta è la seguente:
[WiFiEsp] Initializing ESP module
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] Cannot initialize ESP module
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] No tag found
WiFi shield not present
Boh, prova a seguire la guida nella mia firma. Secondo me sbagli i collegamenti.
Grazie, l'ho letta è stata molto istruttiva. Ad un certo punto tu scrivi:
Segnali: l’ESP ed Arduino vengono collegati tramite una porta seriale. Quella dei modelli più comuni di Arduino (Uno, Nano, Leonardo, Micro e Mega) lavora a 5V, mentre quella dell’ESP a 3.3, dunque non è possibile collegarli direttamente. In questo caso la soluzione ideale è quella di usare un level shifter, componente esterno dal costo estremamente accessibile:
Io l'ESP l'ho collegato da RX-TX del Esp ai pin digitali 6 e 7 della board Arduino. Non ho messo quei "level shifter". Pensi che sia per questo che Arduino e Esp non comunicano?
Possibile, ma non credo. Certo non è bello e dovresti rimediare quanto prima, ma la comunicazione dovrebbe esserci.
Assicurati di settare la seriale del modulo a 9600 (Post #1 di Patrick).
Però non mi torna quanto dici al post #8: se ESP è collegato ai pin 6/7, la cosa dello scrivere nel terminale con uno sketch vuoto non può funzionare...