Watchdog esterno preassemblato a 5 euro

Vorrei conferire una certa "affidabilità" a un mio progetto IoT, cioè voglio essere sicuro che il mio circuito ESP8266-based non si impalli in momenti casuali come è solito fare... così pensavo di costruire un watchdog esterno; ho visto che ci sono in giro molti schemi su come costruirselo... poi ho scoperto che, complici i bitcoin, sono stati inventati dei "watchdog USB per PC", che riavviano un PC nel caso il superlavoro da mining di bitcoin li mandi in palla...
Costano la "bellezza" di 5 euro, già assemblati!

Ovviamente per Arduino/ESP la porta USB non mi serve a niente... ma secondo voi si riesce a capire su quale pin del circuito bisogna attaccare il "pin-spia" di arduino per tenere sveglio il watchdog? (ammesso che sia possibile)
https://www.ebay.it/itm/USB-Watchdog-TIMER-SCHEDA-MODULO-AUTO-Riavvio-IP-ELETTRONICO-REBOOT-PRATICO-HF/391950897009?hash=item5b42180f71:g:TaAAAOSwnTdaK4bn

Puoi spendere molto meno :smiley: ... ti basta un NE555 (o simile, es. LMC555) in configurazione monostabile retriggerabile (... cerca con Google se non sai cosa è) ...

Da ESP, ogni X secondi invii il segnale di trigger; se il programma si impalla e non invii il segnale, passato un tempo Y prefissato usi l'uscita per fare RESET al ESP8266 e farlo ripartire :wink:

Guglielmo

Sì lo so che posso usare un NE555, è quello che ho detto all'inizio... ma dovrei anche mettermi a cercare/comprare/saldare tutti gli altri componenti circostanti... ma io sono piu softwarista che hardwarista...

Però forse potrei usare un semplice relè temporizzato:

Per l'appunto usa un NE555. Dovrebbe essere sufficiente inviargli periodicamente un impulso da dentro loop() per resettarlo in continuazione; se lo sketch si blocca, l'impulso non arriva più, il relè scatta, il piedino RST va a massa e il circuito si resetta.

Ho solo un dubbio: l'ESP può bloccarsi in qualunque momento... magari anche mentre sta mandando l'impulso al timer esterno. Quindi? In questo caso come farei a comandare il reset?

jumpjack:
Ho solo un dubbio: l'ESP può bloccarsi in qualunque momento... magari anche mentre sta mandando l'impulso al timer esterno. Quindi? In questo caso come farei a comandare il reset?

Vedo che NON hai capito come usare il NE555 ...

