Problemi con nodemcu v.3

Buongiorno a tutti, mi chiamo massimo, neofita nel mondo dei microcontrollori.
Un po di tempo fa acquistai arduino e feci le prime prove, poi girovagando per internet sono imbattuto in questo nodemcu.
Leggendo qua e la e con qualche nozione di programmazione ho tirato giu questo sketch, un semplice accendi e spegni led da remoto,
scusate la moltitudine di serial.print, mi son serviti per debug e visione della rete e mi piace vederli ordinati ^_^.
Allegato lo sketch , e specificando che le prime istruzioni nel loop erano per cercare di ovviare al problema che da giorni non riesco a venirne a capo.
Allora il nodemcu va bene per un po poi cessa di funzionare, ho provato a lasciarlo attaccato a un pc con il monitor seriale attivo , ma non da nessuna istruzione , cessa di essere raggiungibile e basta, se poi lo stacco dalla presa micro usb e lo riattacco ad un’altra si riattiva.
Qualcuno può gentilmente aiutarmi ?
Vi ringrazio in anticipo , e mi scuso se in qualche modo non ho rispettato le regole del forum.

wifialavoro2.ino (4.4 KB)

Prova con queste modifiche:
nell’if metti maggiore-uguale

  if (millis() >= 120000) {

porta fuori la definizione, in modo che sia globale

String s = "";

a fine setup metti

  // Pagina html webserver
  s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
  s += "<head>";
  s += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
  s += "<script src=\"https://code.jquery.com/jquery-2.1.3.min.js\"></script>";
  s += "<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css\">";
  s += "</head>";
  s += "<div class=\"container\">";
  s += "<h1>Controllo Luci</h1>";
  s += "<div class=\"row\">";
  s += "<div class=\"col-md-2\"><input class=\"btn btn-block btn-lg btn-primary\" type=\"button\" value=\"On\" onclick=\"on()\"></div>";
  s += "<div class=\"col-md-2\"><input class=\"btn btn-block btn-lg btn-success\" type=\"button\" value=\"Off\" onclick=\"off()\"></div>";
  s += "</div></div>";
  s += "<script>function on() {$.get(\"/on\");}</script>";
  s += "<script>function off() {$.get(\"/off\");}</script>";

così la inizializzi e definisci una sola volta.

Aggiungi un serial.print in modo da vedere se non rimane bloccato nel ciclo while

  Serial.println("Nuovo client connesso");
  while (!client.available()) {
    delay(10);
    Serial.print(".");
  }

Qui rischi di saturare la memoria creando istanze su istanze. (ma non ne sono sicuro)

  // Controlla se un client si e connesso
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

intanto grazie mille , quindi mi consigli di eliminare del tutto il controllo client ? Proverò intanto le altre modifiche, grazie ancora, sono giorni che ci sbatto la testa.

No. Ma di solito si procede al contrario.... se c'è un client connesso faccio qualcosa...
Tu invece se non c'è il client esci dalla funzione, poi torni nello stesso punto e apri una nuova istanza.
Quello che non ricordo è se uscendo dalla funzione l'istanza viene liberata perché locale.

Come scritto all'inizio e da poco che mi cimento con questi microprocessori e di programmazione sono alle basi.
In quel poco che so ho provato a mettere a fine sketch un client.stop() , cosi da chiudere la connessione al client, mentre ad ogni invio istruzione dal client al server ho messo un client.flush per liberare la memoria, essendo niubbo però non so se almeno per l'aspetto della saturazione di memoria ho risolto, fatto sta che ancora, dopo un po , il server non è più raggiungibile e se non erro devo riverificarlo pingandolo lo vede.

Allora per chi dovesse incappare nello stesso mio problema , anche se ne dubito, vista la mia niubbaggine.
Ho risolto , mettendo un client.flush() prima del client.stop() erroneamente pensavo che il client.stop mi liberasse anche la memoria , ma cosi non è. E in aggiunta , anche se non era indispensabile , visto che il nodemcu andava bene , dopo l’if (!client). Avendo paura che anche questo mi saturasse la memoria.
Grazie ancora a PaoloP che mi aiutato a venirne a capo.

:slight_smile: