Avtor: dr. Simon Vavpotič
spletna stran: https://pcusbprojects.com
Je Arduino prezapleten za večje projekte avtomatizacije doma? Tasmota ni edino razvojno okolje za poenostavljeno avtomatizacijo, vendar ima številne prednosti…
Uporaba storitev Amazon Web Services okvirja ali Microsoft Azur okvirja zahteva kar nekaj programiranja v Arduino razvojnem okolji, zato smo v zadnjem času dobili kar nekaj razvojnih okolij, ki avtomatizacijo doma poenostavijo do te mere, da lahko izkušen skrbnik vzpostavi in preizkusi celotno delovanje sistema za varovanje in upravljanje doma že v nekaj urah, ob pogoju, da so vse naprave že vgrajene.
Tasmoto (tasmota.github.io) lahko integriramo v številna okolja za avtomatizacijo doma, kot so: Home Assistant, Alex, Domoticz, Home Bridge, OctoPrint, SmartThings, Tasmohab idr. Je vmesni člen, ki omogoča enostaven priklop, oddaljeno konfiguracijo ter oddaljeni komunikacijo s številnimi tipali in krmiljenje aktivatorjev. Mogoča je tudi nastavitev časovnega vklopa oz. izklopa.
Ta vsebina je samo za naročnike
Odprtokodna Tasmota v osnovi ne zahteva programiranja, saj lahko vse relacije med zajemom podatkov z digitalnih ali analognih senzorjev, kot tudi krmiljenje naprav prek digitalnih, PWM, analognih in drugih izhodov ter komunikacij s pomočjo protokolov SPI, I2C idr. izvedemo prek obsežnih nastavitvenih menijev. Ko pa brez programiranja vendarle ne gre, si lahko pomagamo z vgrajenim skriptnim jezikom Berry.
Kako začeti in kaj potrebujemo?
Za osnovno uporabo potrebujemo katerikoli ESP8266 ali ESP32 modul, v katerega namestimo osnovno programsko kodo prek priključkov Rx in Tx, oziroma zaporednega protokola s 3,3-voltni nivoji. Če za programiranje uporabljamo Raspberry Pi, ki ima vgrajen zaporedni vmesnik, lahko modul povežemo neposredno z računalnikom, sicer pa potrebujemo komunikacijski prehod iz USB na zaporedno povezavo.
Pri Tasmota priporočajo CH340 ali CH341, sam pa sem namesto tega uporabil kar doma izdelan prehod na osnovo PIC32MX270F256B mikrokontrolerja, v DIL-28 ohišju, ki ga je enostavno spajkati, programsko kodo zanj pa lahko prenesete s spletne strani PCUSBProjects.com, kjer je objavljena tudi njegova shema.
Za začetnike je odlična tudi možnosti nakupa razvojne ploščice, ki poleg ESP32 modula vsebuje tudi komunikacijski prehod. Tako lahko snovno programiranje opravimo iz kateregakoli računalnika s priključki USB.
Za vzpostavitev delovanja moramo v modul prenesti izvedljivo Tasmota programsko kodo, ki jo dobimo na spletni strani tasmota.github.io. Na voljo so različice za ESP8266, ESP32, ESP32S2, ESP32S3 in ESP32C3, poleg tega pa še različice za razvojne ploščice na osnovi teh modulov, kot je denimo ESP32CAM, s katerim lahko povežemo eno od OmniVisionovih digitalnih kamer in ima obenem vgrajeno tudi ležišče za SD kartico za shranjevanje podatkov.
A ker je razvojno okolje Tasmota odprtokodno, dobimo tudi izvorno kodo, ki jo lahko po svoje prilagodimo. Sam sem pogrešal podpore za delovanje ESP modulov prek Etherneta, oziroma žičnih povezav, ki so navadno zanesljivejše od Wi-Fi ali Bluetootha, ki sta v osnovi podprta. Je pa res, da tega ni težko dodati, če izvorno kodo malce predelamo, tako kot tisto v številnih Arduino Wi-Fi primerih.
Po namestitvi Tasmota kode sledi presenečenje…
Najhitrejši način komunikacije z ESP8266 in ESP32 moduli brez dodatkov je Wi-Fi, zato Tasmota zahteva, da module najprej povežemo z lokalnim (navadno domačim) Wi-Fi usmerjevalnikom, prek katerega lahko dostopajo v internet in tudi to Tasmotinih strežnikov. Vnos SSID pristopnega gesla je zato ključen za nadaljevanje. Podatka lahko v ESP module prenesemo prek zaporedne povezave ali Wi-Fi povezave. Pri vnosu SSID in gesla prek Wi-Fi naj opozorim, da ESP modul na začetku deluje kot dostopna točka s prostim dostopom. Če se prijavimo in vnesemo omenjena podatka, bi ju vsaj teoretično lahko z lahkoto prestregel tudi hekersko navdahnjen sosed in tako pridobil dostop do našega domačega Wi-Fi omrežja. To pa zato, ker ju iz pametnega telefona ali druge Wi-Fi naprave posredujemo v nekodiranih podatkovnih paketih. Zato predlagam, da poverilnice raje vnesete prek interneta, oziroma zaporedne povezave.
Zaradi očitne varnostne luknje smo preverili še delovanje spletne aplikacije za programiranje ESP32, ki jo ponujajo pri Tasmoti. Pri delovanju se v veliki meri zanaša na spletna orodja, ki jih najdemo na naslovu esphome.github.com/esp-web-tools. Prek spletni strani si lahko ogledamo tudi poučen video iz YouTube z naslovom Web Tools in Action, ki natančno predstavi princip delovanja spletnega nakladalnika programov v module ESP. Tako odkrijemo, da isto zadevo, oziroma podporo uporablja tudi Home Assistant, ki je mimogrede neposredno omenjen v opisu.
Tako moramo na koncu poiskati le še odgovor, ali Java aplikacije v spletnem brskalniku posreduje ključne podatke, kot sta SSID in pristopno geslo strežniku. Kolikor sem imel časa pregledovati programsko kodo mislim, da k sreči ne. Zato je veliko bolj varno prenašati pristopna SSID in pristopno geslo v ESP modul prek spletne aplikacije.
Programiranje brez spletne aplikacije
ESP module lahko programiramo tudi iz Espressif Systemsovega razvojnega okolja, v katerega prenesemo datoteko *.bin in jo z orodjem ESPtool, ki deluje v programskem jeziku Python prenesemo v modul. Je pa to vsekakor bolj zapletena varianta, saj se moramo pred nameščanjem okolja v PC potruditi, da izpolnimo vse predpogoje. Postopek je natančno opisan na spletni strani github.com/espressif/esptool, iz katere lahko prenesemo tudi izvedljivo in izvorno kodo orodja. Tretjo možnost programiranja predstavlja orodje ESP-Flasher, ki prav tako deluje v Windows, Linux in MaxOS okoljih.
Začetnikom vsekakor priporočamo uporabo Web Installerja in prenos poverilnic v ESP32 modul prek spletne aplikacije.
Programiranje in nastavljanje modulov
Ko izberemo generični ESP razvojni modul ali eno izmed razvojnih plošč s tem modulom, spletna aplikacija sama izbere ustrezno izvedljivo datoteko in model krmiljenja zunanjih priključkov. Nato ponudi možnost brisanja vsebine ESP modula in nazadnje začne s programiranjem. Pogoj za začetek programiranja je, da je ESP modul zagnan v načinu za programiranje, ki ga pri veliko modulov lahko izberemo s tiščanjem mikrotipke med njegovim zagonom.
Sam uporabljam LilyGo TTGO T-Internet POE modul, ki ima tako tipko reset, kot tudi tipko za zagon v načinu za programiranje (boot), nima le komunikacijskega prehoda, za katerega sem uporabil že omenjenih PIC32MX270F256B čip, ki zmore največjo hitrost 921.600 bitov na sekundo. Kljub temu poteka programiranje s spletno aplikacijo celi 2 minuti, kar bistveno počasneje kot v Arduino razvojnem okolju, kjer traja prenos nekoliko več kot 2 MB dolge programske kode z omenjeno bitno hitrostjo manj kot pol minute.
Konfiguracija ESP modula
Po prenosu ustrezne izvedljive programske kode v ESP modul, lahko vse nadaljnje korake izvedemo prek spletne aplikacije, ki jo poganjamo iz ESP modula v spletnem brskalniku, ko je modul povezan z lokalnim omrežjem prek Wi-Fi povezave. Pri tem modul samodejno pridobi IP naslov, če je v omrežju na voljo DHCP strežnik, na primer: 192.168.1.121. Naslova ni treba ugibati, saj nam ga po programiranju razkrije kar spletna aplikacija, ki iz načina za programiranje po ponovnem zagonu ESP modula samodejno preide v način za normalno delovanje in prikaže začetni nastavitveni meni z naslednjimi opcijami: Configuration, Information, Firmware upgrade, Tools in Restart.
Pritisk na gumb Information nam razkrije podrobnosti nastavitev Wi-Fi komunikacije in delovanja ESP modula, med drugim: IP naslov, omrežno masko, IP naslov prehoda, podatke o Wi-Fi usmerjevalniku, denimo frekvenčni kanal, MAC naslov, … Vidimo lahko tudi podatke MQTT storitve, ki jo uporablja na ESP modul v računalniškem oblaku za podporo svojemu delovanju. V nadaljevanju najdemo tudi zelo podrobne podatke o uporabljenem ESP modulu in njegovem delovanju, denimo velikost programske ga pomnilniki, velikost vgrajene programske opreme, velikost predpomnilnika itn.
Naj omenim še, da je na voljo tudi pogon za shranjevanje poljubnih datotek za podporo delovanju, ki ga lahko uporabimo za vodenje dnevnika delovanja ESP modula. Velikost pogona lahko prilagodimo zmožnostim ESP modula in svojim željam v nastavitvah.
Nastavitve Wi-Fi sicer niso nekaj posebnega, saj omogočajo predvsem preklop v drugo Wi-Fi omrežje in/ali zamenjavo pristopnega gesla.
Naslednja skupina nastavitev, od katerih ima vsaka svoj meni, je namenjena integraciji v različna razvojna okolja. O tem več v prihodnjih nadaljevanjih. Zanimivo, pa je med omenjene nastavitve nekako pomešana tudi Configure Timer, s katero lahko nastavljamo časovni vklop in izklop digitalnih in analogih izhodov. Izhodom lahko hkrati izberemo tudi funkcijo, denimo PWM modulacijo.
Posebno vlogo ima tudi skupina nastavitev Auto-Configuration, vsebuje celotne primere nastavitev za uveljavljene razvojne ploščice z ESP moduli, denimo AI Thinkerjev modul ESP32CAM. Tako nam ni potrebno posebej nastavljati funkcionalnosti vsakega od priključkov. Za urejanje in preverjanje slednjih je sicer na volj grafična predstavitev, pri kateri je na fotografiji modula z barvnim krožcem označeno trenutno stanje vsakega priključka. Če svoje razvojne plošče ne najdemo med ponujenimi, lahko namesto tega izberemo splošno sliko razvojnega modula.
Prihodnjič
Vzpostavili smo osnovno delovanje ESP modula. Prihodnjič bomo preverili, kako deluje in spoznali, kako programiramo v programskem jeziku Berry. Priključili bomo tudi tipko in rele ter zaznavali in krmili na daljavo. Zanimalo nas bo tudi, kako vzpostavimo in vzdržujemo dnevnik dogodkov, ki je zelo pomemben pri ugotavljanju vzrokov, ko gre kaj narobe…