Vytvorte automatický router reštartér len za tri doláre spolu s ESP8266 a jedným relé.

Loading

Najslabším článkom nášho digitálneho života doma je potrubie nášho domu a zariadenie, ku ktorému je pripojené. Preto náš káblový modem umožňuje komunikáciu našich zariadení s vonkajším svetom.

Rovnako ako všetky počítače, aj modemy sú náchylné na zlyhanie; niektorí z nás ich musia reštartovať aspoň raz týždenne.

Nedávno sa môj modem začal odpájať raz denne, a pretože nemôžem čeliť problémom pri nastavovaní nového, rozhodol som sa pre riešenie.

Ak snímač dokáže zistiť, kedy sa modem odpojil, mohol by sa sám znovunapájať.

Projekt bol nakoniec oveľa jednoduchší a lacnejší, ako som čakal.

Potrebné komponenty

  • ESP8266 01 – stojí asi 1,50 USD od spoločnosti Aliexpress
  • Programovacia doska pre ESP. Niektorí z nás už majú programovacie zariadenie, ale ak si kúpite oba naraz, môžete ich získať za približne 2,50 USD.
  • Malá relé doska pre ESP. Vyhľadajte reléový modul ESP8266 5V 1CH ESP-01. To tiež stojí asi 1 dolár.

Ako to funguje?

Laicky povedané, postup je jednoduchý. ESP pravidelne pingá Google cez modem. Ak dostane odpoveď, neurobí nič; relé zostane zatvorené a modem zostane zapnutý.

Ak ESP nedostane odpoveď, bude „rozumieť“, že modem nefunguje. Ak k tomu dôjde, vypne relé, počká 30 sekúnd, potom ho znova zapne a modem sa tak napája.

“Nekonečná slučka”

Jedna chyba ma nechala na chvíľu v rozpakoch, kým som sa k tomu dopracoval.

Všetci vieme, že k úspešnému „podaniu ruky“ s linkou trvá modem niekoľko minút. Keď som prvýkrát nastavoval svoje zariadenie, ESP som počas nastavovania príkazu nechal pingať na Google. Pretože sa modem ešte nepripojil, ESP nedostal žiadnu odpoveď – rovnako tak aj energetický cyklus. Bol som v nekonečnej slučke a nikam som sa nedostal.

Potreboval som ESP, aby mal modem čas na úspešné podanie ruky. Akonáhle by sa to stalo, ESP by sa zapojil do svojho pravidelného prieskumu verejnej mienky spoločnosti Google.

Reklamy

Pripojenie

Relé je umiestnené v strede napájacieho kábla smerovača. Prepína iba 12 V, takže nehrozia žiadne problémy s bezpečnosťou. Jedinou prekážkou je, že doska relé ESP tiež potrebuje energiu – ktorú som mu dal prostredníctvom starej nabíjačky pre mobilné telefóny 5v, 1A. Vytlačil som malú škatuľku, aby som ju vložil, ale rozhodol som sa ju nezakrývať, aby nedošlo k prehriatiu.

Dodatočné úvahy

Odkedy som nainštaloval zariadenie, fungovalo bezchybne. Vidím však, že moje odpojenia sú čoraz častejšie a som zvedavý, či bude treba router vymeniť skôr, ako som si myslel. Aby som získal viac podrobností o tom, ako často sa cykluje napájanie, pracujem na verzii (so spoluzakladateľom blogu, Allan), ktorá bude:

  • Upozornite ma, keď urobí svoje
  • Zaznamenáva čas, dátumy a frekvenciu udalostí.

Celý tento projekt ma prinútil premýšľať; prečo to nie je zabudované do smerovačov? Som si istý, že by bolo veľmi ľahké povedať smerovaču, aby vypol napájanie, ak stratí pripojenie k internetu.

Allanova technická diskusia

Geniálny programátor a kolega Allan Schwartz mi poskytol nasledujúcu diskusiu o kóde, ktorý sme nainštalovali do Arduina:

Naše riešenie možno najlepšie označiť ako stroj konečných stavov ovládača udalostí.

V tejto aplikácii máme presne 3 stavy:

  • Stav testovania
  • Stav zlyhania
  • Stav úspechu

Čo program robí počas každého z týchto stavov, je najlepšie opísané v nasledujúcom stavovom diagrame, ktorý je akýmsi vývojovým diagramom. Toto sa formálne nazýva UML stavový diagram.

Stavový diagram zobrazuje tri stavy zvýraznené žltou farbou a prechody stavu:

Tento stavový stroj a implikovaný logický tok môžeme preložiť do Arduino C veľmi presne, takže zámer kódu C je veľmi jasný a môžeme skontrolovať, či sa kód C presne zhoduje s logickým tokom.

Prechody stavov sa vykonávajú priradením novej hodnoty k CurrentState a následným „vylomením“ príkazu switch. Nahradenie prerušenia návratom by viedlo k úplne rovnakému správaniu, pretože loop znázorňuje nepretržite.

Reklamy
Reklamy

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *