ResetterNET : un dispositivo basato su ESP8266 che resetta il router in caso di mancanza di collegamento ad Internet

Questo è il mio ultimo progetto di questo 2018, nato da un’esigenza personale.

In casa ho il modem router al quale sono collegati, tramite rete lan, due dispositivi che fanno da access point+Switch in modo da avere la copertura WiFi+Ethernet in due punti non facilmente raggiungibili dalla rete WiFi principale. Il problema è che, quando per un motivo qualsiasi il router principale viene spento oppure perde il collegamento ad internet, i due access point rimangono isolati dalla rete o non forniscono più il collegamento internet, il che vuol dire che i dispositivi ad essi collegati oltre a non avere più l’accesso ad internet, non sono nemmeno più visibili nella rete fino a che non spengo e riaccendo i suddetti access point.

Il comportamento in questione è effettivamente molto strano. Ho provato anche a cambiare marca degli access point e ho lo stesso identico problema, per cui credo che il malfunzionamento sia da imputare al Modem/Router. Ad ogni modo non mi sono applicato più di tanto perchè non mi va di cambiare il router e ho quindi ideato un dispositivo che esegue spegnimento/riaccensione degli Access Point nel momento in cui viene a mancare il collegamento ad internet: il ResetterNET appunto.

Etimologia: Reset + Internet/Ethernet. Ma dai!

Questo dispositivo torna utile anche a qualche amico che, tempo fa, mi ha detto che il suo router presenta questo strano difetto: dopo qualche tempo (che può variare da settimane a mesi) che il router rimane acceso, inspiegabilmente perde il collegamento ad Internet fino a che non viene spento e riacceso: questa è una vera rottura nel momento in cui il router si trova in un posto dove non andiamo spesso e abbiamo bisogno, ad esempio, di monitorarlo da remoto con delle telecamere!

E’ una bella rottura se avete, ad esempio, delle telecamere in un posto e non riuscite più a vederle perchè il collegamento internet si è impallato e normalmente risolvete col il metodo classico che prevede di spegnere e riaccendere il router.

Il ResetterNET è semplicissimo e utilizza un NodeMCU devkit oppure un modulino ESP-01 programmati tramite Arduino IDE.

Se non vi ricordate come si fa, vi rimando a questi due miei vecchi articoli:

Se utilizzate un NodeMCU è chiaramente più semplice da programmare dal momento che include già l’adattatore Seriale/USB che esegue anche la corretta procedura di reset/boot e il regolatore di tensione da 3.3V. Se invece volete utilizzare un ESP-01, che è più compatto ed economico, dovete collegare tutta la circuiteria per eseguire il reset/boot, il regolatore di tensione a 3.3V ed avere a disposizione un adattatore seriale/USB per la programmazione.

Ovvero: pulsantino verso massa sul GPIO0, che chiameremo “Flash”, resistenza di pullup (verso 3.3V) sui pin Enable e Reset, e pulsantino verso massa sul pin Reset. Dopo aver dato alimentazione (3.3V) premere il pulsante Reset, tenerlo premuto e premere il pulsante Flash, rilasciare quindi reset e infine flash, ed avviare la programmazione tramite l’adattatore seriale.

L’unica cosa da fare è collegare un relè a 5V, tramite un mosfet, al GPIO0 secondo lo schema seguente:

Pardon… Il led l’ho disegnato sottosopra… Verso GND ci va il catodo e verso la resistenza l’anodo…

Ho utilizzato un Mosfet dal momento che i GPIO dell’ESP8266 forniscono un livello alto di 3.3V e utilizzare un normale transistor BJT per pilotare un relè a 5V è più difficoltoso mentre il mosfet non si fa problemi. Ho usato un Mosfet a Canale N BS170 perchè ne avevo alcuni (Amazon), ma potete usarne uno qualunque. Anche per i relè potete usarne uno qualunque a 5V purchè i contatti supportino la corrente necessaria al router (che generalmente non va a più di 12V e non assorbe correnti elevate).

Ai capi del contatto NC del relè si collegherà uno dei due fili che porta l’alimentazione al router o all’access point. Io ho semplicemente tagliato uno dei due fili e li ho collegati al relè tramite un morsetto a vite:

La logica di pilotaggio del relè è invertita: portando il GPIO a livello basso, il relè viene attivato e di conseguenza il router viene spento perchè è collegato ai contatti NC. Il led messo in parallelo al relè rimane acceso finchè il relay non è eccitato (router alimentato) e si spegne quando il relè viene acceso ad indicare che il router non è alimentato: quindi funziona al contrario di come ci si potrebbe aspettare. Ripeto: il led in parallelo al relè segue lo stato di alimentazione del router, non del relè!

In una revisione iniziale ho utilizzato un classico alimentatore da muro a 5V, poi da quando ho scoperto i moduli Hi-Link ho cominciato ad usare solo quelli per avere una realizzazione più compatta. Si tratta di moduli switching incapsulati che prendono la 220V in ingresso e tirano fuori 5V (esistono anche i modelli da 3.3V e 12V). Ho utilizzato il modello HLK-PM01 (5V, 3W = 600mA). Lo trovate su Amazon. Attenzione però quando li utilizzate: sono collegati direttamente alla 220V e possono costituire un rischio! In alternativa usate un comune alimentatore da parete come questo.

SSID e password della rete sono hard-wired nel codice, per cui dovete cambiarli. Per mia abitudine non utilizzo mai indirizzi IP dinamici e anche questo lo definisco nel codice, per cui controllate che l’indirizzo IP del vostro router sia lo stesso di quello che ho inserito io nel codice, altrimenti il dispositivo si collegherà alla rete Wi-Fi ma dirà sempre che il collegamento internet non è presente!

All’avvio il ResetterNET prova a collegarsi alla rete Wi-Fi impostata nel codice. Nel caso in cui entro 5 minuti non riesce a collegarsi alla rete Wi-Fi, esegue il reset del router: il collegamento alla rete Wi-Fi è indispensabile per cui se entro tutto questo tempo non ci si riesce a collegare, vuol dire che c’è qualche problema.

Potete controllare sulla porta seriale quello che accade: se vedete che il dispositivo non si collega alla rete Wi-Fi, nonostante questa sia accesa, vuol dire che avete sbagliato a configurare SSID/Password/Indirizzi IP nel codice.

Dopo che il dispositivo si è collegato alla rete Wi-Fi, questo non vuol dire che internet sia presente, per cui periodicamente (ogni 10 secondi), prova a stabilire la connessione con un sito internet. Se per 5 volte di seguito non è in grado di stabilire una connessione, vuol dire che internet non è presente, per cui esegue il reset del router togliendo e ridando alimentazione tramite il relè.

Nel codice viene utilizzato anche il led Blu che normalmente è presente sul modulino ESP-12 montato sul NodeMCU, che è collegato al GPIO2 ed è attivo basso (si accende portando il pin a livello logico basso). Il LED rimane acceso nel momento in cui c’è collegamento al Wi-Fi, spento quando non c’è, e lampeggiante quando prova a connettersi.

Questo articolo è stato riportato anche da Hackaday

Housing

Ho realizzato un contenitore per il ResetterNet mediante la stampa 3D utilizzando il fantastico progetto presente su Thingiverse The Ultimate Box Maker che permette di realizzare anche il pannello. Qui c’è la mia scatola:

Non metto il mio file STL generato perchè dovete realizzarlo voi, utilizzando lo script, in base alla millefori che state utilizzando.

Download

Acquisto materiale

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)