leggere risposta su seriale dell' ESP01 e interpretarne la risposta

Ciao a tutti,

sto avendo qualche noia con l'identificazione della risposta che l'esp01 da quando si collega a ID e psw del mio router.

in pratica a questo comando:

sendData("AT+CWJAP=" + SSIDstring + "," + PASSstring + "\r\n", 6000, true); // Inloggen op de WiFi met wachtwoord.

la sua risposta deve essere OK se si è collegata correttamente ed in base a questa risposta gli sto facendo fare alcune cose con un if

il punto è che non sempre, anche se la risposta è OK mi considera IF vero ad esempio:

if(esp8266.find("OK")) {
 Serial.println("CONNESSO");
 statoconnessione = 1;
 }
 else {
 Serial.println("NON CONNESSO");
 statoconnessione = 0;
 }

anche con la risposta OK dell'esp mi scrive "NON CONNESSO" e la variabile statoconnesione me la lascia a zero...

diciamo che il 50/60% delle volte tutto funziona... dove sto sbagliando?

Perché non usi la libreria WiFiEsp?

SukkoPera:
Perché non usi la libreria WiFiEsp?

ho visto i vari esempi... ma onestamente non mi sono comprensibili.... tu su quale esempio mi indirizzeresti per capire come fare?

grazie

Ma cosa devi fare? Collegarti in rete? Cosa non ti è chiaro degli esempi?

devo fare quello riportato nel primo topic..

cmq al momento mi collego in rete e tutto funziona,anche il controllo da remoto ecc quello che non mi fa a dovere è che anche se la risposta dell'esp risulta essere "OK" con il seguente if non sempre mi risulta vero. e quindi non mi cambia statoconnessione che mi consente di riconnettere arduino al wifi in caso di caduta della connessione... in pratica mi si connette ad internet ma anche con risposta "OK" dell'esp non mi entra in questo if.... e mi restituisce NON CONNESSO e statoconnessione mi rimane su zero.

if(esp8266.find("OK")) {
 Serial.println("CONNESSO");
 statoconnessione = 1;
 }
 else {
 Serial.println("NON CONNESSO");
 statoconnessione = 0;
 }

Sì ma perché devi fare quanto detto nel primo topic?

in pratica mi serve per ritentare la riconnessione a internet in caso di riavvio di arduino

Ok, ma perché non usi WiFiEsp per gestire il modulo wifi invece di fare tutto "a mano"?

non la conoscevo onestamente... il punto che oramai sono alle abattute finali... finito questo punto e collaudato il controllo del sensore pioggia(e parlo in un'altra discussione) ho finito e mi godo il tutto senza volerci più mettere mano... diciamo vedo la luce oltre il tunnel...

sicuro però cercherò di capirci qualcosa... ma a quale esempio di quella libreria posso dare un'occhiata?

nel frattempo come faccio ad essere sicuro che quell'OK venga letto sempre vero se c'è?

grazie

Vabbeh, secondo me è difficile gestire correttamente tutti i messaggi su seriale se non si ha una certa esperienza. Comunque, secondo me il tuo problema è:

if(esp8266.find("OK")) {

dovrebbe essere:

if(esp8266.find("OK") >= 0) {

ok grazie.

modifico il codice come da te consigliato. grazie mille.

se poi riesci a dirmi quale esempio di quella libreria devo vedermi sarebbe TOP!

grazie

Non lo so, io non ho ancora capito di preciso cosa stai facendo, immagino quelli TCP e/o HTTP.

SukkoPera:

if(esp8266.find("OK")) {

dovrebbe essere:

if(esp8266.find("OK") >= 0) {

ma se è la stessa cosa?

Per quanto ne so non e’ la stessa cosa:

if(esp8266.find("OK")) {

e’ uguale a:

if(esp8266.find("OK") !=0) {

Marco

Chiedo scusa, mi son sbagliato
E tanto anche...
Unica scusante: pranzo pesante

Precisamente. La mia supposizione è che la find() ritorni -1 quando non trova, quindi... Vi lascio immaginare il resto.

Confermo, ritorna meno uno se non trova
Ci hai preso...

grazie a tutti per l'aiuto e la spiegazione.... ma vi chiedo... perchè ritorna -1? non dovrebbe essere zero oppure diverso da zero? ma cmq positivo?

Dai....
Zero è il primo elemento
Leelo il quinto....

Standardoil:
Dai....
Zero è il primo elemento
Leelo il quinto....

non ho mica capito..... :slight_smile:

cmq modificando come mi avete detto mi dice che è connesso anche se il wifi è spento.... vi spiego.... ho riavviato arduino con wifi spento e una volta avviato mi entra nell' if modificando statoconnessione a 1.. quindi come se se ci fosse il wifi acceso... cosa non vera...

if(esp8266.find("OK")>=0) {
 
Serial.println("CONNESSO");
 
statoconnessione = 1;
 
}
 
else {
 
   Serial.println("NON CONNESSO");
 
statoconnessione = 0;
 
}
 
}