V članku, ki sem ga napisal za nedavno številko (SE307) revije Svet Elektronike, sem opisal projekt Digitalni prikazovalnik. Uporabniški vmesnik tega digitalnega prikazovalnika je bil sestavljen iz spletne strani, do katere je uporabnik lahko dostopal in kjer bi vnesel besedilo, ki ga želi prikazovalnik prikazati. Tokrat sem uporabil GUI-O.
Avtor: Brian Millier
Dolga sporočila bi se počasi pomikala v eno ali drugo smer. Ker bi digitalni prikazovalnik občasno prikazoval tudi čas, je obstajal tudi način za prilagoditev ure realnega časa prikazovalnika na pravilen čas. Slika 1 je fotografija prikazovalnika, ki prikazuje čas.
Digitalni prikazovalnik je kot krmilnik uporabljal ESP8266, saj lahko zlahka gosti spletni strežnik. Napisal sem dve različici programske opreme:
- ESP8266 bi bil nastavljen v načinu dostopne točke. V tem načinu bi moral uporabnik izbrati ESP8266 kot delujočo Wi-Fi dostopno točko in se z brskalnikom pomakniti na spletno stran. Ker ni bilo neposredne povezave z internetom, je ta različica vsebovala čip – uro realnega časa za spremljanje časa.
- ESP8266 bi se povezal s katero koli Wi-Fi dostopno točko, ki je bila na voljo v bližini. V tem primeru uporabniku ne bi bilo treba izbrati nove Wi-Fi dostopne točke, temveč bi se le pomaknil na spletno stran prikazovalnika. V tem primeru je bila nastavitev časa digitalnega prikazovalnika izvedena prek interneta z uporabo NTP časovnega strežnika.
Ta vsebina je samo za naročnike
Mislil sem, da je zasnova tega projekta precej praktična in poceni. Pred kratkim sem izvedel za programsko opremo GUI-O, ki jo je napisalo slovensko podjetje. Programska oprema GUI-O je v bistvu aplikacija, ki deluje na Android pametnem telefonu ali tabličnem računalniku. Z MCU, ki je uporabljen v vašem projektu po meri, lahko komunicira na različne načine, od katerih je večina brezžična (na primer Bluetooth).
Aplikacija GUI-O je v bistvu tolmač: bere ukaze, ki temeljijo na besedilu, ki ga pošlje MCU vašega projekta, in jih prikaže z uporabo najrazličnejših zaslonskih pripomočkov. S prilagajanjem ukazov, ki jih pošljete v GUI-O aplikacijo, lahko na Android napravi prikažete »Nadzorno ploščo«, ki vsebuje veliko ali malo pripomočkov, pač kolikor jih potrebujete za upravljanje/nadzor vaše zunanje naprave. Ti pripomočki so bodisi vhodni objekti, občutljivi na dotik, kot so drsniki, bodisi statusni objekti, ki prikazujejo stanje, ki je prisotno v zunanji napravi. Slika 2 prikazuje primer »nadzorne plošče« GUI-O z drsnikom, nekaterimi indikatorji/merilniki stanja in lepo sliko.
Nekdo iz GUI-O ekipe me je kontaktiral, ko je prebral moj članek o Digitalnem prikazovalniku v reviji Svet Elektronike, in predlagal, da bi bila GUI-O aplikacija še en način za izvedbo mojega projekta. V bistvu bi lahko opustil idejo o spletnem mestu in uporabil GUI-O aplikacijo na Android telefonu za nadzor digitalnega prikazovalnika, na primer prek Bluetooth. Strinjal sem se, vendar je prišlo do enega zapleta – GUI-O je trenutno samo aplikacija za Android, jaz pa uporabljam samo IOS (iPhone in iPad) naprave.
Vendar sem imel srečo – obrisal sem prah s stare Samsung Galaxy Note 10.1 tablice, ki je nisem uporabljal že vrsto let – Samsung je opustil posodabljanje tablice Note 10.1 nazaj na Android 4. Z iskanjem po Youtube sem odkril, kako posodobiti operacijski sistem na tem starem tabličnem računalniku na Android 9, s pomožnim nalaganjem Lineage 16 operacijskega sistema. S tem novim operacijskim sistemom sem lahko prenesel brezplačno demo različico GUI-O iz trgovine Google Play.
Po nalaganju enega od vzorcev na spletnem mestu GUI-O v ESP32 razvojno ploščo, mi je uspelo zagnati GUI-O aplikacijo in komunicirati z ESP32 z uporabo Bluetooth, vse dokaj hitro. To je bilo impresivno, zato sem se odločil, da poskusim svoj projekt Digitalni prikazovalnik pretvoriti v nadzor z GUI-O.
GUI-O komunikacijski protokoli
Preden opišem, kako sem projekt Digitalni prikazovalnik pretvoril v GUI-O, je koristno razpravljati o različnih metodah povezave, za katere je mogoče konfigurirati GUI-O. Te metode so naslednje:
- 1) Bluetooth (klasični način z uporabo serijskega perifernega profila ali SPP)
- 2) Bluetooth z nizko porabo energije (BLE)
- 3) Wi-Fi (z razpoložljivo dostopno točko)
- 4) Ethernet (žični)
- 5) USB (žični)
Za telefon ali tablico sta najpogosteje uporabljeni metodi 1 in 2. Metodi 3 in 4 sta v bistvu načina povezave, pri katerih se telefon/tablični računalnik Android povežeta z MQTT strežnikom, ki gostuje v internetu, in vaša naprava po meri se poveže z istim MQTT strežnikom, bodisi brezžično ali prek Etherneta. Številka pet, način USB povezave deluje samo, če vaš telefon lahko zagotovi emulirana COM vrata z uporabo USB vrat, ki so namenjena tudi polnjenju baterije.
Ker sem že zasnoval spletni vmesnik za Digitalni prikazovalnik, sta bili samo metodi 1 in 2 zanimivi možnosti. Moram priznati, da čeprav sem naredil veliko projektov z ESP8266 in ESP32 podjetja Espressif, sem pozabil, da ESP8266 upravlja samo Wi-Fi, ne pa tudi Bluetooth. To je pomenilo, da ESP8266, ki sem ga uporabil v prvotnem projektu, ne bi deloval z Bluetooth GUI-O metodo povezave. Vendar sem bil navdušen nad preizkusom GUI-O, zato sem se odločil zgraditi novo krmilno ploščo za Digitalni prikazovalnik z uporabo ESP32.
Klasični Bluetooth proti BLE
Ker redno uporabljam iPhone/iPad, sem imel nekaj izkušenj s poskusom povezovanja lastnih naprav po meri s temi IOS napravami. Glede na to, kar sem ugotovil, bodo IOS naprave delovale z BLE, vendar ne delujejo s klasičnim Bluetoothom – vsaj ne z uporabo Serial Peripheral Profile, ki ga najraje uporabljam. Android naprave očitno delujejo z obema Bluetooth protokoloma, saj je GUI-O aplikacija samo za Android in podpira oba.
Vsekakor obstaja prostor tako za klasični Bluetooth z uporabo SPP, kot za BLE, glede na nadzor/nadzor zunanje naprave, s pametnim telefonom. Poglejmo si različne prednosti/slabosti.
Klasični Bluetooth v SPP načinu:
- Razmeroma preprosto pisanje kode, saj ta protokol v bistvu samo posnema standardno serijsko UART povezavo.
- Dodajanje Bluetooth SPP povezave na osebni računalnik (za razvoj in odpravljanje napak) je preprosto z uporabo poceni USB-Bluetooth modula HC05.
- Zahteva več energije – to je v resnici samo premislek na zunanjem perifernem koncu povezave in le takrat, ko ga napaja majhna baterija, kot je recimo gumb baterija.
Bluetooth Low Energy (BLE):
- Precej težko je napisati kodo za zunanji MCU del povezave. To se zgodi, ker obstaja veliko vnaprej določenih plasti protokola, ki se jih je treba naučiti: Storitve, Karakteristike, Vrednosti itd. Vsi ti parametri so določeni z uporabo dolgih šestnajstiških nizov, ki si jih je težko zapomniti, zato ste dovzetni za napake.
- Če lahko obvladate zaplete v 1) zgoraj in če vaša naprava izvaja običajno funkcijo, boste morda lahko uporabili obstoječo komercialno aplikacijo na delu povezave s telefonom/tablico. To pomeni, da vam morda ne bo treba napisati lastne aplikacije po meri za telefon.
Kot pove že ime, BLE porabi manj energije, zato je koristno, če vaša zunanja periferna naprava deluje na majhno baterijo, je nenadzorovana in mora delovati dolgo časa.
V primeru digitalnega znaka le-ta črpa 5-10 vatov energije iz električnega omrežja (odvisno od nastavljenega nivoja svetilnosti). Edina uporabljena baterija je gumb celica, ki napaja samo čip RTC, tako da Bluetooth poraba energije ni problem – tudi na telefonu, saj se konfiguracija digitalnega znaka izvaja redko. Iz tega razloga sem za ta projekt izbral klasični Bluetooth način z uporabo SPP.
GUI-O gradniki
Projekt Digitalni prikazovalnik ne zahteva modernega uporabniškega vmesnika ali »nadzorne plošče«. Pravzaprav je začetna različica mojega projekta uporabljala zelo preprosto spletno stran, ki je vsebovala le nekaj besedilnih polj in gumbov. Ta različica projekta ima bolj moderno “nadzorno ploščo” kot spletna različica, vendar še vedno uporablja le majhen del pripomočkov, ki so na voljo v GUI-O. Slika 3 prikazuje nekaj GUI-O gradnikov – nekatere sem uporabil v tem projektu.
Priročnik za GUI-O razvijalce je zelo dobro napisan in ilustriran. Opisal bom samo nekaj osnov, povezanih z nastavitvijo vaše nadzorne plošče in branjem rezultatov, ki jih pošlje nazaj, ko uporabnik na nek način komunicira s to nadzorno ploščo.
Ko zaženete GUI-O aplikacijo v telefonu, morate določiti povezavo z neko zunanjo napravo. O tem postopku bom razpravljal pozneje, a za zdaj je dovolj vedeti, da bo GUI aplikacija poslala naslednje sporočilo z zahtevo za inicializacijo prek Bluetooth SPP na ESP32:
@init
Vaš program mora spremljati dohodna Bluetooth sporočila in ko prejme to inicializacijsko sporočilo, se mora odzvati s pošiljanjem serije sporočil, da na zaslon postavi potrebne pripomočke. Ta postopek se začne z nekaj preprostimi ukazi za brisanje zaslona in nastavitev barve ozadja:
sendMsg("@clsrn"); sendMsg("@guis BGC:#FFFFFFrn");
Upoštevajte, da je sendMsg() funkcija, ki pošlje ukazno sporočilo nazaj v Android telefon/GUI-O aplikacijo prek Bluetooth SPP. Medtem ko se predpona »@« uporablja za številne interakcije z GUI-O aplikacijo, ko postavljate nove pripomočke na zaslon, te pripomočke določite z ukazom, ki se vedno začne s simbolom črte »|« . Seznam 1 je koda, ki sem jo uporabil za risanje nadzorne plošče za ta projekt.
Vsaka vrsta gradnika vsebuje ime iz dveh črk: LB je oznaka, TI je vnos besedila, SL je drsnik itd. Vsakemu gradniku je treba dodeliti edinstven ID uporabnika (UID) – ta UID se uporabi drugje v vaši kodi, če spremenite kateri koli atribut tega gradnika ali preberite njegovo stanje (v primeru uporabniško nastavljivih gradnikov, kot je na primer drsnik ali gumb). Vsi atributi gradnika, kot so velikost, barva, položaj itd. so določeni z označevalcem (z velikimi črkami), ki mu sledi »:« in nato vrednost tega atributa.
Eno posebnost teh ukaznih vrstic lahko vidite v naslednjem ukazu:
sendMsg("|LB UID:lb1 X:50 Y:10 FSZ:5 FFA:" font1" TXT:"ESP32 Digital Sign"rn");
Upoštevajte, da je za TXT parametrom (ki določa besedilo, za katerega želite, da je prikazano v gradniku Label) prikazan »« pred vsakim pojavom simbola dvojnega narekovaja. “” je simbol ESCAPE. Potreben je, ker funkcija sendMsg pričakuje posredovanje spremenljivke String. Ker je spremenljivka String zaključena s simbolom dvojnega narekovaja, in če morate v ukazni niz GUI-O vdelati dvojni narekovaj, morate uporabiti simbol ESCAPE »«, sicer bo funkcija sendMsg predvidevala, da se niz konča s prvim dvojnim narekovajem, ki ga najde znotraj ukaza.
Najboljši način za razumevanje GUI-O gradnikov je, da si ogledate mojo kodo v seznamu 1, si ogledate stran priročnika za razvijalce za vsak uporabljeni gradnik in pogledate tudi, kako je videti na zaslonu vašega telefona.
Kadar koli uporabnik komunicira z GUI-O aplikacijo, na primer s premikanjem drsnikov, se GUI-O odzove z:
- ustrezno spreminjanje videza ikone na zaslonu
- pošiljanje sporočila, kot je @sl1 20.0rn
- kar pomeni, da se je slider1 premaknil na 20.0
Vsi takšni odgovori se bodo začeli s simbolom »@«, ki mu bo sledil UID gradnika, ki smo se ga dotaknili. Vaš MCU bo moral spremljati dohodna sporočila iz pametnega telefona prek Bluetooth povezave za ta sporočila in jih razčleniti, da določi ime gradnika, ki smo se ga dotaknili, in kakšna je nova vrednost. V mojem programu je ta funkcija parseGuioMsg() funkcija. Na primer, ko uporabnik vnese besedilo v polje za vnos besedila ti1, bo GUI-O odgovoril:
@ti1 xxxxxxxrn
kjer je xxxxxx besedilo, ki je bilo vneseno v polje za vnos besedila (brez dvojnih narekovajev). rn sta simbola za vrnitev na začetek in nova vrstica.
Eden zanimivih gradnikov je gradnik imenovan Slika (angl. Image). Zanimivo je, kje je shranjena slikovna datoteka – ni shranjena v MCU Flash zunanje naprave. Namesto tega MCU zunanje naprave zgolj kaže na želeno sliko na enega od dveh načinov:
1) Z določitvijo imena datoteke. V tem primeru mora biti PNG slikovna datoteka vnaprej naložena v Flash pomnilnik pametnega telefona v naslednjo mapo:
/Android/data/com.guio.guioapp/files/Pictures/
ali izmenično na istem mestu na kartici uSD, če je v telefonu.
Z navedbo URL-ja, ki vsebuje zahtevano sliko v .PNG formatu.
Morda ste nesrečni glede uporabe možnosti 2), ker telefon morda ni ves čas povezan z internetom in/ali internet ni statičen. Slik, ki danes gostujejo na določenem URL-ju, morda v prihodnosti tam ne bo več. Vendar, če je uporabljena možnost 2), bo aplikacija GUI-O v spletu poiskala samo to sliko, ko prvič naleti na URL v dohodnih ukazih. Ko ga najde, ga shrani v predpomnilnik na mestu mape, prikazanem zgoraj v možnosti 1). Predpomnjena bo na uSD kartici, če je prisotna, sicer bo v notranjem datotečnem prostoru Androida.
Razvijanje vaših GUI-O zaslonov z Live Designerjem
Vsi GUI-O gradniki so ustvarjeni z berljivimi ASCII ukaznimi vrsticami, priročnik za razvijalce pa vsebuje odlično dokumentacijo za vse. Če pa ste leni, boste morda želeli preizkusiti GUI-O Live Designer aplikacijo. Obstajata različici te aplikacije za Windows in Linux.
Ta aplikacija se izvaja na vašem računalniku in se poveže z vašim Android telefonom/tablico namesto vaše zunanje naprave. Njegov edini način komunikacije je prek COM vrat v vašem računalniku. Zato za povezavo z Android telefonom potrebujete način za povezavo s COM vrati. V bistvu obstajajo trije načini za to:
- 1) Vaš osebni računalnik vsebuje Bluetooth vrata, ki jih je mogoče konfigurirati za zagon Serial Peripheral Profile (SPP). Ko zaženete GUI-O Designer in pregledate seznam razpoložljivih COM vrat, bi izbrali tista, ki ustrezajo notranjim Bluetooth vratom računalnika (konfiguriranim kot SPP).
- 2) Priključite USB-Bluetooth modul, kot modul HC05 (slika 4). Modul se bo prikazal v upravitelju naprav kot USB serijska vrata (COMxx). Modul HC05 se ne identificira nič bolj podrobno kot to, zato ga boste morda morali priključiti/odklopiti, medtem ko gledate upravitelja naprav, da vidite, katera COM vrata navaja kot USB serijska vrata.
- 3) Če vaš telefon dovoli, da se njegova USB/polnilnik vrata označijo kot serijska vrata (in veste, kako jih nastaviti kot taka), lahko priključite USB kabel telefona v računalnik in vidite, katera COM vrata so prikazana v Upravitelju naprav (Device manager).
Moj Dell računalnik vsebuje Bluetooth vrata in lahko sem ga konfiguriral v SPP načinu in se nato poskusil povezati z njim v GUI-O programu za oblikovanje. Čeprav sem lahko »videl« Bluetooth vrata računalnika, ko sem v GUI-O aplikaciji na svojem tabličnem računalniku iskal Bluetooth naprave, se z njimi nikoli nisem mogel povezati. Včasih je moj tablični računalnik Note 10.1 prikazal zaslon, ki mi je dal kodo za seznanjanje za oskrbo druge naprave. Vendar moj računalnik nikoli ni prikazal zaslona, ki bi zahteval to kodo. Torej, metoda 1) zame nikoli ni delovala.
Metoda 2) je dobro delovala. Znotraj GUI-O Live Designer aplikacije sem se lahko povezal s COM vrati, ki jih je navedel HC05 modul. V GUI-O aplikaciji na mojem Samsung Note 10.1 je skeniranje razpoložljivih Bluetooth naprav pokazalo napravo z imenom HC05 in ob njeni izbiri me je sistem pozval k kodi za seznanjanje, ki je za HC05 »1234« (tovarniško privzeto). Po seznanitvi je GUI-O Live Designer program lahko poslal ukaze za zaslon, ki sem ga oblikoval, na moj Android tablični računalnik, kjer je bil prikazan v redu. Če premaknete drsnik, bi odgovorni niz poslali nazaj v GUI-O Live Designer, kjer bi se prikazal v spodnjem desnem oknu Live Designerja.
Nisem mogel najti načina, da bi svojemu tabličnemu računalniku Samsung Galaxy Note 10.1 dovolil, da USB/polnilnik vrata delujejo kot serijska vrata, tudi ko sem ga postavil v način za razvijalce in omogočil funkcijo ADB (kar je bilo edino, kar sem lahko pomislil med poskušanjem). Ko sem Note 10.1 prestavil v način za razvijalce, se je takoj, ko sem ga priključil na računalnik, pojavilo okno upravitelja datotek, ki prikazuje vsebino notranjega datotečnega sistema in nameščene kartice uSD. Tako sem potrdil, da so bile GUI-O slikovne datoteke shranjene v mapi, ki je navedena v Priročniku za razvijalce GUI-O.
GUI-O Live Designer uporablja privzeto hitrost prenosa 115.200 baudov, kot je razvidno na vrhu slike 5. Če uporabljate USB-Bluetooth HC05 modul, bo tovarniško nastavljen na hitrost prenosa 9600 baudov (ob predpostavki, da prihaja iz iste tovarne kot moj modul!).
Medtem ko bi to počasnejšo hitrost lahko izenačili z izbiro 9600 baud v meniju Live Designer, sem se odločil ostati pri (višji) 115.200 baud hitrosti s spremembo privzete baudne hitrosti na HC05 modulu. To je mogoče storiti na naslednji način:
Prestavite HC05 modul v AT ukazni način tako, da ob vklopu pritisnete tipko – LED bo zdaj v ukaznem načinu utripala vsaki 2 sekundi.
V AT načinu je privzeta hitrost prenosa 38400, zato spremenite emulator računalniškega terminala na to nastavitev.
Vtipkajte AT+UART=115200,1,2,
Modul vrne “OK”.
Ponovno vklopite napajanje na HC05 ne da bi pritisnili tipko.
Ko je GUI-O aplikacija v Android napravi seznanjena s HC05 modulom, LED lučka HC05 preneha hitro utripati in namesto tega dvakrat utripne približno vsakih 7 sekund.
Live Designer je dokaj preprost za uporabo. Gradnik, ki ga želite dodati, izberete v levem polju tako, da ga dvokliknete. Nato se prikaže v polju na desni. Če izberete gradnik iz tega polja, bodo v polju na desni strani prikazani vsi parametri, ki jih je mogoče urejati za ta gradnik. Ko opravite ta urejanja, bo pripomoček takoj osvežen v Android telefonu/tabličnem računalniku. Inicializacijski niz, ki ga je treba poslati v Android napravo za implementacijo gradnika, bo prikazan v zgornjem desnem polju. Podobno se zgodi, če se dotaknete gradnikov za vnos, kot je drsnik ali gumbi v napravi Android. Takrat se bo nova vrednost prikazala v polju Live Designer spodaj desno – v popolnoma enaki obliki, kot bi jo videli, če bi dohodno sporočilo razčlenili z MCU v vaši zunanji ciljni napravi.
Nov krmilnik za Digitalni prikazovalnik za GUI-O
Kot sem že omenil, sem moral oblikovati nov krmilnik z uporabo ESP32, ker je prvotni uporabljal ESP8266, ki nima možnosti Bluetooth komunikacije. Krmilnik digitalnega prikazovalnika ni preveč zapleten, zato me ni motilo sestaviti še enega.
Slika 6 prikazuje shematski diagram novega krmilnika. Prikazujem modul ESP32 DEVKITC, ker je običajen in ki ga običajno uporabljam. V tem primeru sem dejansko uporabil modul WEMOS LOLIN32 Lite, vendar sta oba modula zamenljiva, če periferne naprave povežete s pravilnimi priključki ESP32 modula.
Štirje LED 32×8 matrični moduli so verižno povezani skupaj in povezani na SPI vrata ESP32 z uporabo IO23 za MOSI, IO18 za CLK in IO16 za linijo CS. To je privzeto ožičenje SPI vrat, ki ga pričakuje knjižnica Max72xxPanel, ki jo uporabljam za pogon LED matrike, vendar ji morate posredovati GPIO16 priključek, ki se uporablja za linijo CS.
Moj prejšnji projekt digitalnega prikazovalnika je uporabljal MCP79401 RTC čip, ker je imel ta RTC čip nekatere funkcije, ki so bile potrebne na PC ESP8266 plošči z nizko porabo energije, ki sem jo zasnoval prej, za drug projekt. Pri roki sem imel eno od teh tiskanih vezij in sem ga uporabil za začetni digitalni prikazovalnik.
Za ta projekt sem uporabil pogostejši NXP PCF8563 RTC. Ta čip nima ločenega priključka za baterijo, zato sem moral uporabiti 2 diodi 1N4148, da sem ga napajal iz glavnega Vcc ali iz CR2032 gumb celice.
R3, R4 tvorita napetostni delilnik 2:1 iz CR2032 celice za napajanje notranjega ADC ESP32. Za razliko od ESP8266 ADC, ki ima izjemno visoko vhodno impedanco in fiksno FS območje 1 volta, ima ADC ESP32 programabilni slabilnik z več razponi, vendar ima tudi nižjo vhodno impedanco. Uporabil sem ADC_6db obseg, ki daje vhodni FS obseg približno 2 volta, kar se ujema z največjo napetostjo 3,0 volta gumb celice, ko je znižan preko napetostnega delilnika R3, R4. Kondenzator C1 filtrira šum, ki je lahko prisoten v tem vezju z dokaj visoko impedanco.
Lolin32 Lite ni bil popoln ESP32 modul za ta projekt – bil je edini pri roki, ko sem zgradil vezje. Čeprav vsebuje vtičnico za LiPo celico in polnilnik, nima posebnega Vin pina, ki bi ga lahko napajal s 5 volti za napajanje modula. Posledično sem moral uporabiti mikro-USB kabel, zarezati v kabel ter uporabiti črno in rdečo žico za napajanje s 5 volti.
Slika 7 je fotografija celotne krmilne plošče digitalnega prikazovalnika.
Program za ESP32 digitalni prikazovalnik
Ugnezdena programska oprema, tako kot pri mojem prvem projektu digitalnega prikazovalnika, je napisana v C z uporabo Arduino IDE. Če želite omogočiti, da Arduino IDE deluje z Espressif ESP8232, morate namestiti jedrno knjižnico ESP32. To enostavno dosežete s klikom na Tools-> Board->Board Manager in v iskalno polje vnesete ESP32. Videli boste vnos z imenom esp32 podjetja Espressif Systems. Uporabljam najnovejšo različico (2.0.3-RC1), ki zdaj podpira novejše naprave ESP32 S2, S3 in C3.
Za pogon LED matrične plošče uporabljam Max72xxPanel knjižnico. Za ta članek sem vključil mapo “arduino-Max72xxPanel-master”, ki vsebuje to knjižnico – je v mapi Software na spletni strani Svet elektronike. Ta knjižnica zahteva, da imate prisotno tudi knjižnico »Adafruit_GFX«, vendar jo lahko preprosto dodate tako, da zaženete Sketch / Include Library / Manage Libraries in jo poiščete po imenu.
Podobno morate dodati BluetoothSerial knjižnico in EEPROM knjižnico. Datoteki »RTC.h« in »PCF8563.cpp« sem vključil v programsko mapo projekta, ker so na voljo številne knjižnice RTC, vendar je ta tista, ki deluje z mojim programom.
Če želite uporabljati LED matrične zaslone, morate določiti razred Max72xxPanel, kot sledi:
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); PinCS sem definiral kot 16, ker uporabljam GPIO16 za signal CS zaslona. Ker uporabljam 4 module, od katerih vsak vsebuje 4 matrične zaslone, je spremenljivka »numberOfHorizontalDisplays« v programu nastavljena na 16. Če bi želeli zaporedno povezati več zaslonov, bi morali spremeniti to spremenljivko. Vendar pa obstajajo tudi druge stvari, ki jih bo morda treba spremeniti. Definiral sem največje število znakov (MAXCHARS) pri 300, kar dodeli dovolj velika polja SRAM za obdelavo toliko znakov. Vsak znak ima 6 slikovnih pik vodoravno, tako da bi teoretično potrebovali 300 * 6 slikovnih pik/32 slikovnih pik na modul ali 58 diskretnih matričnih plošč za prikaz toliko znakov hkrati. Imam samo 4 plošče in program sem preizkusil samo za to velikost zaslona.
Uporabil sem le 8×8 LED matrične zaslone enega dobavitelja. Pri izdelavi prvotnega projekta digitalnega znaka sem ugotovil, da so prve knjižnice gonilnikov, ki sem jih preizkusil, definirale usmerjenost LED matrike na tak način, da je bil zaslon navpični stolpec, ne vodoravna usmerjenost, ki sem jo želel. Sumil sem, da so morda na voljo 8×8 LED matrični moduli, ki določajo vrstni red povezav 64 LED na drugačen način.
Knjižnica Max72xxPanel vsebuje matrix.setRotation funkcijo, ki omogoča izbiro med 4 možnimi usmeritvami. Na začetku svoje setup() rutine pokličem to funkcijo za vsakega od 16 matričnih modulov in ji posredujem orientacijo 1. Če so vaši LED matrični moduli konfigurirani za drugačno orientacijo, lahko to vrednost spremenite v razpon od 0 -3, kot sledi:
- 0- brez vrtenja
- 1- 90 stopinj CW (v smeri urinega kazalca)
- 2-180 stopinj
- 3-90 stopinj CCW (v smeri proti urinem kazalcu)
Uporabljam EEPROM ESP32 knjižnico (ki emulira EEPROM v Flash pomnilniku ESP32 modula) za shranjevanje sporočila, ki je prikazano na znaku, tako da preživi cikel izklopa. Ob prvem zagonu programa bo EEPROM polje vsebovalo vse bajte postavljene na 0xFF, ker ni inicializirano. Funkcija RetrieveMessageFromEEPROM bo preverila ta “prazen” EEPROM in prikazala “Hello there-” namesto naključnih znakov.
Rutina parseGuioMsg() je funkcija, ki pregleduje dohodna sporočila iz GUI-O aplikacije v Android napravi in obravnava različna sporočila. Na primer, kot odgovor na sporočilo »@init«, poslano iz GUI-O aplikacije ob zagonu, bo izvedla kodo, prikazano v Listing 1, za risanje pripomočkov uporabniškega vmesnika v Android napravi. Vsa sporočila naprej in nazaj se zaključijo s CR in LF znakoma.
Čeprav tega ne prikazujem v shemi, sem dodal stikalo vezano med GPIO27 in maso. Ko v Loop() rutini vidim, da je bilo to stikalo pritisnjeno, izdam naslednji ukaz GUI-O: @caps. To pove GUI-O, naj posname zaslon – tako sem dobil sliko 8 – nadzorna plošča za digitalni prikazovalnik.
Na sliki 8 je besedilno okno, ki prikazuje RTC čas prikazovalnika. Upoštevajte, da ni prostora, kjer bi uporabnik lahko nastavil RTC čas za prikazovalnik – bodisi na začetku delovanja bodisi za spremembo poletnega časa. Aplikacija GUI-O ima funkcijo, kjer lahko prebere čas/datum iz same Android naprave. Med ukazi, ki jih pošljem GUI-O aplikaciji ob zagonu, je tisti, ki GUI-O pove, naj občasno prebere čas na Android napravi in ga pošlje zunanji napravi. Ko se to branje zgodi enkrat, zaradi česar je čas digitalnega prikazovalnika pravilno nastavljen, je periodično branje Android ure z GUI-O onemogočeno. Po nastavitvi lahko traja približno minuto, da se prikaže pravi čas zaradi časa osveževanja.
Enojni drsnik se uporablja za pošiljanje vrednosti med 1 in 15 nazaj v digitalni prikazovalnik. Ta vrednost se uporablja za nastavitev displayBrightness spremenljivke, ki se posreduje matrix.setIntensity() rutini.
Nastavitev digitalnega prikazovalnika z uporabo GUI-O
Ko je ESP32 krmilnik za digitalni prikazovalnik pripravljen in deluje, bi odprli aplikacijo GUI-O, izbrali ikono menija na vrhu (3 vodoravne vrstice) in izbrali Povezave ter nato Bluetooth in IOT. Kliknite Razpoložljive naprave in skeniranje bi moralo prikazati vnos z imenom »Digital Sign«. Ko kliknete na to, bi moralo biti prikazano »Bluetooth Connected« (s precej bledo zelenimi črkami). Nato zaprite menijsko funkcijo z “X” zgoraj desno. Zdaj, ko kliknete utripajočo začetno ikono GUI-O, bi morali videti GUI-O nadzorno ploščo, prikazano na sliki 8. RTC čas prikazovalnika bo neko naključno število, vendar bo pozneje, ko bo dobil pravilen čas iz Android naprave, prikazana pravilna vrednost. Prikazana bo napetost RTC gumb baterije in ikona stanja na desni strani okna napetosti. Ta se bo spremenila iz zelene v rdečo, ko bo napetost baterije prenizka.
GUI-O lahko nastavite tako, da se samodejno poveže z digitalnim prikazovalnikom, ne da bi sledili zgornjemu postopku, tako da v meniju GUI-O vklopite AutoConnect.
Mimogrede, brezplačna demo različica GUI-O vam omogoča, da jo preizkusite z do 6 gradniki. Pravzaprav bi lahko poenostavili mojo zasnovo nadzorne plošče za ta projekt, tako da bi uporabljal samo 6 gradnikov in bi lahko bil še vedno uporaben.
Brian_GUI-O