ESP8266Wi-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 navadnopredprogramirani kot brezžičniWi-Fi modemi, jih lahkoz lastno programsko opremo spremenimov samostojne krmilnike enostavnih IoT naprav.
Zamisel o programiranju ESP8266 je stara že skoraj desetletje, vendar so pri kitajskem proizvajalcu teh miniaturnih dvočipnihmodulov z mikrokontrolerjemTensilicaDiamonsL106 in flash RAM pomnilnikom, EspressifSystems, šele v zadnjem času uredili prijazno spletno stran, na kateri so objavili tudi dovolj podrobno programersko dokumentacijo v angleškem jeziku (prej samo v kitajščini), ki jo potrebujemo za uspešno načrtovanje elektronskih vezij in programiranje. ESP8266 pa je dobil tudi precej zmogljivejše naslednike iz družine ESP32.
V preteklem smo se ukvarjali z merjenjem signalom in na osnovi ESP32 izdelali preprost osciloskop. Ukvarjali smo se kompleksnimi operacijami nas znakovnimi nizi in snemali zvok s pomočjo modula VS1053. Merili in nastavljali smo realni čas, preizkusili smo povezavo Bluetooth. ESP32 modul smo v kombinacijo z LAN8720A modulom uporabili tudi kot most med omrežji Wi-Fi in Ethernetom. Več o tem lahko preberete na spletni strani https://sites.google.com/site/pcusbprojects ali če na hackster.io poiščete projekt »ESP32 WiFi to Ethernet bridge«.
Tokrat se lotimo izgradnje vremenske postaje, raziskali bomo možnosti za hiter dostop do podatkov na SD kartici, ko si dostop do kartice delita ESP modul in Microchipov PIC mikrokontroler, ki obenem rabi tudi kot most med USB in vodilom in RS-232.
Ta vsebina je samo za naročnike
Napredna modularna vremenska postaja
Modularna vremenska postaja na osnovi PIC32 brezhibno deluje že 5 let. Zakaj je ne bi posodobili in zagotovili hitrejše, enostavnejše in kakovostnejše zajemanje podatkov? Brezžični komunikacijski moduli, kot je RFM69, so postali z ESP8266 in ESP32 nepotrebni.Wi-Fi komunikacija z IP protokolom je hkrati kodirana in tudi zanesljivejša. Kako se torej lotiti gradnje modularne vremenske postaje z ESP moduli? Osnovni načrt je enostaven, saj v osnovi potrebujemo le module ESP8266 in/ali ESP32 ter tipala za merjenje različnih vremenskih parametrov (temperatura, relativna vlažnost zraka, zračni pritisk, hitrost vetra, osvetlitev, …). Vremensko postajo sestavljajo sobne enote s prikazovalniki in oddaljene enote z zunanjimi merilniki. Spomnimo, da smo imeli vremenski postaji na osnovi PIC32 in RFM69CW modulov le eno sobno merilno enoto, pri novi porazdeljeni vremenski postaji pa jih je lahko več. Vse enote komunicirajo med sabo in tudi s pametnimi napravami in računalniki z Wi-Fi povezljivostjo. Ker govorimo o mrežnem povezovanju, lahko module vremenski postaji tudi poljubno dodajamo. Denimo, če želimo občasno meriti le zunanjo temperaturo, zadošča že ena sama zunanja merilna enota na osnovi ESP modula in pametni telefon. Je pa vsekakor udobneje, če lahko vrednosti izmerjenih parametrov sproti opazujemo na namenskem prikazovalniki sobne merilne enote, ki lahko hkrati meri tudi relativno vlažnost zraka, zračni pritisk in temperaturo v prostoru.
Mreža univerzalnih modulov
Osnova za izdelavo modulov vremenske postaje z ESP moduli je enaka, ne glede na to, ali gre za zunanje merilne enote, ali notranje merilne enote s prikazovalniki. ESP modul je stičišče, s katerim prek vodil, kot sta SPI in I2C, povezujemo različne merilnike. Za začetek sem izbral sem kar tiste, ki sem jih že uporabil pri vremenski postaji na osnovi 32-bitnega Microchip PIC32MX270F256Bmikrokontrolerja in delujejo prek vodila I2C: HP03S – merilnik tlaka in temperature, HP206C – merilnik tlaka, temperature in nadmorske višine, TH02 – merilnik relativne vlažnosti zraka in temperature ter ADT7410 – 16-bitni merilnik temperature. Kot opcijski OLED prikazovalnik sem izbral prikazovalnik s procesorjem SH1106 (oz. SH1306), ki ga lahko povežemo prek vodila SPI ali I2C, uporabil pa sem ga že tudi pri internetnem radiju.Vse omenjene periferne enote je dokaj enostavno povezati z ESP modulom z Wi-Fi povezljivostjo.Pri prikazovalniku lahko izbiramo med vodilom SPI ali I2C, kar nam bolj ustreza.Vendar potrebujemo za priklop na vodilo VSPI (tretji SPI ESP32) tudi CS signal, ki ga pri I2C ne potrebujemo. Med opcijskim perifernimi enotamije tudi LAN8720A modul, s katerim lahko eno ali več enot vremenske postaje povežemo v ožičeno ethernetno omrežje, oziroma v kabelski internet. Res pa je, da LAN8720A porabi zelo veliko priključkov, ki bi jih sicer lahko uporabil za enostavnejši priklop perifernih modulov z različnimi tipali.
Strojni vodili I2C in SPI si delita priključke, ko smo to videli pri implementaciji spletnega radija v SE287 in SE288. Slednjega lahko zato uporabimo tudi kot razvojno osnovo za module domače vremenske postaje, ali pa mi z dodatkom merilnikov HP03S in TH02 dodamo tudi funkcionalnost sobnega modula vremenske postaje.
Vendar moramo pri tem paziti predvsem na to, da z morebiti počasnimi perifernimi napravami pretirano ne upočasnimo vodil SPI in I2C ter s tem poslabšamo kakovost predvajanega zvoka. Težavo lahko predstavlja tudi kapacitivna obremenitev vodila zaradi velikega števila perifernih naprav ter nevarnost, za bi zaradi napačnega delovanja enega modula odpovedalo celotno vodilo. Do slednjega lahko pride, denimo v primerih, ko periferna naprave preneha delovati zaradi pojava statične elektrike ali visokonapetostnih električnih impulzov (npr. če bi preko daljše žične povezave povezali ADT7410).
Kakorkoli, imajo vsi moduli vremenske postaje enako osnovo, ki je podobna tisti, ki smo jo uporabili pri spletnem radiju, le da prek vodila HSPI ne povežemo samo VS1053 modula, SD kartice in zaslona, temveč tudi kak merilni modul. Po drugi strani, prej štete merilne module povežemo prek vodila I2C. Prek SPI povežemo tudi zaslon. Kaj pa vodilo I2C? Tega lahko implementiramo tudi programsko s pomočjo dveh prostih GPIO, saj je zajem podatkov iz tipal sorazmerno počasen, ali pa namesto tega priključke vodila HSPI uporabimo tudi za vodilo I2C.
Kako vodili SPI in I2C delujeta prek istih priključkov?
K razmišljanju, da lahko vse naprave SPI in I2C delujejo preko istih priključkov, v našem primeru prek tistih, ki so uporabljeni za vodilo HSPI, me je napeljala tabela razporeditve priključkov v izvorni kodi Ed Smallenburgovega primera implementacije spletnega radija. Če uporabimo SH1106 ali SH1306 OLED prikazovalnik z I2C vodilom, le tega povežemo z SCK in MOSI priključki, ki hkrati delujeta tudi kot I2C priključka CLK in SDA. Pri moji različici spletnega radija sem namesto tega uporabil SPI priklop tega prikazovalnika, ki je Edu delal težave, saj je bilo treba predelati programsko knjižnico.
Kakorkoli, za podrobnejšo razlago, zakaj si lahko naprave SPI in I2C delijo priključke, moramo pregledati razlike med protokoloma SPI in I2C. Vsaka naprava SPI mora imeti priključek CS, na katerem šele logična vrednosti »0« omogoči komunikacijo prek vodila. Tako si lahko isto vodilo deli več SPI naprav. Težje vprašanje pa je, kako naprave I2C, ki nimajo priključka CS vedo, kdaj želi gospodar vodil SPI in I2C (v našem primeru ESP modul) komunicirati z njimi.
Podatkovna komunikacija poteka pri vodilu SPI prek priključkov MISO (podatki od sužnja k gospodarju vodila) in MOSI (podatki od gospodarja vodila k sužnju) ter SCK (urini impulzi), medtem ko za implementacijo I2C potrebujemo samo priključka SDA (dvosmerni prenos podatkov) in CLK (urini impulzi). Za SCK in CLK lahko uporabimo isti priključek (SCK/CLK) pod pogojem, da lahko prek njega ustvarimo urine impulze za trenutno aktivno vodilo (SPI ali I2C). Medtem, ko lahko za prenos podatkov prek vodila I2C (priključek SDA) uporabimo SPI priključek MOSI, le da mora ta v režimu delovanja I2C podpirati dvosmerni prenos podatkov.
Zdaj moramo preprečiti le še, da bi se I2C naprave odzivale na SPI prenose podatkov. Pri omenjenih OLED prikazovalnikih, ki podpirajo tako I2C kot SPI način komunikacije,je zanimivo, da je priključek CS aktiven tudi v načinu delovanja I2C. Slednje ugotovimo s podrobnim preučevanjem programerskih navodil. Vendar pa samo I2C implementacije teh OLED prikazovalnikov nimajo izvedenega priključka CS. Po drugi strani, prej omenjena tipala vremenskih parametrov, priključka CS nimajo. Zato pa si lahko pomagamo z ustrezno implementacijo SPI protokola, kateremu dodamo pravilo, da se logičnih vrednost priključkaMOSI/SDA spreminjamo samo, ko ima priključek SCK/CLK logično vrednost nič. V tem primeru I2C naprave ne zaznajo START signala, ki ga predstavlja prehod MOSI/SDA iz logične 1 v logično ob visokem nivoju oz. logični enici na priključku SCK/CLK, kakor tudi ne STOP signala, ki ga predstavlja prehod MOSI/SDA iz logične 0 v logično 1 ob visokem nivoju priključka SCK/CLK.
Primer baznega (sobnega) modula vremenske postaje
Ali sploh potrebujemo bazno enoto vremenske postaje, je dobro vprašanje, saj lahko prek Wi-Fi neposredno dostopamo do vseh njenih modulov iz katerekoli naprave z Wi-Fi, še posebej pa iz pametnih telefonov in računalniških tablic. Vsekakor za vse potrebujemo ustrezne aplikacije za prikaz podatkov. Vendar je tak način dela dober le za sprotni prikaz vremenskih podatkov, za shranjevanje podatkov in samodejno napovedovanje vremena potrebujemo tudi bazno enoto, ki ves čas zbira in obdeluje podatke iz zunanjih modulov ter pripravlja samodejne vremenske napovedi. Prav zato je ideja nadgradnje internetnega radija z ožičeno ethernetno povezavo v centralni modul vremenske postaje več kot odlična, saj lahko izkoristimo obstoječi ESP32 modul, ki ga že uporabljamo tudi za poslušanje internetnih radijskih postaj. Internetni radio lahko vremenske podatke posreduje tudi v ožičeno ethernetno omrežje, obenem pa preko lokalnega Wi-Fi omrežja zbira podatke iz zunanjih modulov. Vgrajena SD kartica mu omogoča tudi shranjevanje vremenskih podatkov ter pripravo vremenskih napovedi. Za samostojno uporabo bazne enote vremenske postaje z internetnim radijem potrebujemo samo še menijsko programsko aplikacijo, oziroma nov zavihek na spletni strani za upravljanje internetnega radija. Pri tem je vsekakor dobrodošel rotacijski enkoder s stikalom, ki ga programska oprema spletnega radija že podpira. Natančnejši prikaz priključitve merilnikov prek I2C vodila je na električni shemi. Celotno zgradbo bazne enote vremenske postaje z internetnim radijem najdete na spletni strani https://sites.google.com/site/pcusbprojects.
Primer oddaljenega modula vremenske postaje
Oddaljeni moduli vremenske postaje merijo vremenske parametre, predvsem temperaturo in relativno vlažnost zraka na prostem in v različnih prostorih in rezultate meritev posredujejo bazni vremenski postaji. Opcijsko lahko v vsak oddaljen modul vgradimo tudi SD kartico, ki omogoča začasno shranjevanje rezultatov meritev tudi v primeru nedostopnosti ali nedelovanja baznega modula, obenem pa so shranjene vrednosti na voljo tudi pametnim napravam, ki se lahko z oddaljeno enoto vremenske postaje neposredno povežejo. Omenimo še, da ostaja princip komunikacije med oddaljenimi moduli in bazno enoto vremenske postaje enak, kar pomeni, da moduli posredujejo vremenske podatke na zahtevo bazne enote.
Zunanji merilni modul vremenske postaje je lahko nekakšna močno okrnjena različica baznega modula, saj ne potrebujemo ethernetnega LAN8720A modula, niti VS1053 avdio modula. Veliko priključkov ESP32 modula zato ostane neizkoriščenih. Prav zato lahko namesto ESP32 uporabimo tudi preprostejši in cenejši ESP8266 modul. Kot napisano, lahko opcijsko v oddaljene enote vgradimo tudi SD kartico za shranjevanje podatkov, lahko pa namesto tega uporabimo kar EEPROM ESP modula. Vendar smo pri slednjem precej omejeni s količino podatkov, ki jih lahko trajno shranimo. Po drugi strani, lahko ESP moduli za hrambo vremenskih podatkov uporabijo tudi RAM. Zadnja rešitev je najpriročnejša, vendar pomeni izgubo shranjenih podatkov v primeru izgube napajanja.
Povezavo merilnih modulov prek vodil SPI in I2C izvedemo enako kot pri baznem modulu, le da lahko uporabimo tudi VSPI vodilo, oziroma tudi drugo strojno I2C vodilo. Več vodil za povezavo merilnikov pomeni hitrejši dostop do podatkov v njih, še pomembneje pa je, da ob odpovedi posameznega vodila zaradi napake v programski oprema ali poškodbe posameznega merilnika, naprave na drugem vodilu še vedno delujejo. Ker so oddaljene zunanje enote vremenske postaje veliko bolj izpostavljene morebitnim poškodbam, hkrati pa veliko priključkov ostane neizkoriščenih lahko za vsak merilnik uporabimo tudi svoje I2C ali SPI vodilo ter napajanju dodamo zaščito pred kratim stikom ob morebitnem uničenju merilnika zaradi zunanjih dejavnikov.
Vgrajena programska oprema
V nasprotju s PIC mikrokontrolerji in razvojnim okoljem MicrochipHarmony, je za razvojno okolje Arduino na voljo kompletna podpora programskih knjižnic z primeri uporabe za vse naštete merilne periferne enote. Zato je njihova sestava sorazmerno enostavna, enako enostaven je tudi prikaz na zaslonu. Programske knjižnice lahko poiščemo neposredno na GitHubu, večino pa lahko tudi uvozimo v Arduinookolje prek menija SketchàIncludeLibrary.
Struktura programskih knjižnic je hierarhično urejena, tako da je programska knjižnica ali gonilnik za prenos podatkov prek vodila SPI ali I2C vedno na najnižjem nivoju, na katerem slonijo knjižnice za delo s posamezno SPI ali I2C napravo. Med slednjimi je tudi veliko Adafruitovih, ki navadno nudijo pester nabor funkcionalnosti pa tudi številne primere uporabe. Tako se nam pri nobenem od naštetih tipal ni treba bati, da ga ne bi mogli uporabiti z ESP32 ali ESP8266 modulom, oziroma, da bi se morali pisanja programske kode lotiti na osnovi bazičnih programskih knjižnic za SPI ali I2C komunikacijo. Slednje je potrebno le, če se lotevamo razvoje z zares eksotičnimi strojnimi komponentami, pri katerih si bomo morali pomagati s podrobnimi programerskimi navodili.
Dopolnitev vgrajene programske opreme
Internetni radio z dodano ethernetno povezavo in Wi-Fi je odlična osnova za gradnjo bazne enote vremenske postaje, saj zna komunicirati z različnimi prikazovalniki, ima rotacijski enkoder s tipko za izbiranje menijev, omogoča daljinsko upravljanje in ima že vzpostavljen spletni strežnih s spletno stranjo za upravljanje. Manjka le še zavihek z nastavitvami vremenskih senzorjev in spletna stran za spremljanje trenutnih vrednosti merjenih vremenskih parametrov (npr. temperature, relativna vlažnosti zraka in zračnega pritiska).
Čeprav dopolnjevanje programske opreme spletnega radia ni za tiste, ki se prvič lotevajo programiranja, bodo imeli programerji spletnih aplikacij, sorazmerno malo dela. Pomembno je vedeti predvsem to, da je vsebina spletnih strani v programski kodi skrita v C-jevskih datoteka *.h, v katerih je shranjena dolge znakovne nize. Če jo želimo restavrirati na datotečni sistem, enostavno odstranimo vse C-jevske deklaracije in zamenjamo tip datoteke. Denimo radio_css.h spremenimo v radio.css. Spletno strani lahko nato urejamo kar na osebnem računalniku.
Mogoče je tudi spremeniti izvorno kodo, tako da se spletna stran naloži iz kartice SD, namesto iz programskega EEPROMa. Pretvorbe formatov datotek niso potrebne, nadaljnje urejanje pa je enostavnejše, saj ni potrebno ponovno nalaganje izvorne kode v ESP32 modul.Ja pa res, da s tem bistveno povečamo število dostopov do SD kartice, kar ima lahko za posledico nestabilno delovanje. Čisto mogoče je, da se je Ed Smallenburg prav zato odločil, da spletne strani raje shrani v programski EEPROM, saj tako dostopi do SD kartice niso potrebni.
Morda ni odveč omeniti, da osnovna različica spletne strani deluje iz korenskega imenika, kjer jo moramo tudi urejati. Če jo urejamo na osebnem računalniku, jo lahko v izogib »packanju« po korenskem imeniku računalnika, pustimo kar na SD kartici (seveda, če ima računalnik vgrajen čitalnik).
Naslednji korak je dopolnitev vgrajene programske opreme ESP32 modula, tu se moramo paziti predvsem na pravilno uporabo SPI in I2C vodil, ki si ju deli več naprav. Težavna je predvsem časovna delitev dostopa do vodila posameznim naprava, kot tudi delitev prenosov na ne prekratke pakete, tako da ima vsaka od priključenih naprav v povprečju dovolj časa za prenos podatkov.Ta del programiranja je najtežji in zahteva veliko izkušenj, saj moramo zagotoviti stabilno in hitro delovanje. Za pregled podrobnosti programske kode presega obseg tega članka, lahko pa si ogledate programsko kodo spletnega radija, ki jo najdete na sites.google.si/site/pcusbprojects. Kot zanimivost povejmo še, da lahko napredna vremenska postaja teoretičnogovori, kar ji omogoča VS1053 avdio modul, vsekakor pa moramo govorjena besedila za različne priložnosti vnaprej posneti v MP3 datoteke.
Enostavna bazna enota vremenske postaje
Za gradnjo enostavne vremenske postaje ne potrebujemo VS1053 avdio kodeka, dovolj je že ESP modul in vremenska tipala, lahko tudi eno samo. Poleg tega potrebujemo še most USB/RS-232. Prikazovalnik je opcijski, je pa za lepo grafiko vsekakor priporočljiv TFT, najcenejši pa so OLED zasloni. Priključkov je brez ethernetnega LAN8720A modula več kot dovolj, sprosti pa se tudi HSPI vodilo. Osnovne risarske funkcije in funkcije za izpis besedila najdemo v Adafruitovi programski knjižnici Adafruit-GFX-Library. Potrebujemo le še +3,3 V napajalnik in ustrezno vgrajeno programsko opremo.
ESP32 USB most s PIC32
Mnogi nadobudni razvijalci programske opreme po svetu ugotavljajo, da ESP moduli ne omogočajo prave USB komunikacije oziroma lahko preko USB komunicirajo s pomočjo USB/RS-232 vmesnika. Vendar slednji ne more ponuditi učinkovitega dostopa do datotek na SD kartici. Po drugi strani, je zanimivo, da vsi novejši mobilni telefoni, digitalni fotoaparati itn. to funkcionalnost omogočajo, vendar lahko so SD kartice dostopa smo osebni računalnik ali samo naprava, medtem ko hkratni dostop ni mogoč. Hkratni dostop do datotečnega sistema internega trajnega pomnilnika in pomnilnika SD kartice omogočajo šele pametni telefoni in računalniške tablice z zmogljivejšimi USB krmilniki.
No, mi se bomo zadovoljili s prvo možnostjo, tako da bomo za komunikacijo z SD kartico uporabili zmogljivejši most USB/RS-232, ki bo lahko poleg CDC RS-232 vmesnika za programiranje in diagnostiko ESP modulov deloval tudi kot drugi gospodar vodila SPI, kar mu bo omogočilo neposreden dostop do kartice SD in njeno predstavitev ko dodatnega diska v osebnem računalniku v času, ko bo ESP modul logično odklopljen od SD kartice. To je podobno kot bi SD kartico vzeli iz naprave na osnovi ESP modula in jo vstavili v čitalnik SD kartic v osebnem računalniku, vendar brez fizičnega prestavljanja kartice ali USB priključka.
Čeprav se naloga zdi enostavna, PIC18F14K50 nima dovolj RAMa (le 768 bajtov), da bil lahko poleg USB HID in USB CDC podprl še USB MSD funkcionalnost. Zato se moramo zadeve lotiti z zmogljivejšim mikrokontrolerjem, kot je PIC18F24J50 s 4 kB RAMa. Pomembno je tudi, koliko USB končnih točk lahko mikrokontroler podpre glede na razpoložljivo velikost pomnilnika, do katerega dostopa USB enota. Alternativa PIC18 je vsekakor PIC32, ki v tem pogledu nima težav, je pa res, da morda Microsoft Harmony ni najbolj primeren programski okvir za časovno kritična aplikacije, kar USB funkcionalnost HID + CDC + MSD gotovo je. Kakorkoli, namesto Harmony lahko uporabimo preprostejši MPLAB 8, za katerega je uspešno delujoč primer USB/RS-232 mostu s CDC gonilnikom tudi pripravljen. Dodati moramo še kodo za MSD in, kar je morda najtežje, dopolniti USB tabelo opisnikov, tako da sestavljena USB naprava podpira tudi MSD. Omenimo še to, da isto kodo lahko sicer prevedemo tudi v razvojnem okolju MPLAB X, starejši C-jevski prevajalniki XC32 postrežejo s kopico opozoril tem, da bodo določene zastarele funkcije programskih knjižnic v njihovih novih različicah odstranjene. K sreči mi je XC32 v1.34, ki ga uporabljam za MPLAB 8, še vedno javljal le opozorila. Vsekakor boste v novem ali starem okolju potrebovali ustrezen prevajalnik in nabor programskih knjižnic. No, s tem ni bilo težav, prav tako ne s prirejanjem programske kode za PIC32MX250F128B, sem pa vseeno moral v Microsoft Solutions moral startati s primerom za PIC32MX460F512L, ki sem ga moral nekoliko prirediti za moj mikrokontroler. Cilj se je bil dobiti čim enostavnejšo in čim hitrejšo vgrajeno programsko opremo, brez nepotrebne navlake funkcionalnosti, ki so potrebne delovanje MicrochipHarmonyokolja in jih lahko implementiramo na bistveno enostavnejši način, brez gonilnikov. Razlog za to je bil preprost, implementacija z MicrochipHarmony razvojnim okoljem ne zagotavlja stabilnega prenosa velikih količin podatkov, ki je potreben pri programiranju ESP modulov. Domnevam, da zato, ker so uporabljeni programski objekti in objektna programska koda v kritičnih gonilnikih perifernih naprav s kompleksnimi načini naslavljanja podatkov. Po drugi strani lahko, kot smo spoznali že ve enem ob preteklih nadaljevanj, stabilen prenos podatkov dosežemo že s PIC18F14K50. Enako lahko zato upravičeno pričakujemo tudi od bistveno zmogljivejšega PIC32MX250F128B.
Naslednji korak je dodajanje HID in MSD funkcionalnosti, za kar moramo najprej dopolniti USB tabelo opisnikov, nato pa dodati še ustrezne programske funkcije. Najzanimivejši del programske kode zagotavlja usklajevanje SPI dostopov do SD kartice, do katere lahko dostopata tako ESP32 kot PIC32, vendar je lahko v vsakem trenutku le eden izmed njiju gospodar SPI vodila. Preko SPI vodila je mogoča tudi hitra komunikacija med PIC32 in ESP32 modulom. Obenem, PIC32 omogoča tudi programiranje vgrajene programske ESP32 opreme prek RS232 vodila in krmilnih priključkov ~EN (RESET) in ~GPIO0 (PRG). Priključka, tako kot ostale proste I/O priključke PIC32, krmilimo prek USB HID vmesnika. Kot tretji in četrti krmilni priključek si lahko omislimo signal preko katerega PIC32 od ESP32 modula zahteva prevzem SPI vodila in povratnega signala, s katerim mu ESP32 modul da dovoljenje, da postane gospodar vodila. Ta problem je sicer mogoče rešiti tudi na način, da je PIC32 večino časa suženj na vodilu, ESP32 modul pa mu lahko tako kar prek SPI vodila sporoči, da se umika iz vodila in da lahko (začasno) postane novi gospodar vodila. Ko PIC32 ne potrebuje več SPI vodila, se umakne in vodilo spet prepusti ESP32 modulu. Bojazni, da omenjeno pri hitrosti SPI vodila okoli 1 MHz ne bi delovalo, pod pogojem, da so žične povezave kratke, skoraj ni, saj je na hitro SPI vodilo pri projektu internetnega radija brez težav povezanih veliko naprav.
Ponovno velja izpostaviti MSD funkcionalnost, ki omogoča hiter in enostaven prenos datotek prek vodila USB, ki ga ESP32 sicer nima, vendar mu tu na pomoč priskoči PIC32. Po drugi strni, omogoča ESP32 ethernetno in Wi-Fi komunikacijo, tako da lahko deluje tudi kot inteligentni modem za PIC32, čeprav je glede na njegove zmogljivosti verjetno prej pričakovati obratno, da PIC32 deluje kot hitri USB 2.0 vmesnik z neposrednim odstopom do podatkov na SD kartici. Pri tem velja omeniti, da moramo operacijski sistem SD kartice izbrati tako, da ga lahko bereta vgrajeni programski opremi ESP32, kot tudi PIC32.
Ena od funkcionalnosti naprednega USB/RS-232 mostu je tudi razširitev nabora GPIO za ESP32. PIC32 ima več kot dovolj programskega pomnilnika in RAMa, da lahko vanj vgradimo tudi strežnik za tekstovne ukaze preko RS-232, tako lahko ESP32 modul krmili ali bere priključke PIC32. Obenem lahko izrabimo tudi njegov zmogljivi A/D pretvornik, le da ta lahko zajema velike količine podatkov, ki nastanejo z vzorčenjem s hitrostjo do 1 Msps. Zato jih je smotrneje in enostavneje prenašati preko hitrejšega SPI vodila. Pri tem imamo dve možnosti, lahko jih shranjujemo na SD kartico in hkrati ESP32 modul samo obveščamo o stanju zajema, ali pa jih pošiljamo modulu v obdelavo. Podrobnejše informacije lahko vidimo na shematskem prikazu ESP32 USB mostu
Kako sem sestavljal
ESP32 vremenska postaja in ESP32 USB most sta zahtevna projekta, ne toliko s stališča izgradnje strojne opreme, temveč zaradi težavnosti načrtovanja vgrajene programske opreme, v kateri je veliko časovno kritičnih delov. Vsakega od problemov je bilo potrebno razbiti na manjše podprobleme, te najprej rešiti in šele na to nadaljevati in sestavljati programsko opremo v celoto. Pri vremenski postaji je bila ESP32 osnova že narejena. Na I2C vodilo sem moral dodati le še tipala za merjenje vremena (temperatura, relativna zračna vlažnost, zračni pritisk) in se lotiti dodelave vgrajene programske opreme.
V prvem koraku sem spletni strani radija dodal še en zavihek za prikaz vremenskih podatkov, tako da se je ta prikazal pred stranmi za upravljanje internetnega radija. Pri tem sem izkoristil prikaz na način kot internetni radio prikazuje nabor shranjenih nastavitev, le da vremenskih podatkov ne urejamo. Drugi korak je bil zagotavljanje stabilnosti in hitrosti delovanja vgrajene programske opreme ter dopolnitve prikaza na OLED zaslonu. Slednje sicer ni trivialno, si pa lahko pri tem izdatno pomagamo za Adafruitovo grafično programsko knjižnico Adafruit-GFX-Library, ki omogoča izris grafičnih likov in besedila, s katerimi lahko oblikujemo izbirne menije.
Najbolj zabaven je bil zadnji korak, v katerem sem z vremenskimi tipali dopolnil LEGO ohišje, tako da je dovolj prostora tudi za vremenska tipala. To je vsekakor lažje, kot pritrjevanje, lepljenje in vrtanje v klasična plastična ohišja, hkrati pa lahko kasneje dodamo še dodatno elektroniko.
Sestava strojne oprema ESP32 USB mostu je sorazmerno enostavna, se ni potrebno mučiti s pritrjevanjem SMD vezij, kot je MCP2200 (tovarniško predprogramirani PIC18F14K50), po drugi strani pa, je priprava vgrajene programske opreme, kot smo videli, precej zapletena. Za testiranje osnovnega delovanja PIC32 USB mostu sem uporabil kar
Nova nadaljevanka
Zakaj bi se omejili samo na uporabo ESP32. Veliko odličnih zamisli lahko realiziramo tudi s kombinacijo modulov ESP in zmogljivih 32-bitnih Microchipovihmikrokontrolerjev. V prihajajoči seriji Oblaku narejeno se bomo lotili izdelave in programiranja uporabnih naprav za vsakdanjo rabo. Pokazali bomo, da lahko razvojno ploščo, združljivo z računalniškim oblakom za razvijalce, izdelam tudi sami. Zanimala nas bo predvsem enostavnost programiranja v računalniških oblakih, ki programerjem nudijo možnost hitrega začetka, ne da bi morali porabiti ogromno časa z nameščanjem razvojne programske opreme, razvojnega okolja in iskanjem programskih knjižnic. Podrobna navodila in sheme so na spletni strani https://sites.google.com/sites/pcusbprojects.
Avtor: dr. Simon Vavpotič
https://sites.google.com/site/pcusbprojects
2020_291_46