Funziona tutto ma... instabilità esp

Ciao a tutti , è da tanto che non scrivo … torno ad approfittare della vostra preparazione … :stuck_out_tongue: dopo quasi 8 mesi dal primo contatto con il mondo di arduino sono riuscito a realizzare quello che avevo in mente… ovvero realizzare un “telecomando IR” remoto , ovvero via wifi.

Utilizzo : Arduino Uno, lettore scheda SD(nella quale sono presenti file txt con i raw dei dispositivi da comandare), esp8266-01 per quanto riguarda il modulo wifi.

Funzionamento: chiamo da cellulare/browser questa pagina"192.168.1.218/00120000000000*" (l’ip del modulo esp /il comando che voglio passare ad arduino e l’asterisco finale per indicare la fine del comando), una volta ricevuta la richiesta esp stampa su browser “comando ricevuto” e stampa su seriale il comando ricevuto.

Sono riuscito a far funzionare tutto(con non poca soddisfazione :P, e con tanto vostro aiuto ) . Tuttavia c’è un problema di stabilità legato al modulo wifi (penso). Quello che succede è che il modulo sembra non ricevere più la richiesta dopo un periodo di tempo che può andare da pochi minuti fino a diverse ore.

qualcuno può aiutarmi? Grazie mille :slight_smile:

/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 */

#include <ESP8266WiFi.h>

const char* ssid = "Alice-46265102";
const char* password = "matriosca1234";


// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {

  delay(10);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);

  }

  server.begin();
  Serial.begin(9600);
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data

  while(!client.available()){
    delay(100);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('*');

  
  req.remove(0, 5); // Remove six characters starting at index=2
  
  Serial.println(req);
  req = "";
  client.flush();

  // Prepare the response
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.print("COMANDO RICEVUTO");           
          client.println("</html>");
  delay(500);
  client.stop();
  //Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

a volte me lo fa anche a me specialmente inviando comandi da android.
Una volta che esp ha fatto il suo lavoro, fai resettare il tutto abilitando il watchdog, dopo il riavvio funzionerà senza problemi

Dunque secondo questa filosofia, ogni volta che apro il frigo è meglio che stacchi e riattacchi la spina, almeno sono sicuro che riparte? :confused:

se sai come risolvere questo problema fatti avanti no??? Ogni tanto, capita anche a me questo problema, gli invio i comandi, lui fa quello che deve fare e tutto ok.in AP mode quando vado a ricollegarmici, vede la rete ma non mi assegna l'ip al cel. Mi capita 1 su 10 e solo da android?

se hai la soluzione....cortesemente illuminami

Senza vedere il tuo sketch non posso sapere qual è il problema. Quel che è certo è che è un problema del vostro software o del vostro hardware, a me non è mai capitato. Una prima cosa che mi fa storcere un po’ il naso in quel che vedo sopra è l’uso della String (peraltro in un caso in cui farne a meno sarebbe banale), anche se l’ESP ha molta più RAM di Arduino, per cui non dovrebbe essere un problema.

Quel che è proprio sbagliato, a mio avviso, è questa “filosofia del reset facile” che sembra imperante, ma che a me sembra semplicemente assurda. Probabilmente dobbiamo ringraziare Microsoft per questo, ma provate ad immaginarla applicata a qualunque ambito che non sia il software e ditemi se vi sembra così sensata.

OK, inanzitutto grazie :slight_smile: ..
Gironico, io volevo inserire un reset ogni 30 minuti oppure ogni ora, anche perchè seppur la disconnessione avviene random cmq in media si blocca almeno dopo 12 ore, (so che il riavvio non risolve il problema ma lo aggira.. ma comunque per la mia applicazione va piu che bene, anche perchè meglio avere dei temporanei down del server che impossibilità di utilizzo) .
Tu con il watch dog hai risolto? potresti postarmi una porzione di codice per inserirlo perfavore?

SukkoPera : il codice che ho utilizzato è un'esempio preso da internet un pò modificato da me,, hai qualche alternativa al codice che ho utilizzato io?

Quel che cambierei io l'ho già scritto sopra.

Ciao Raffy, Sukko intende dire che il watchdog è un'emergenza che non dovrebbe mai capitare ed il reboot non deve essere utilizzato in un programma. Utilizzandolo "nascondi" problemi e potrebbero riproporsi come il peperone a cena :smiley: :smiley:
Per fare un lavoro ben fatto dovresti capire il motivo del blocco(es. alimentazione non corretta, come alimenti l'ESP ?) magari creando un file di log su SD.

Ciao Cam,

Alimento tramite Arduino Uno con un condensatore da 100uf sui piedini di alimentazione del modulo wifi, avevo provato anche con lm1117 ma era uguale.

Ho provato a spegnere e riaccendere soltanto il router ,ma il modulo si riconnette e funziona tutto.

ho provato a resettare soltanto arduino mantenendo alimentato il modulo quando risultava bloccato, ma anche in questo caso nulla di fatto(quindi non penso sia un problema dello sketch su arduino).

L'unica cosa strana è che mi sembra di vedere il led blu accendersi anche quando risulta "bloaccato" quando faccio la "richiesta" ... quindi sicuramente ha ragione Sukko,, magari c'è un blocco a causa delle stringhe .. ma come dovrei modificare il codice? utilizzare "int req=" anzichè "string req="?