ESP8266 Wi-Fi moduli, kot majhna, enostavna in učinkovita 32-bitna osnova za gradnjo naprav in sistemov interneta stvari (IoT), že leta burijo domišljijo programerjev. Čeprav so novi navadno predprogramirani kot brezžični Wi-Fi modemi, jih lahko z lastno programsko opremo spremenimo v samostojne krmilnike enostavnih IoT naprav.
V preteklem nadaljevanju smo si ogledali zgradbo zelo zmogljivega in svojevrstnega procesorja Tensilica L106 v jedru ESP8266 modulov in nadaljevali s primeri njegove uporabe, pri čemer smo največ časa namenili delu s spletnim strežnikom. Tokrat se bomo posvetili konkretnim problemom in razmišljali o domačih projektih, pri katerih bi lahko koristno uporabili ESP8266, še prej pa bomo nadgradili spletni strežnik za kakovostnejše prikazovanje spletnih strani, bogatih s slikovnim gradivom. Nato se lotimo nadgradnje daljinsko vodenega modela traktorja za uporabo v IoT.
Avtor: dr. Simon Vavpotič
2020_285_37
Posodobljeni napredni spletni strežnik
Ta vsebina je samo za naročnike
Celotno izvorno kodo prenovljenega spletnega strežnika s podpro za SD kartico lahko prenesete iz spletne strani sites.google.com/site/pcusbprojectsdownloads v datoteki ESP8266_SDcard_WEBServer_DEMO.zip. Pred prvim zagonom ESP8266 z novo vgrajeno programsko opremo na SD kartico naložite vsebino svoje spletne strani, ki se mora začeti z datoteko index.html.
Omenimo še to, da lahko ESP8266 hkrati deluje strežnik in odjemalec. Naprednemu spletnemu strežniku sem tako poskusno dodal še nekoliko prilagojeno funkcionalnost odjemalce za telnet omrežja, ki ga bomo v tokratnem nadaljevanju uporabili za upravljanje daljinsko vodenega modela traktorja. Podrobnosti si lahko ogledate v primeru ESP8266_SDcard_WEBServer_TelnetClient_DEMO.zip. Več o tem prihodnjič, glej program 1.
IoT model traktorja
Robotiki začetniki navadno kupijo namensko strojno osnovo za gradnjo takega ali drugačnega raziskovalnega robota, redko pa vidijo potencial v ponovni uporabi katere od neuporabnih daljinsko vodenih igrač, ki ima lahko celo kakovostnejšo mehaniko. Za robotsko osnovo tako res porabijo manj časa, a mnogi obupajo, ko morajo več izvirnosti pokazati pri naboru tipal in izdelavi krmilnih algoritmov. Ko preganjamo koronadolgčas in je dostava po spletu naročenih elektronskih komponent upočasnjena, popravilo in nadgradnja sicer neuporabne igrače sploh ni slaba zamisel… Z vgradnjo novega krmilnika na osnovi ESP8266-13 bomo popravili motoriziran model traktorja s prikolico, ki je po odpovedi daljinskega upravljalnika nesrečno obležal v omari. Poleg novega krmilnika mu bomo dodali še tipalo za napetost, da bomo vedeli, koliko energije je še v bateriji. Z dodatkom ESP32-CAM bomo vzpostavili spletni video strežnik za prenos žive slike iz robota. Za zajem slike bi lahko uporabili tudi dodatni ESP8266, ki bi mu dodali ArduCAM modul. Kljub temu pa se ArduCAM splača le, če želimo snemati statične slike visoke ločljivosti, vse do 5 milijonov točk. Za več si raje omislimo sonyjevo kamero za Raspberry Pi, ki ima hkrati več kot dovolj priključkov za krmiljenje raziskovalnih robotov, a je energijsko precej bolj požrešen. Kakorkoli, cenovno je za prenos žive slike ESP32-CAM daleč najugodnejši.
Zamenjava krmilnika z ESP8266
Realistični model velikega traktorja z lopato bi gotovo prej ali slej končal v smeteh, če ne bi pred časom odkril zanimive lastnosti cenenih krmilnih čipov za daljinsko vodenje, kot je Silan Microelectronicsov RX-6BS, ki ga na daljavo upravljamo s čipom TX-6BS. Čeprav pokvarjen daljinec traktorja ni dal ničesar od sebe, je traktor začel »živčno« in precej nenadzorovano premikati svoje tri motorje za pogon, zavijanje in upravljanje lopate, ko sem uporabil nezdružljivega daljinca ene od drugih igrač, ki prav tako deluje pri frekvenci 27 MHz. RX-6BS je več kot očitno napačno interpretiral ukaze. Na spletu sem nato našel specifikacijo čipov TX-6BS in RX-6BS, ki je hkrati ustrezala zgradbi originalne tiskanine v traktorju. Z daljincem na osnovi novega TX-6B bi skoraj gotovo lahko vodil traktor, a to bi bilo dolgočasno. ESP8266-13 je poceni vstopnica v IoT, ki omogoča veliko več, celo programiranje gibanja traktorja v popularnem grafičnem programskem jeziku Scratch.
ESP8266-13 potrebuje za poganjanje krtačnih elektromotorjev igrač tranzistorske mostičke s po štirimi močnostnimi tranzistorji in po dvema krmilnima tranzistorja, ki odpirata po en par močnostnih tranzistorjev. Električni tok, ki lahko doseže tudi 1 A, tako motor zavrti naprej ali nazaj. Hitrost vrtenja motorjev lahko določimo z impulzno-širinsko modulacijo (PWM), pri čemer robotizirani model deluje veliko bolj realistično kot pri krmiljenju le s polno hitrostjo (brez PWM), ki ga omogoča originalni krmilnik. Obenem lahko traktorsko vožnjo po prostoru zdaj tudi vnaprej sprogramiramo z višjimi programskimi jeziki, kot so: Scratch, Logo, Python, Visual Basic, C/C++ idr. Dovolj je, da znamo brati in pošiljati podatke prek Wi-Fi s telnet protokolom za zaporedni prenos podatkov (podobnim RS232), za kar večinoma potrebujemo le ustrezno programsko knjižnico, pri Scratch pa ustrezno programsko razširitev, ki jo lahko na osnovi programskega jezika Java in dokumentacije iz Githuba razvijemo sami.
Razstavljanje in sestavljanje
Razdiranje in sestavljanje modela traktorja je za marsikoga zapleteno, saj je proizvajalec uporabil vijake različnih tipov; odlično pa je da ni uporabil lepila. K sreči so krajši vijaki z ozkimi križnimi glavami uporabljeni zgolj za namestitev stranskih nosilcev mehanizma lopate, vijaki s širokimi glavami in gostim navojem pa le na štirih pregibih lopate. Ostali vijaki so enaki. Vsekakor si lahko pri razstavljanju igrače pomagamo tudi z digitalnim fotoaparatom, s katerim posnamemo razdiranje in položaje posameznih vrst vijakov. Pri sestavljanju moramo paziti, da ne zamešamo daljših vijakov s krajšimi, saj s privijanjem daljših vijakov v ležišča krajših, slednja poškodujemo ali uničimo. Programsko orodje za grafično urejanje fotografij (npr. Microsoftov Paint) je pri razdiranju vsekakor dobrodošlo, saj lahko z njim na fotografijah korakov razdiranja s puščicami in besedilom označimo vse podrobnosti in tako s sestavljanjem ne bo težav.
Lotimo se razstavljanja! Najprej odstranimo zgornji del kabine s streho, ki je zgolj zataknjen v spodnji del kabine. Nato odvijemo štiri vijake, ki držijo spodnji del kabine, pod katero sta originalna tiskanina in pogonski skop. Tiskanina je na nosilno ogrodje traktorja privita z dvema vijakoma, ki ju zlahka odstranimo, vendar moramo pri tem paziti, da ne odtrgamo katerega od osmih kablov (k sreči barvnih) za napajanje motorjev, glavno napajanje in nekoliko debelejšo FM antensko žico, ki so prispajkani neposredno na tiskano vezje. Zdaj je dobro narediti fotografijo spodnjega dela tiskanega vezja, saj si bomo tako najlažje zapomnili, na katera mesta bo morebitai treba kable prispajkati nazaj. Vsekakor ni odveč, če si pri delu pomagamo s samostoječim povečevalnim steklom z mikroelektroniko.
Lotimo se odstranjevanja krmilnega čipa RX-6BS v SMD ohišju! Odločil sem se, da mu priključke preprosto odrežem s kleščami, saj sem želel tiskanino ohraniti v kar najboljšem stanju, brez morebitnega pregretja priključkov, na katere sem želel prispajkati kable z novega krmilnika. Sicer bi za odstranjevanje potreboval posebno orodje, s katerim bi vse priključke odspajkal hkrati.
Sledi testiranje delovanja pogonskih sklopov, pri katerem ročno sprožimo posamezno funkcijo tako, da posamezen krmilni signal pritaknemo na napajanje, pri čemer se mora eden od motorjev zavrteti naprej ali nazaj (glej sliko z označenimi priključki). Motorji delujejo enako tudi, če namesto žice uporabimo 4,7 kohmski upor, kar pomeni, da krmilna tranzistorja vsakega od mostičkov za odprtje potrebujeta zelo malo toka.
Vsekakor projekta ne bi nadaljeval, če bi bilo tu kaj pokvarjeno. V omari neslavno »kraljuje« tudi model BMW 3 z pokvarjenim daljinskim upravljanjem, ki prav tako čaka na popravilo. Delujoči model traktorja je bil večja in razkošnejša robotska osnova, ki jo je lažje opremiti z dodatnimi tipali in z ustrezno programsko opremo spremeniti v avtonomnega robota.
Iz 3,3 V na 5 V
ESP8266-13 deluje pri napetosti 3,3 V (največ 3,6 V), kar je premalo za pogon motorjev. Obenem na priključkih ESP8266-13 ne sme biti višje napetosti od napajalne plus 0,3 V. Zato je nujno potreben napetostni pretvornik, za katerega sem porabil kar čip ULN2803, ki je namenjen predvsem krmiljenju relejev. Namesto relejev sem kot bremena vezal 4,7 kohmske upore proti napajalni napetosti, izhode ULN2803 pa sem nato vezal neposredno na krmilne signale tranzistorskih mostičkov za upravljanje motorjev. Za napajanje ESP8266-13 sem uporabil regulator LM317T, ki sem ga z uporoma 1,1 kohma in 680 ohmov nastavil tako, da zagotavlja konstantno napetost 3,3 V.
Za programiranje ESP8266-13 sem vgradil vtičnico s TTL priključki: GND, TxD, RxD, boot mode(GPIO0) in reset (RST). Zaradi vgrajenih uporov na priključkih GPIO0, GPIO2, GPIO15 in RST in mikrostikal, s katerima lahko tudi ročno upravljamo GPIO0 in RST, lahko za programiranje uporabimo tudi ničelno modemsko vezavo, pri kateri z vtičnico povežemo samo priključke GND, TxD in RxD USB na TTL RS232 mosta, kot je CH341, ali pa uporabimo npr. most MCP2200 iz preteklega nadaljevanja, ki omogoča digitalno krmiljenje vseh priključkov.
Naslednji korak je bil preizkus delovanja traktorja z novim krmilnikom, ki pa ni šel čisto po načrtih. ESP8266-13 rabi za lastni zagon kako sekundo, vendar je bilo to je bilo ravno dovolj, da sta se za kratek čas skušala hkrati zagnati vsaj dva motorja, napetost baterij je padla, kar je prekinilo zagon ESP8266-13, tako da je traktor »obvisel« nekem vmesnem stanju, ko se je počasi vrtel eden od motorjev in pregreval eden tranzistorskih mostičkov. K sreči sem uspel še dovolj hitro izklopiti baterije. Potem sem odklopil kriljenje pogonskega motorja nazaj in še enkrat poskusil. Tokrat je vse delovalo, le da traktor ni mogel voziti nazaj. Vendar do popolnega dizajna ni bilo daleč. Odločil sem se dodati še stikalni tranzistor p-MOSFET, ki ga prav tako krmilim preko napetostnega ULN2803. Vendar je bil za njegovo krmiljenje potreben še en priključek ESP8266-13. GPIO15 je bil idealen, saj ima že 4,7 kohmski upor, vezan na maso, ULN2803 pa je v logičnem smislu set negatorjev, kar pomeni, da 4-amperski P-MOSFET IRLML6402PbF ob zagonu ESP8266-13 ne prevaja in je motorna elektronika traktorja brez napajanja. Rešitev se je izkazala kot naravnost idealna v več pogledih. Ne le, da ima stikalni P-MOSFET v prevodnem stanju skoraj ničelno upornost (in skoraj neskončno v zapornem stanju), temveč traktor zagotovo miruje tudi pri zagonu in nalaganju nove programske opreme, pri katerih mora biti GPIO15 v nizkem stanju. Hkrati moramo za aktivacijo pogona najprej vklopiti P-MOSFET in nato še ustrezne krmilne mostičke, kar dodatno zmanjšuje možnost nehotenega premikanja motorjev tudi v primeru naložitve napačne ugnezdene programske opreme.
Ostana je le še implementacija merilnika napajalne napetosti za pogonske motorje. ESP8266 ima vgrajen 12-bitni A/D pretvornik, ki lahko meri notranje napetosti ali napetost na vhodu TOUT. Območje merjenja je majhno in znaša le med 0 V in 1 V. Zato moramo vgraditi ustrezno uporovno vezje, s katerim merilni doseg povečamo na vsaj kakih 8 V. Uporovni delilnik se splača izdelati z upori večjih vrednosti, saj s tem zmanjšamo porabo toka. Poleg 10 kohmskega upora sem uporabil še 1,8 kohmskega in 4,7 kohmskega. Za doseg od 0 do 11 V bi bil dovolj že en sam 1 kohmski upor, a sem na začetku napačno sklepal, da je merilni doseg A/D pretvornika enak napajalni napetosti ESP8266-13 (3,3 V), kot je to običajno pri mikrokontrolerjih. Vzporedna vezava 4,7 kohm in 1,8 kohm da upornost 1,3 kohma, kar omogoča še nekoliko manjši doseg: od 0 V do 8,69 V.
Razvoj ugnezdene programske opreme ESP8266
Razvoja ugnezdene programske opreme upravljanje modela traktorja sem se lotil po modelu odjemalec-strežnik, tako da je ESP8266 strežnik, druge IoT naprave pa so odjemalci. Naenkrat se lahko z ESP8266 poveže le en odjemalec, ki lahko s pošiljanjem ASCII alfa numeričnih znakov (ukazov) preko telnet povezave upravlja vse funkcije robota, slednji pa mu v tekstovni obliki vrača podatke o svojem stanju. Čeprav bi lahko za upravljanje traktorja izdelal tudi spletni strežnik, je omenjeni način nekajkrat hitrejši, saj je, denimo za gibanje robota naprej, dovolj prenesti znak »1«, namesto, da bi na spletnem strežniku osveževali vsebino spletne strani, za kar je potrebno prenesti tudi 1000 ali več bajtov. Primer spletnega strežnika za krmiljenje električnih porabnikov si lahko ogledate v drugem nadaljevanju. Kakorkoli, od telnet povezave do aplikacije v višjem programskem jeziku v operacijskem sistemu Windows, Android ali Mac OSX je zgolj majhen korak, vsekakor pa ne manjka tudi gotovih aplikacij.
Odločil sem se tudi, da bo ESP8266 samostojna dostopna točka, kar traktorju zagotavlja neodvisnost od obstoječe omrežne infrastrukture ter omogoča lastna SSID in geslo, kar je dodatni faktor varnosti. Telnetni strežnik sicer ni nič posebnega. Krmini računalnik se z njim poveže prek standardiziranih vrat 23, pri čemer traktor vrne seznam razpoložljivih ukazov, če pošljemo znak »?«. Ker se v prvem koraku nisem odločil za razvoj lastne krmilne aplikacije za Windows in/ali Android, sam namesto tega razporedil ukaze na tipke standardne tipkovnice (navadne ali virtualne), ki je na voljo tudi v odjemalskih programih za telnetne povezave, kot je Terminus za Android. Tako sem lahko natančno preveril delovanje traktorja, predem bi se lotil nekoliko zamudnejšega razvoja lastne krmilne aplikacije, o kateri več v naslednjih nadaljevanjih.
ESP8266 kot daljinski upravljalnik
Čeprav lahko traktor upravljamo tudi iz osebnega računalnika s standardnim Wi-Fi vmesnikom s programskimi orodji, kot je popularni Tera Term, je zanimiva tudi možnost razvoja lastnega vmesnika za računalnika brez vgrajenega Wi-Fi vmesnika pa tudi za primere, v katerih želimo zagotavljati višjo stopnjo varnosti. Ideja je preprosta! Potrebujemo le še en ESP8266, ki ga prek mostu iz USB na TTL RS-232 povežemo z osebnim računalnikom, lahko pa celo z nekaterimi pametnimi telefoni, ki omogočajo način USB OTG.
V odjemalski ESP8266 vgradimo programsko opremo, ki se samodejno poveže z ESP8266 v traktorju preko telneta (vrata 23) ter nato posreduje vse znake iz TTL RS-232 vmesnika telnetnemu vmesniku in obratno. Tako dobimo še en most, ki osebni računalnik prek navideznih COM vrat in Wi-Fi pripelje neposredno do telnetnega strežnika v traktorju. Zato lahko krmilno aplikacijo za osebni računalnik izdelamo preprosto tako, da namesto telneta preko Wi-Fi vmesnika uporabimo telnet preko navideznega COM vmesnika, kar omogoča tudi aplikacija Tera Term. Programer namenske aplikacije za krmiljenje traktorja v višjem programskem jeziku pa mora uporabiti ustrezno programsko knjižnico.
Čeprav komunikacija prek COM vrat ni nekaj, o čemer bi bilo vredno izgubljati veliko besed, potrebujemo zanjo v odjemalskem ESP8266 ugnezdeno programsko opremo za prenos podatkov iz Wi-Fi telenetne povezave na navidezna COM vrata in nazaj. Gre za sorazmerno enostaven kos programske opreme, v katerem najprej vzpostavimo povezavo s traktorskim ESP8266, ki je hkrati tudi dostopna točka, nato pa se odjemalski ESP8266 kot telnetni klient poveže z njegovim telnetnim strežnikom. V glavni programski zanki nato izvajamo prenos posameznih bajtov iz COM vrat na Wi-Fi telnetni strežnik in v obratni smeri. Za vse zadošča že kratek programček (glej program 2), ki se izvaja znotraj glavne programske zanke (loop) in hkrati v vsakem koraku preverja tudi, ali je povezava med klientom in strežnikom še aktivna. V primeru porušitve povezave ponovno preide na predhodni korak za njeno samodejno vzpostavljanje. V terminalskem odjemalcu na osebnem računalniku (npr. Tera Term) po vzpostavitvi povezave sprejemamo in oddajamo enake podatke kot bi jih preko odjemalca za telnet.
IoT kamera
Šele prenos žive slike zares omogoči vodenje robota na daljavo, oziroma izven našega vidnega polja. Podobno kot se roverja Spirit in Opportunity na Marsu brez kamere in drugih tipal za zaznavanje gibanja in ovir na poti ne bi znašla brez ugnezdene kompleksne programske in strojne opreme, si tudi sam brez Wi-Fi kamere traktorja gotovo ne bi upal voziti iz dnevne sobe po kuhinjski mizi. Je pa za preizkušanje brez kamere uporabna sorazmerno glasna lopata, katere delovanje je moč slišati skozi odprta vrata.
Za prenos žive slike s traktorja lahko uporabimo katerokoli od možnosti: ESP32-EYE, ESP32-CAM ter ESP32 in ESP8266, na katera kamero OV2640 na modulu ArduCAM-mini-2MP z 2 milijonoma pik (ali drugo SPI digitalno kamero) povežemo prek priključkov HSPI in I2C. Pri ESP32 lahko dodamo tudi mikrofon, ki deluje preko vodila I2S. Vendar takoj poudarimo, da ESP32-CAM in ESP32-EYE za prenos slike ne uporabljata SPI vodila za začasno shranjevanje slik in videa, ampak bistveno hitrejše 10-bitno (uporabljenih je višjih 8 bitov, bita y0 in y1 pa sta nepovezana) vzporedno podatkovno povezavo in zato omogočata tudi tekoč prenos videa tudi pri ločljivosti XGA (1024×768), a je na voljo veliko manj prostih priključkov. Ker sem imel ESP8266 module pri roki, sem nekaj časa razmišljal o nakupu ArduCAMa, a je ESP32-CAM, ki vključuje kamero, cenejši (v ZDA stane okoli 7 USD, pri nas pa je lahko tudi dvakrat dražji). ArduCAM je namenjen predvsem ljubiteljem Arduina Mega, ki kamere sicer ne bi mogli priklopiti. Omenimo še čisto novi, zmogljivejši ArduCAM-mini-5MP modul s kamero OV5640 s petimi milijoni pik, ki lahko snema statične slike in 2-sekundne videe visoke ločljivosti. Sicer je mogoče le sorazmerno počasno ponavljanje zajema posameznega posnetka, ki se (glede na videe, objavljene na spletu) spremeni v tekočo sliko le pri najnižji nizki ločljivosti, 320 x 200 pik.
Napajanje ESP32-CAM
ESP32-CAM modul ima notranje napajanje 3,3 V, vgrajen pa ima tudi napetostni regulator AMS1117, ki omogoča, da ga napajamo s 5 V, a mora pri tem podatkovna komunikacija potekati pri TTL nivojih do 3,3 V. ESP32-CAM modul lahko zato napajamo tudi iz 3,3 V traktorskega regulatorja (LM317T), ki že napaja ESP8266-13. V specifikacijah AMS1117, ki jih lahko potegnemo s spleta preberemo, da se lahko napaja iz največ 15 V enosmerne napetosti, a je priključek za njegovo napajanje na ESP32-CAM vseeno označen s 5 V. Kljub temu je glede na Ai-Thinkerjevo shemo ESP32-CAM modula malo verjetno, da bi bilo lahko karkoli narobe, če vhod AMS1117 povežemo kar na baterijsko napetost (med 4,8 V in 8,5 V). Vendar višja vhodna napetost navadno pomeni tudi večje segrevanje regulatorja. Zato ima modul ESP32-CAM na voljo tudi priključek za 3,3 V napajanje, s katerim zaobidemo AMS1117. Nekateri uporabniki sicer poročajo, da so imeli pri uporabi 3,3 V napajanja težave, vendar menim, da je pomembna predvsem stabilnost tovrstnega napajanja, ki jo brez težav zagotovimo z dovolj velikimi kondenzatorji ter dovolj zmogljivim in dovolj natančnim 3,3 V napetostnim regulatorjem.
Vgrajena programska oprema ESP32-CAM
Za začetek je dovolj, da uporabimo prednaloženo ugnezdeno programsko opremo ESP32-CAM modula s funkcionalnostjo spletnega video strežnika, lahko pa iz razvojnega okolja Arduino namestimo primer CameraWebServer. Obakrat imamo na voljo živo sliko ločljivosti do 1600 x 1200 pik, kar je vsekakor več kot dovolj za upravljanje traktorja. ESP32-CAM ima vgrajeno tudi ležišče za mikro SD kartico, pri čemer na vzporednih zunanjih konektorjih vzdolž tiskanega vezja najdemo še 10 GPIO priključkov, s katerimi bi lahko krmilili tudi traktorske motorje, če bi poprej za ta namen dopolnili strežniško aplikacijo CameraWebServer, ali vanjo združili storitev telnet. Vendar to le pod pogojem, da ne bi potrebovali mikro SD kartice, saj ta zasede 6 priključkov za hitri 4-bitni vzporedni podatkovni prenos podatkov, namesto klasičnega SPI. Tak prenos podpira večina novejših SD kartic.
Razvoj aplikacijske programske opreme za daljinsko vodenje
Pošiljanje in sprejemanje podatkov preko COM vrat je v večini višjih programskih jezikov enostavno. Denimo, v Microsoftovem Visual Basicu 2015 imamo na voljo komponento SerialPort, ki omogoča enostaven prenos različno dolgih podatkovnih blokov in znakovnih nizov pa tudi posameznih bajtov. Uporabimo jo tako, da jo preprosto povlečemo v načrtovalsko okno programa (design window), nato pa v programu uporabljamo kot objekt z metodami in lastnostmi.
Zato se moramo pri razvoju namenske aplikacije za upravljanje traktorja osredotočiti predvsem na uporabnost in intuitivnost. Še posebej dobrodošla je uporaba sodobne igralne palice, ki ne zaznava le premikov krmil igralne palice v levo, desno, nazaj ali naprej, ampak tudi, velikost odmika v posamezno smer. Tako lahko zelo natančno z različnimi hitrostmi krmilimo vse motorje. Namenska aplikacija lahko omogoča tudi lepši prikaz povratnih informacij robot, kot je podatek o napetosti na krmilnem modulu, ali podatki z drugih tipal, denimo ultrazvočnega za merjenje oddaljenosti.
Izvorno kodo vzorčne aplikacije Tractor test lahko prenesete s spletne strani sites.google.com/site/pcusbprojects v datoteki TractorTest_DEMO.zip. Na omenjeni spletni strani najdete tudi vgrajeno programsko opremo, ki sem jo izdelal za krmiljenje traktorja. Programska oprema za prenos žive slike iz ESP32-CAM je na voljo s spletnih strani razvijalcev, oziroma potem, ko v razvojno okolje Arduino s spleta dodamo module za razvoj programske opreme za ESP32. Med primeri za ESP32 je tudi CameraWebServer.
Prihodnjič
Tokrat smo model traktorja usposobili za daljinsko vodenje, prihodnjič pa ga bomo z dodatnimi tipali spremenili v avtonomnega robota. Vsekakor ima pri tem pomembno vlogo tudi programska oprema za ESP32-CAM, ki zna razpoznavati obraze. Spoznali bomo tudi, kako vzpostavimo redundantno IoT mrežo, v kateri je vsaka IoT naprava hkrati strežnik in odjemalec, pri čemer lahko deluje tudi kot komunikacijski most med drugimi IoT napravami, ki so preveč oddaljene, da bi bila mogoča neposredna komunikacijska povezava med njimi.Program 1: Dopolnitev spletnega strežnika
while ((idx=path.indexOf(»%«))!=-1){ s_str=path.substring(idx,idx+3); h_val_H=path.charAt(idx+1); // get character code h_val_L=path.charAt(idx+2); // get character code if(isHexadecimalDigit(h_val_H)&&isHexadecimalDigit(h_val_L)){ // Is a 2 digit hexadecimal number? if((h_val_H>='0')&&(h_val_H<='9')){ r_val=(h_val_H-'0');} else { if((h_val_H>='a')&&(h_val_H<='f')){ r_val=(h_val_H-'a'+10); } else { r_val=(h_val_H-'A'+10); } } r_val<<=4; // multiply by 16 if((h_val_L>='0')&&(h_val_L<='9')){ r_val|=(h_val_L-'0');} else { if((h_val_L>='a')&&(h_val_L<='f')){ r_val|=(h_val_L-'a'+10); } else { r_val|=(h_val_L-'A'+10); } } } path.replace(s_str,String(r_val)); }
Program 2: Del programske kode za prenos podatkov med telent in COM vmesnikom
if (client.available()) { char c = client.read(); Serial.print(c); } while (Serial.available() > 0) { char inChar = Serial.read(); if (client.connected()) { client.print(inChar); } }