... il circuito genera in uscita un impulso di durata Y, ma, se durante tale tempo Y tu invii un segnale, tale tempo riparte e quindi il segnale non cambia stato. Tutto questo lo fa il NE555, tu devi solo inviare il segnale per fare ripartire il tempo Y prima che scada. Se tu NON invii il segnale (perché l'ESP è fuori controllo), passato il tempo Y il segnale in uscita del NE555 cambia e tu lo usi per comandare il reset.

Il ... "complicato" circuito è un integratino a 8 pin con una resistenza ed un paio di condensatori ... :smiley:

Guglielmo

Edit: Dai una letta QUI ...

daje....
ti ho già detto che ho già visto che esistono duemila pagine che spiegano come costruirsi da soli un timer con un ne555, ma non mi interessano. Anche perchè quelli che ho visto io richiedono 5 o 6 resistenze e condensatori che sicuramente non ho della "grandezza" che serve, quindi dovrei cercarli/ordinarli/comprarli poi saldarli, provarli, incazzarmi perchè mi sono dimenticato un filo, ecc.. ec.. ecc..

in più, ho appena detto che lo sketch può bloccarsi mentre sta inviando l'impulso, quindi probabilmente il timer non arriverebbe mai a zero perchè sarebbe sempre eccitato (o no?!?)

Però forse ho trovato una soluzione: un timer che, invece che pochi secondi, dura alcune ore, e che viene avviato una sola volta, appena parte lo sketch, dopodichè diventa del tutto indipendente: dopo tot ore resetta in ogni caso l'ESP, che all'avvio riavvierà anche il timer.
Visto che è estremamente improbabile che lo sketch si blocchi appena avviato, tutto il sistema non dovrebbe bloccarsi mai.
Non riesco però a trovare un timer economico che arrivi a 24 ore, quindi probabilmente il mio sistema dovrà resettarsi automaticamente ogni ora; mi chiedo quanti cicli di reset possa sopportare un ESP senza rovinarsi....

jumpjack:
in più, ho appena detto che lo sketch può bloccarsi mentre sta inviando l'impulso, quindi probabilmente il timer non arriverebbe mai a zero perchè sarebbe sempre eccitato (o no?!?)

:astonished: :astonished: :astonished:
Visto che non leggi quello che scrivo, rinuncio a continuare a cercare di spiegarti come funziona un monostabile retriggerabile e come usarlo nel tuo caso ... fai un po' come vuoi. ::slight_smile:

Guglielmo

Comunque, per evitare che si blocchi se l'ESP si inchioda proprio mentre manda alta l'uscita, basta un condensatore in serie (con un diodo verso massa, giusto per evitare il picco negativo di ritorno :D)

Ma scusa, comunque perche' secondo te sarebbe piu complicato usare un 555 (che devi saldare), di un rele' temporizzato esterno (che devi comunque cablare in qualche modo, quindi pur sempre saldare, con l'aggravante che il rele' sarebbe sempre li alimentato a consumare corrente e surriscaldarsi ?)

Etemenanki:
Comunque, per evitare che si blocchi se l'ESP si inchioda proprio mentre manda alta l'uscita, basta un condensatore in serie (con un diodo verso massa, giusto per evitare il picco negativo di ritorno :D)

Etem ... hai mai visto una MCU bloccarsi durante un normale output digitale ? Se si NON è da resettare, è da BUTTARE!

In realtà, salvo casi di guasto HW (... e li non c'è reset che tenga), la MCU NON si "blocca" mai.
Il problema è invece che, programmi scritti con i piedi, fanno cose che non dovrebbero fare ... sovrascrivono aree di memoria, creano stack overflow, o altre cose del genere che fanno perdere il controllo al programma e, per questo, di usa appunto il WatchDog ... :wink:

Guglielmo

gpb01:
Etem ... hai mai visto una MCU bloccarsi durante un normale output digitale ? ...

Fin'ora no, ma ti ricordi di quel tipo che si chiamava Murphy ? ... :smiley:

Scherzi a parte, era per prevenire qualsiasi tipo di problema :wink:

Etemenanki:
Scherzi a parte, era per prevenire qualsiasi tipo di problema :wink:

... guarda, ti concedo al massimo un circuito disegnato male o collegamenti fatti con i piedi che portano "spikes" e disturbi talmente forti all'interno da far impazzire il programma :smiley: :smiley: :smiley:

Guglielmo

Scusa jumpjack, perchè non usi direttamente il watchdog dell'ESP? O mi sfugge qualcosa? Teoricamente, dico così perchè sugli ESP non l'ho mai usato, il watchdog è attaccato ad un timer indipendente dallo sketch.. almeno per gli AVR è così

[jumjack] una domanda

Nella tua ESP si blocca Il WiFi e il microcontrolore funziona o si blocca tutto?

Io con l'amico Giorgio del gruppo arduino di Pinerolo abbiamo avuto un problema
sul WiFi, si blocca il WiFi (per ripartire necessita un reset) mentre un LED nel
loop() continua a lampeggiare.

busco:
Io con l'amico Giorgio del gruppo arduino di Pinerolo abbiamo avuto un problema
sul WiFi, si blocca il WiFi (per ripartire necessita un reset) mentre un LED nel
loop() continua a lampeggiare.

Dubito dipenda dal ESP (... salvo vecchie versioni del FW) ... ne ho decine collegati in WiFi che funzionano 24/24 ore, facendo da server per la trasmissione di dati letti da sensori e ... nessuno si è mai bloccato.

Verificherei meglio il SW ::slight_smile:

Guglielmo

gpb01:
Dubito dipenda dal ESP (... salvo vecchie versioni del FW) ... ne ho decine collegati in WiFi che funzionano 24/24 ore, facendo da server per la trasmissione di dati letti da sensori e ... nessuno si è mai bloccato.

Verificherei meglio il SW ::slight_smile:

Guglielmo

Provato su alcune ESP es: wemos mini(2), wemos D1R2, ESP8266-12E e ESP-201

In Access Point nessun problema su tutte le schede.

In STA dopo ore anche giorni su alcune schede si arresta il WiFi e con un reset riparte.

Abbiamo provato a inserire WiFi.setAutoReconnect(true); in setup() e sembra funzionare.

Stiamo ancora provando.

busco:
In STA dopo ore anche giorni su alcune schede si arresta il WiFi e con un reset riparte.

Le mie sono tutte in STA collegate a reti WiFi preesistenti ... quindi, ripeto, il problema è altrove ... ::slight_smile:

Guglielmo

Potrebbe essere un problema del mio modem collegato ad internet?

Abbiamo cercato altre informazioni, in loop() aggiunto dei controlli
sugli eventi WiFI.status()

L' ESP è in funzione da ieri sera:

void setup(){
WiFi.setAutoReconnect(true);
...
}
void loop(){
if(WiFi.status()==WL_NO_SSID_AVAIL){
  if(millis()>t_prec0+t_cont0){     //1000mS
    cont0++;                                  //0
    lcd.setCursor(8,0);
    lcd.print("      ");
    lcd.setCursor(8,0);
    lcd.print(cont0);
    t_prec0=millis();
  }
}
if(WiFi.status()==WL_CONNECT_FAILED){
 cont1++;                                      //6 volte
}
if(WiFi.status()==WL_CONNECTION_LOST){
cont2++;                                      //0
}
if(WiFi.status()==WL_DISCONNECTED){
    cont3++                                   //93 volte
}
}

Come si potrebbe interpretare.
Si è disconnesso 93 volte
e 6 ha fallito la connessione?

Tutte le volte che mi collego in WiFi a questa scheda ha sempre risposto.

>busco: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra). Grazie :slight_smile:

Guglielmo

Chiedo scusa.

busco:
Chiedo scusa.

Nessun problema, ma ... sistema il post. Grazie :slight_smile:

Guglielmo

Il problema di Busco è simile a WiFi not always reconnecting. Reports WL_NO_SSID_AVAIL after many hours of successful operation · Issue #3561 · esp8266/Arduino · GitHub