ESP32 - internetinis mygtukas

Ar žinai kas labiausiai gąsdina informatiką? Taip - tai išjungtas kompiuteris. Aš pats esu informatikas, todėl puikiai suprantu šią baimę. Ji jau seniai mane persekioja, bet pagaliau nusprendžiau su ja susigrumti akis į akį.

Žinau, kad kai kurie iš jūsų tiesiog priimtų šį jausmą į savo širdį, su juo susitaikytų ir pamirštų, tačiau aš ne toks. Aš negaliu nežinomybei ir nuolatos galvoje besisukantiems klausimams „ar mano kompas vis dar veikia?“, „kaip aš jį galėčiau įjungti, jei jis netikėtai išsijungtų, o manęs nebūtų šalia?“ paprasčiausiai ištirpti rutinos nuobodulyje. Aš neabejingas savo kompiuteriui ir jo būklei, todėl dar šiandien turiu ką nors dėl to daryti.

Padarysiu taip, kad bet kada iš bet kur galėčiau patikrinti ar mano kompiuteris vis dar veikia ir esant reikalui įjungti.

Technologijos

Akivaizdžiausias sprendimas būtų panaudoti WoL, tačiau kad ir kaip gražiai viskas atrodo, ši technologija visai ne pakalnutėmis kvepia, yra gana rimtų trūkumų:

  • elektros sunaudojimas.
    Įjungus šią funkciją išjungtas kompiuteris pradeda naudoti net pora vatų daugiau elektros! Nelabai ekonomiška…
  • patikimai veikia tik LAN’e
    Arba nemoku sukonfigūruoti savo rauterio port-fowardingo, arba Telia blokuoja WoL paketus, tad man dar nei kart nepavyko įjungti kompiuterio per internetą, nors per LAN’ą viskas veikė.

Kitas sprendimas - sukurti „internetinį pirštą“ - mikrokontrolerį, kuris būtų visada įjungtas, valgytų labai mažai elektros, o gavęs komandą iš interneto „paspaustų“ kompiuterio įjungimo mygtuką. O kad jau yra tas pirštas, kartu galima įdėti ir „internetinę akį“, kuri stebės ar dega įjungto kompo lemputė.

Mikrokontroleris ir schema

Pasirinkau populiarų mikrokontrolerį ESP32-WROOM-32D, kuris turi integruotą WiFi ir daug atminties bei užtektinai GPIO.

Puiku, kad net išjungtas kompas USB lizde duoda 5V elektros, kurios pilnai pakanka ESP32 pamaitinti, nes ji valgo tik nuo 30mA ramybės būsenoj iki 150mA kai kažką daro. Žinau, nes patikrinau su USB testeriu. Kad ir kaip ten bebūtų, bet net prie maksimalių 150mA kompiuteriukas surys tik 0.75W, o tai yra žymiai mažiau mažiau nei WoL.

Kalbant apie prijungimą prie PC, jungsiu per optoporą, nes jungti tiesiai kažkaip nesmagu… Dar kas ims ir sudegs. Jei įdomu - pabraižiau tokią schemutę:

L1 šviečia, kai nuspaudžiamas virtualus įjungimo mygtukas, o L2 kai pasileidžia internetinis puslapis ir jau galima prisijungti prie puslapio.

U1 sutrumpina motininės PWR kontaktus, prie kurių paprastai būna prijungtas įjungimo mygtukas, o U2 įjungia GPIO kai šviečia įjungto kompiuterio lemputė.

Kodas

Kodinimui pasirinkau ne nūbams skirtą Arduino, o profų naudojamą ESP-IDF. Turiu pagirti labai gerą dokumentaciją, kurios dėka kodinimas buvo tikras malonumas.

Visą savo kodą išskaidžiau į tokius modulius:

  • gpio - įjungia arba išjungia optoporą, kad įjungtų arba išjungtų PC. Ir dar kartu yra kitos optoporos nuskaitymas. Ir dar LEDų išjungimas, įjungimas, kad matytųsi, ar viskas veikia.
  • restart - kartais kompiuteriukas pakimba, tai padariau, kad persikrautų kas valandą. Dėl viso pikto.
  • web_server - HTTP web serveris, kuris parodo puslapį ir reaguoja į puslapyje esančio mygtuko paspaudimą. Naudoja gpio modulį.
  • wifi - prisijungia prie WiFi, kad būtų internetas.

Prieš kompiliuojant reikia padaryti menuconfig, kuriame reikia nurodyti WiFi slaptažodį ir GPIO pinus.

Galutinis produktas

Viską sulitavęs įdėjau į skaidrias plastikines dėžutes, kad nesutrumpintų. Atrodo keistokai, bet svarbu, kad veikia.