Tokrat bomo pisali o računalniškem vidu, iskanju predmetov v sliki in izdelali tudi video domofon! Na koncu članka bomo programirali LILYGO T-Watch 2020 v3.
Avtor: dr. Simon Vavpotič
E-pošta: simon.vavpotic@siol.net
2021-302-33
V preteklem nadaljevanju smo se najprej ukvarjali s krmiljenjem krtačnih elektromotorjev, pri čemer smo natančnost bistveno povečali z uporabo enkoderja.
Kot alternativo mehanskemu merjenju hitrosti z enkoderji smo uporabili optično merjenje z ADNS5020 senzorjem. Da Microchipovi mikrokontrolerji ne bi ostali zapostavljeni, smo se lotili še izdelave USB-PIC32 mostu/programatorja/razhroščevalnika, saj ima PIC32 vgrajene bistveno zmogljivejši USART, kot je UART pri PIC18. Zato bi bilo škoda, da bi trmasto vztrajali pri serijskem MCP2200, ki ni nič drugega kot vnaprej sprogramirani PIC18F14K50. A potruditi se je bilo treba napisati novo vgrajeno programsko opremo za PIC32, ki jo lahko prenesete iz spletne strani sites.google.com/site/pcusbprojects. Nazadnje smo se lotili še ustvarjanja in programiranja programskih niti in semaforjev, ki omogočajo komunikacijo med njimi.
Ta vsebina je samo za naročnike
Tokrat bo se posebej zanimivo, saj bomo sliko iz ESP32-CAM analizirali s funkcijami računalniškega vida. Za osnovo bomo uporabili odprtokodno programsko knjižnico OpenCV z bogato funkcionalnostjo. Čeprav bi marsikatero funkcijo OpenCV s pomočjo flash RAM-a na SD kartici skoraj gotovo lahko implementirali tudi neposredno v ESP32-CAM, za enkrat v spletu najdemo le projekte, ki se zanašajo na Java Script uporabniške vmesnike oddaljenih OpenCV strežnikov. Javni OpenCV Java Script API najdemo je na spletnem naslovu: https://docs.opencv.org/master/opencv.js, kar lahko razberemo tudi izvorne programske kode na spletu objavljenih primerov. Avtorji primerov implementacij računalniškega vida za ESP32-CAM se zaenkrat ne poglabljajo v delovanje in možnosti lokalne implementacije OpenCV. V ospredju so različne funkcionalnosti, kot sta iskanje predmetov in prepoznavanje predmetov pa tudi prepoznavanje obrazov v živi sliki. Pri tem spomnimo, da je prepoznavanje obrazov vgrajeno tudi v vzorčno AI-Thinkerjevo aplikacijo za ESP32-CAM, ki jo najdemo tudi med osnovni primeri Arduino podpre za ESP32 module.
Nadaljevali bomo s programiranjem odprtokodne pametne ure LILYGO T-Watch 2020 v3, ki je namenjena vsem tistim, ki želijo svoje znanje Arduino programiranja smelo preizkusiti v vsakdanjem življenju. Odgovorili pa bomo tudi na vprašanji, kako programiramo ESP32 pametno uro in kako samo izdelamo domofon.
Računalniški vid z OpenCV in ESP32-CAM
Open Computer Vision (krajše OpenCV) C-jevska programska knjižnica vsebuje številne funkcije za računalniški vid. Razvijati so jo začeli leta 1999, od avgusta 2012 pa za njen razvoj skrbi neprofitna organizacije OpenCV.org. Izvorno kodo knjižnice najdemo na GitHubu (github.com/opencv), a jo je preveč, da bi jo lahko namestili v IoT napravo, kakšna je ESP32-CAM. Slednja lahko namesto tega OpenCV uporablja kot javno ali zasebno storitev.
Kakorkoli, programska knjižnica OpenCV skriva pravo bogastvo najrazličnejših funkcij, ki pridejo še kako prav pri snovanju naprav z računalniškim vidom, med katerimi so tudi nevronske mreže, s pomočjo katerih se lahko umetno-inteligenčni sistemi učijo novih asociacij, na podlagi katerih se nato lahko kakovostneje odločajo. Prenos programske knjižnice iz interneta sicer ni zahteven, zato pa moramo pred njenim prevajanjem zagotoviti razvojni okolje, ki poleg standardnega prevajalnika za C/C++ vključuje tudi programske jezika Python, Java, Java Script in namestiti programsko orodje Cmake, ki splošne skripte za pripravo programskih podknjižnic in številnih primerov za eno izmed razvojnih okolij za izbran operacijski sistem. Microsoftovih Windows je to vsekakor priljubljeni Visual Studio Community, ki ga lahko zastonj namestimo iz Microsoftovih spletnih strani za razvijalce. Zadnja različica je Visual Studio 2019 Community. Povejmo še, da prevajanje OpenCV ni ravno, ekspresno in traja kakih 10 minut.
Iskanje predmetov v sliki
ESP32-CAM zmore sliko s kamere pri nizkih ločljivostih, kot je 320 x 200, sproti procesirati. Originalni AI-Thinkerjev algoritem ima vgrajeno podporo za iskanje in razpoznavanje obrazov v živi sliki, ki temelji na sprotnem procesiranju zajetih slik in deluje le pri nižjih ločljivostih. Vendar veliko zanimivih primerov najdemo tudi na GitHubovih straneh nekaterih drugih programerjev in programerskih timov. Pri tem mnogi na lastnih spletnih straneh objavijo navodila za uporabo, izvorno kodo pa odložijo na GitHubu. Tako najdemo primer sledenja raznobarvnim predmetom ESP32-CAM-OpenCV-js na RandomNerdTutorials.com/esp32-cam-opencv-js-color-detection-tracking, kjer je objavljen tudi naslov GitHubove spletne strani razvijalca, ki poleg omenjenega ESP32-CAM-OpenCV-js vsebuje še nekaj drugih zanimivih primerov uporabe ESP32-CAM modula. Posebnost primera sledenja predmetom je tudi uporaba programskega jezika Java Script, ki se preko spletnega brskalnika izvaja na oddaljenem strežniku docs.opencv.org. Zato mora imeti računalnik, na katerem predvajamo spletno stran aplikacije ESP32-CAM modula obenem tudi aktivno povezavo v internet. Slike se namreč obdelujejo na omenjenem oddaljenem strežniku. Moram priznati, da bi bil sam veliko bolj zadovoljen z lokalno aplikacijo, ki bi tekla zgolj na ESP32-CAM modulu ali na odjemalskem PC-ju oziroma pametnem telefonu, tako pa se živa slika s kamere prenaša na oddaljeni strežnik, ki jo sproti obdeluje. Procesorsko breme ESP32-CAM modula je tako veliko manjše, a to pogosto ne zadosti zahtevi po varovanju osebnih podatkov. Res pa je, da tako za sledenje predmetov avtorjem ni potrebno napisati lastnega programa za ESP32-CAM modul.
Ocenjevanje oddaljenosti predmetov
Ko imamo možnost spremljanja pozicije predmeta, lahko njegovo oddaljenost od kamere ocenimo glede na velikost modrega pravokotnika, v katerem je predmet, kar velja pod pogojem, sistem za sledenje predmetom pravilno sledi le enemu predmetu. Pri določanju oddaljenosti predmeta na osnovi žive slike s kamere je v veliko pomoč stereoskopski vid, za katerega potrebujemo dve sistem dveh medsebojno horizontalno razmahnjenih kamer (glej sliko). Pri tem moramo vsak predmet na sliki najprej razpoznati in mu določiti velikostni okvir, nakar lahko iz razlik med slikama obeh kamer ocenimo tudi razdaljo do premeta. A tudi sistem dveh kamer še vedno potrebuje umerjanje pri dveh ali več referenčnih razdaljah. Nekaj podobnega podzavestno počnemo tudi ljudje, saj približno poznamo velikost posameznih stvari, ki jih vidimo. Več o določanju oddaljenosti predmetov iz žive slike lahko preberete na: github.com/LearnTechWithUS/Stereo-Vision.
Samodejno prilagajanje kamere svetlobnim pogojem
Zanimiva je tudi možnost samodejnega prilagajanja nastavitev kamere svetlobnim pogojem. Uporabniški vmesnih originalne aplikacije za ESP32-CAM nam odpre celo paleto svetlobnih nastavitev. Vendar mikrokontroler v Omni Visionovi kameri samodejno prilagaja le nekatere. Če želimo izboljšati prilagajanje delovanja kamere svetlobnim pogojem, moramo implementirati še dodatne samodejne prilagoditve, ki ustrezajo detektiranim svetlobnim pogojem.
Pri tem ima ESP32-CAM na voljo tudi svetilno LED, s katero lahko v slabih svetlobnih pogojih dodatno osvetli manjši prostor. Zato je merjenje natančno osvetlitve še kako pomembno. Lahko bi uporabili fotodiodo, ampak enak učinek lahko dosežemo tudi s preprostim algoritmom, ki izračuna povprečno vrednost osvetlitve vseh točk na sliki nizke ločljivosti, kar je ekvivalentno kot če bi imeli eno veliko fotodiodo. Zanimivo pa je, da so se nekaterih samograditelji raje odločiti za strojno rešitev in v svoja vezja poleg ESP32-CAM vgradili tudi fototranzistorje in fotodiode, saj jim tako ni bilo potrebno spreminjati programske kode.
Kako namestiti OpenCV v Microsoft Windows?
Spoznali smo dobrote programske knjižnice OpenCV, ki jih iz ESP32-CAM in ESP32-EYE uporabljamo prek javnega OpenCV.js strežnika. Če nočemo posredovati svojih podatkov v splet, moramo programsko knjižnico namestiti v svoj odjemalski računalnik, ki preko Wi-Fi povezave zajema podatke iz ESP32 kamere in jih sproti obdeluje z OpenCV.js funkcijami. Predpogoj je namestitev OpenCV knjižnice, nakar namestimo še OpenCV Java Script strežnik, ki ga lahko uporabljamo iz IoT naprav.
Najprej namestimo Visual Studio Communitiy, pri katerem najprej izberemo »Custom«, v naslednjem oknu pa s kljukicami izberemo še Visual C++, Python Tools for Visual Studio in Microsoft Web Developer Tools. Naslednji korak je nameščanje CMake, katerega namestitev prenesemo iz spletne strani cmake.org/download. Pri namestitvi moramo izbrati eno od možnosti »Add CMake to the system PATH … «. Sledni namestitev programskega jezika Python iz distribucija Anakonda 3 (continuum.io/downloads#Windows). Med namestitvijo izberemo »Add Anaconda to my PATH environment variable« in »Register Anacinda as my default Python«. Zdaj lahko iz GitHuba prenesemo še izvorno kodo OpenCV (github.com/opencv/opencv/releases) in jo razširimo v izbrani imenik, ki ga bomo poimenovali OPENCV_PATH, nakar določimo imenik za izgradnjo (npr. OPENCV_PARH/build). Oba podatka vnesemo v nastavitve v grafičnem uporabniškem vmesniku CMake. Nato izberemo tudi različico Visual Studia, ki je nameščena na naš računalnik (npr. Visual Studio 14 2015 Win64). Pri različicah 4.x moramo posebej prenesti še pripadajoče dodatke oz. prispevano dodatno programsko opremo graditeljev drugih (odprtokodnih) produktov (OpenCV Contributions, na: github.com/opencv/opencv_contrib). Datoteko razširimo v isti imenik kot smo razširili OpenCV.
V naslednjem koraku izberemo še funkcionalnosti, ki jih želimo namestiti, na primer C/C++ primere. Dodamo tudi pot za Python 3. Zdaj je na vrsti priprava datotek za izgradnjo, ki jih uporabimo pri prevajanju OpenCV. Zadnji korak je dodajanje sistemskih spremenljivk operacijskega sistema v sistemu v nadzorni plošči Windows, kamor dodamo pot do binarnih datotek OpenCV (npr. OPENCV_PATHbuildinstallx64vc14bin, če uporabljamo Visual Studio 2015). Ustvarimo tudi novo spremenljivko OPENCV_DIR, v katero vnesemo pot do izgradnje OpenCV.
Zdaj se lahko lotimo testiranja namestitve OpenCV. Eden izmed zanimivih primerov je primer, programske kode, s katero iz z bliskavico posnetih fotografij odstranimo t.i. rdeče oči. Izvorna koda je na voljo na filepicker.io/api/file/XV6a0s3HQ3ybXXhRNvVy. Izvedljivo datoteko removerRedEyes.exe zgradimo takole: cmake –build – config Release..
Kako namestiti OpenCV.js v svoj računalnik?
Prvi korak je namestitev Emscripten interpreterja za Java Script, ki ga lahko prenesemo iz: https://github.com/emscripten-core/emscripten. Pri tem si lahko pomagamo z orodjem git ali pa ročno naredimo sliko trenutne različice v datoteko *.ZIP, oziroma prenesemo že preverjeno izdajo Emscripten. Naslednji korak je prenos izvorne kode OpenCV in njeno razširjanje v izbrani datotečni imenih, kar smo že naredili v prejšnjem koraku. Zato se lahko lotimo izgradnje OpenCV.js, ki jo takole začnemo iz ukaznega okna:
emcmake python c:opencvplatformsjsbuild_js.py
build_js
Naslednji korak je testiranje namestitve, s čemer preverimo, ali so vse funkcionalnost pravilno zgrajene in ali bomo lahko namesto spletne storitve z ESP32-CAM poslej uporabljali svojo lokalno namestitev OpenCV.js. Naj obenem opozorim le, da je je potrebno za uporabo lokalne namestitve v izvorni kodi ugnezdene programske opreme za ESP32-CAM spremeniti pot do OpenCV.js, ki je originalno nastavljena na javno spletno storitev. Denimo v primeru, ESP32-CAM-OpenCV.js, to storimo v datoteki index_OCV_ColorTrack.h, v kateri popravimo (odebeljen) spletni naslov v naslednji vrstici:
<script async src=”https://docs.opencv.org/master/
opencv.js” type=”text/javascript”></script>
Video zvonec in video domofon
Domofoni so neprimerno bolj zapleteni za implementacijo od preprostih video zvoncev, saj nam prišlek prek video zvonca ne more ničesar sporočiti, lahko pa ga vidimo, medtem ko video domofon prenaša tako živo sliko kot zvok.
ESP32-CAM modul lahko brezžično prenaša živo sliko, vendar moramo pri domofonu prenašati tudi zvok. Zato bomo raje uporabili kar ESP32-EYE modul z vdelanim mikrofonom, ki je po drugi strani brez ležišča za SD kartico. Domofon potrebuje le še tipko za »zvonec«, s katero prišlek pri vhodnih vratih sproži zvonjenje. Slednje ni težko narediti, saj lahko signal vežemo na IO15, oziroma na mikrotipko SW3, ki je že vgrajena na tiskano vezje. Če je to potrebno, lahko iz mikrostikala potegnemo dvožilni kabel do večje tipke za zvonec.
ESP32-EYE je torej odličen oddajnik avdio in video signala, pri čemer zaznava tudi tipko za zvonec. Kaj je pa na drugi strani? Kot notranjo enoto domofona z barvnim grafičnim prikazovalnikom lahko uporabimo katerega od običajnih Raspberry Pi, ki ima vgrajen priključek za digitalni prikazovalnik, hkrati pa ima tudi analogni avdio izhod za zvočnik in analogni avdio vhod za mikrofon. Namesto analognega mikrofona lahko prek priključka USB vežemo tudi digitalni mikrofon. Zdaj potrebujemo le še vgrajeno programsko opremo za ESP32-EYE in aplikacijo za Raspberry Pi.
No tu pa se malo zaplete, saj je večina avtorjev spletnih projektov izdelala zgolj zvonec s kamero, ne pa tudi domofona (angl. intercom). Ko nekdo pozvoni, ga lahko prek pametnega telefona vidimo in mu po želji odpremo vrata, ne moremo pa se z njim pogovoriti, kot pri domofonu, ki je običajen del opreme stanovanjskih blokov. Zato vsekakor ne smemo biti presenečeni, da večina avtorjev projektov zvoncev s kamero uporablja ESP32-CAM modul, ki nima mikrofona. Obenem nekateri celo predlagajo, da poleg ESP32-CAM s tipko za zvonec vzporedno prožimo še klasičen zvonec, saj tako v primeru nedelovanja ESP32-CAM prišlek vseeno lahko pozvoni na naših vratih, ne moremo pa ga videti.
Zanimivo je tudi, da se večina avtorjev zvoncev s kamero ne ukvarja toliko s programsko opremo, kot s tem, kako izdelati všečno in dovolj vodoodporno ohišje za tipko s kamero. Mnogi pri svoji projektih uporabljajo vnaprej izdelane odprtokodne programske okvire, kot je v Pythonu napisani ESPhome (https://smartsolutions4home.com). Pri tem je pomembno le, da rešitev vsebuje tako aplikacijo za pametni telefon kot vgrajeno programsko opremo za ESP32-CAM modul.
Programiranje LILYGO T-Watch 2020 v3
O ESP32-CAM modulu smo že toliko napisali, da je skrajni čas, da se lotimo še kakega projekta. Čeprav večina proizvajalcev pametnih ur skriva izvorno kodo, kakor tudi električne sheme svojih velikoserijskih izdelkov, so se pri kitajskem LILYGO (lilygo.cn) odločili za odprto arhitekturo in odprto vgrajeno programsko opremo. Tako je LILYGO T-Watch postal odličen poligon za vsakodnevno preizkušanje lastne vgrajene programske opreme ter uporabnosti, zanesljivosti in vzdržljivosti raznolike strojne opreme, ki je vgrajena v pametno uro. V dražje modele je vgrajen celo GPS sprejemnik, s katerim lahko zemljevidu vselej poiščemo svojo lokacijo, ne da bi za to potrebovali namenske navigacijske naprave, mikrofon za glasovno upravljanje, infrardeči sprejemnik, s katerim lahko lovimo signale daljinskih upravljalnikov, 3-osni merilnik pospeška, ki zaznava naše gibanje in omogoča npr. štetje korakov, ko hodimo. Še več! Pametno uro lahko uporabljamo celo kot enostavno igralno konzolo, ki spominja na tiste iz osemdesetih let preteklega stoletja.
Kakorkoli, ura vseeno ni ravno majhna, niti najbolj poceni, saj stane med 40 in 50 EUR; vendar ponudi paleto različnih tipal, med katerim je tudi mikrofon za snemanje zvoka. Barvni prikazovalnik premore 160 x 80 pik, kar v primerjavi z zaprtokodnimi izdelki drugih proizvajalcev ni nekaj izjemnega. Čeprav pogrešamo tudi kamero, ne smemo pozabiti, da imamo pred sabo odprtokodni izdelek, s katerim se lahko naučimo programirati sodobne mikrokontrolerje in periferno strojno opremo zanje. Arduino razvojno okolje je odlična »odskočna deska« tudi zato, ker je so zanj že na voljo odlične programske knjižnice za raznovrstne periferne naprave. Zato se nam pri njihovem programiranju ni potrebno ukvarjati z implementacijo komunikacijskih protokolov in osnovnih funkcij za risanje in pisanje po barvnih digitalnih zaslonih.
Vgradnja nove vgrajene programske opreme
LILYGO T-Watch 2020 v3 ima vgrajen Silicon Labsov CP2104 most iz USB na RS232, ki v celoti implementira RS232 vrata vključno s standardnimi kontrolnimi signali, od katerih sta pri Arduino razvojnem okolju dva uporabljena za samodejno krmiljenje EN in GPIO0, s katerima lahko ESP32 modul ponovno zaženemo in preklopimo v način za programiranje, ne da bi za to potrebovali dodatni tipki. Tak način delovanja omogoča le novejši modeli T-Watch 2020, medtem ko imajo ostali za EN in GPIO0 na ohišji vgrajeno dve mikro stikali, s katerima jih resetiramo in prestavimo v način za programiranje. LILYGO T-Watch 2020 v3 lahko z originalno vgrajeno programsko opremo programiramo tudi prek Wi-Fi povezave, pri čemer žična povezava ni potrebna.
Najprej moramo po navodilih proizvajalca iz spleta prenesti in namestiti Arduino programsko razvojno okolje ter prenesti izvorno kodo aplikacije iz spletne strani lilygo.cn. Zdaj lahko izvorno kodo prevedemo in prenesemo v pametno uro. K sreči je v uro že vgrajen RS232 most/programator, ki ga z osebnim računalnikom povežemo prek USB kabla. Omenim še, da je v uro vgrajena vtičnica micro USB, ki je prekrita z zaščitnim pokrovčkom, ki ga pred programiranjem odstranimo, nato pa namestimo nazaj.
Povejmo še, da lahko celotno izvorno kode in opise posameznih komponent pametne ure prenesemo iz spletne strani github.com/Xinyuan-LilyGO/TTGO_TWatch_Library. Iz spletne strani github.com/Xinyuan-LilyGO lahko prenesemo izvorno kodo tudi za druge izdelke LILYGO. A vseeno zaenkrat ostanimo pri pametni uri. Za LILYGO T-Watch 2020 v3 lahko na YouTube najdemo tudi številne izobraževalne videe, ki nas popeljejo v svet programiranje ESP32 modulov in periferije.
Tisti, ki se jim zdi programiranje v Arduino razvojnem okolji v programskem jeziku C/C++ prezapleteno, lahko v PictoBloxu programirajo tudi z vizualnim sestavljanjem programskih stavkov. Programske gradnike za PictoBlox najdemo datotekah *SB3 najdemo na GitHubu. Novi gradniki omogočajo sestavljanje programov za vse različice T-Watch pa tudi njivo programiranje.
LILYGO TTGO T-01C3 krmilnik relejev preko HTML strani in spletne storitve
S krmiljenjem relejev prek Wi-Fi si lahko poenostavimo ali avtomatiziramo marsikatero hišno opravilo. Razvojna ploščica LILYGO T-01C3 sicer ni nič posebnega, saj ima le devet priključkov: GPIO2, GPIO9, GPIO8, RX (RS232 sprejemni podatki), TX (RS232 oddajni podatki), RST (povezan z EN na ESP32 modulu), GND, 3V3 (za napajanje s +3,3 V). Čeprav je modul na moč podoben prvim ESP8266 modulom, ima kljub temu zmogljivejši mikrokontroler (kot ga imajo ostali ESP32 moduli). Ima vgrajeno anteno, hkrati pa tudi vtičnico za zunanjo anteno, ki s katero lahko izboljšamo sprejem in oddajo signala. Med primeri uporabe sta primer krmiljenje releja prek spletne strani in primer aktivacije globokega spanja, s katerim maksimalno zmanjšamo porabo energije. Slednje je uporabno predvsem, če imamo baterijsko napajanje.
Še nekaj o primeru krmiljenja releja! Aplikacije za Arduino razvojno okolje vsebuje stavek za pogojno prevajanje. Če med začetnimi definicijami programa navedemo tudi #define WIFI_STA_MODE, se T-01C3 poveže z obstoječo Wi-Fi dostopno točko, sicer pa ustvari lastno dostopno točko. Rele krmilimo prek enega od razpoložljivih GPIO (2,9 ali 8), kar definiramo takole: #define RELAY_PIN 9. Medtem, ko je na razvojni ploščici prek GPIO3 vezana zelena svetleča dioda, ki jo lahko uporabimo za indikacijo delovanja.
Primer, ki sicer ne bi bil nič posebnega, je zanimiv zaradi enostavno razumljive programske kode, ker podpira krmiljenje prek HTML in WS (web service), uporablja mDNS storitev, dogodke in web sockete pa tudi zato, ker ga lahko apliciramo skoraj na poljubno razvojno ploščo z ESP32 modulom.
Primer dokaj enostavno razširimo tudi na krmiljenje več relejev. Opozorimo le še na to, da za krmiljenje releja ali relejev potrebujemo še ustrezno ojačevalno vezje, denimo ULN2803. Primer električne vezave si lahko ogledate v tretjem nadaljevanju v SE299, kjer je objavljen načrt krmilnika modela traktorja z dvema ESP32 moduloma. Modul lahko programiramo prek Wi-Fi z OTP, a kot kaže, ga ni več mogoče kupiti. Zato pa najdemo na spletnih straneh LILYGO številne zmogljivejše relejske module, kot je LilyGo-T-Relay, za katerega primer z lahkoto prilagodimo.
LILYGO TTGO T-Relay modul
Je vsekakor veliko bolj dodelan relejski modul z vgrajenimi štirimi 5-voltnimi releji, ki so z ESP32 modulom povezani prek optičnih spojnikov, kar zagotavlja visoko stopnjo varnosti. Modul lahko upravljamo prek Wi-Fi povezave in aplikacije DASH V3 na pametnem telefonu. Predpogoj je, da v ESP32 modul namestimo aplikacijo Blynk. Nato v DASH V3 prek grafičnega vmesnik določimo funkcije GPIO priključkov in njihovo delovanje. Preveč preprosto? No, namesto navedenega lahko prilagodite aplikacijo za TTGO T-01C3 krmilnik in releje upravljate brez kompleksnih spletnih storitev.
LILYGO TTGO T-Ethernet-POE modul
T-Ethernet-POE modul s številnim priključki je namenjen zahtevnejšim, morda celo profesionalnim uporabnikom. Napaja se lahko prek USB-C priključka ali pa prek Ethernet kabla. Za napajanje prek slednjega potrebujemo tudi ustrezni omrežno opremo, ki je navadno doma nimamo. A nič ne de, saj danes ustrezen napajalnik in priključni kabel dobimo že skoraj v vsaki tehnični trgovini. Morda vseeno velja opozorilo, da so nekateri trgovci mastno zasolili cene kablov, zato vsekakor ne kupujte takega, ki stane več kot 10 EUR. Če vam je to preveč, se lahko malo potrudite, poiščite ustrezna mesta na tiskanini in dvožilni napajalni kabel preprosto neposredno prispajkajte, ali pa v kateri od svetovnih spletnih trgovin naročite samo priključni konektor za spajkanje.
Glede spajkanja napajalnih vodov za +5 V je smiselno z alfa nožkom olupiti PCB povezavo med levo in desno stranjo USB-C konektorja in nanjo prispajkati vodnik z +5 V napajanje, maso lahko prispajkamo na okrov ležišča za mikro SD kartico (glej sliko).
Sicer je modul nekaj posebnega tudi zato, ker združuje Ethernet vmesnik in Wi-Fi vmesnik. Zato lahko na njegovi osnovi zgradimo Wi-Fi dostopno točko, prek katere iz Wi-Fi dostopamo v ožičeni Ethernet. No, sam sem kot tak vmesnik uporabil kar spletni radio z Ethernet priključkom, ki sem mu za ta namen zamenjal vgrajeno programsko opremo in brezhibno deluje še danes. Več na sites.google.com/site/pcusbprojects.
Kakorkoli, z LILYGO TTGO T-Ethernet-POE modulom se boste izognili mukotrpnemu povezovanji priključkov med ESP32 modulom in LAN8720A vmesnikom, hkrati pa bo manj možnosti, da vmesnik med Ethernet in Wi-Fi preneha delovati zaradi izpuljenega kabla ipd. Pri T-Ethernet-POE modulu zmoti le, da nima vgrajene miniaturne vtičnice za zunanjo anteno. Kljub temi pa lahko antenski kabel za 2,4 GHz anteno neposredno prispajkate, če PCB anteno z alfa nožkom spremenite v antenski priključek. Podrobnosti si oglejte na sites.google.com/site/pcusbprojects.
Programiranje LILYGO TTGO T-Ethernet-POE modula
Modul nima vgrajenega mostu/programatorja iz USB na TTL RS232, ampak ga prek USB-C priključka le napajamo. Je pa na tiskanini priključek P1, na katerega lahko prispajkamo ustrezno vezje. Odločil sem se, da bom uporabil kar PIC32 most/programator, ki smo ga spoznali v preteklem nadaljevanju v SE301. Izdelati sem moral le ustrezen žični vmesnik, s katerim sem z mostom/programatorjem povezal signale RXD0, TXD0, GPIO0, EN in GND. 3,3-Voltnega napajanja na priključku 6 ni potrebno povezati, saj ima PIC32 most/programator svoje napajanje.
A priklop programatorja ni čisto trivialen. Razmik med šestimi kontakti priključka P1 na PCB je za okoli 25% manjši od standardnih 2,54 mm. Zato ne moremo enostavno prispajkati običajne enovrstične lestvice s šestimi stebričnimi kontakti. Šesti kontakt je +3,3 V in ga nisem potreboval. Namesto tega sem raje nekako ukrivil kontakte lestvice s petimi kotankti. Trik je vstavitev lestvice z daljšo stranjo v priključek P1 na PCB tako, da se stebrički prerinejo skozi 5 skoznikov priključka (6 za maso ostane prazen) v obliki pahljače. Nato vse stebričke v pahljači poravnamo navpično navzgor in stranska, ki je gledata iz luknjic še enkrat potisnemo navzdol. Pomembno je, da so vsi stebrički na koncu na vrhu poravnani in ga vsi gledajo skozi luknjice za cca. 1 mm. Nato jih lahko prispajkamo. Vendar postopek izdelave konektorja z 2,54-milimetrskim razmikom s tem še ni končan. Na koncu moramo še plastični distančnik med stebrički nekoliko pomakniti navzdol in obrezati z vrha, tako, da spet dobimo dovoljšnjo višino kontaktov. Plastični distančnik se pri tem upogne v parabolo, ki jo je treba potisniti navzdol in na sredini nekoliko zožiti, vendar ne pretiravajte. Distančnik je dovolj zožiti za kak milimeter. Kakorkoli, namesto navedenega lahko naročite konektor s pravim razmikom kakor tudi ustrezno vtičnico.
Naslednji korak je bila preverba povezav med ESP32 modulom in LAN8720A čipom, saj je sem moramo v skladu s tem prilagoditi obstoječo vgrajeno programsko opremo Wi-Fi – Ethernet usmerjevalnika. Naj omenim še, da je priloženi primer programske kode za T-Ethernet-POE modul v Arduino razvojnem okolju preveč enostaven, da bi ga bi se ga splačalo dopolniti z želeno funkcionalnostjo mostu med Ethernetom in Wi-Fi. Namesto tega sem se predelave lotil v Espressif Systemsovem razvojem okolju IDF, v katerem sem priredil tudi programsko opremo za moj prvi Wi-Fi – Ethernet usmerjevalnik na osnovi spletnega radija. Več preberite na sites.google.com/site/pcusbprojects.
Prihodnjič
Prihodnjič nas bo zanimalo, kako priključiti in sprogramirati cenen barvni TFT grafični prikazovalnik, ki je brez običajnega PCB substrata. Kako nabaviti prikazovalnik? Kako pod lupo ali mikroskopom povezati miniaturne kontakte? Lotili se bomo tudi preizkušanja med graditelji Arduino projektov priljubljenega barvnega 1,25-inčnega prikazovalnika, za priklop katerega ne potrebujemo kakih posebnih spretnosti spajkanja, zadošča pa tudi povsem običajen spajkalnik z 1-milimetrsko konico. Lotili se bomo tudi izdelave mini vremenske postaje z barvnim prikazovalnikom in merilniki temperature, zračnega tlaka in relativne zračne vlažnosti. Za povezovanje zunanjih modulov in prenos podatkov v PC ali pametni telefon bomo uporabili Wi-Fi omrežje…