Avtor: Brian Millier
DFRobot je pred kratkim predstavil par razvojnih plošč, namenjenih mladini in tistim, ki so še v izobraževanju.
Gre za cenovno ugodne plošče, ki vsebujejo številne periferne čipe in module, ter poleg samega mikrokontrolerja, ponujajo še mnoge druge pogoste funkcije. Trenutno sta na voljo 2 modela:
UNIHIKER K10, ki temelji na mikrokontrolerju ESP32S3 in programskimi jeziki Arduino, MicroPython in Mind+.
UNIHIKER M10, temelji na procesorju RK3308 in operacijskem sistem Linux, programiranje se izvaja v Pythonu
Ker sem bolj strokovnjak za strojno opremo, kot za programsko opremo, bom najprej opisal nekatere tehnične značilnosti teh plošč. Čeprav imata obe plošči različne mikrokontrolerje/procesorje in operacijsko programsko opremo, imata obe nekaj skupnih perifernih naprav:
2,8-palčni TFT zaslon 240 x 320 (na modelu M10 z dotikom)
Povezljivost WiFi in Bluetooth (Bluetooth 4.0 na modelu M10, BLE na modelu K10)
Mikrofon (2 na modelu K10)
Vtičnica za uSD kartico
Senzor svetlobe okolice
Merilnik pospeška (oba) in žiroskop (samo model M10)
BBC Micro:bit združljiv priključek na robu za razširitev I/O
USB-C za napajanje/komunikacijo
Ta vsebina je samo za naročnike
Imel sem srečo, da mi je podjetje DFRobot ponudilo brezplačen vzorec UNIHIKER K10 (njihova SKU: DFR0992-EN). Cena K10 je zelo ugodna, saj znaša 24,64 €, medtem ko veliko močnejša M10 stane 51,07 €.
Slika 1 je fotografija plošče UNIHIKER K10, ki sem jo prejel. UNIHIKER M10 plošča je od spredaj videti skoraj identična, saj ima podoben TFT-zaslon in isti priključek kot Micro:bit. Čeprav sta na tej sliki premajhna, da bi bila jasno vidna, sta na koncu modula, kjer je priključen kabel USB-C, dva mikrofona, senzorja temperature/vlažnosti in senzorja okoljske svetlobe.
Za tankim izrezom poleg priključka Micro:bit so tudi 3 RGB LED-ice, ki so bolje vidne na sliki 2.
K10 se lahko napaja z USB-C kablom, kot je prikazano. Vsebuje tudi standardno 2-pin JST vtičnico, ki omogoča delovanje plošče na baterijsko napajanje, kot npr. 3,6-V LiPo celica. Vendar pa na K10 ni vezja za polnjenje LiPo. Namesto tega je na voljo regulator JW3651 Buck-Boost, ki je namenjen za vhodne napetosti med 3 V in 21 V in zagotavlja 3,3 V, potrebne za vezje K10. Podporno osebje pri UNIHIKER je povedalo, da se v izobraževalnem okolju zaradi varnostnih razlogov verjetneje uporabljajo AA-baterije namesto LiPo-baterije.



Slika 2 prikazuje zadnjo stran modula K10. Označil sem večino glavnih komponent. Plošča vsebuje standardni RESET in BOOT stikali, vendar nista potrebni za preklop plošče v način prenosa Flash, saj to samodejno opravi program ESPtool, ki ga Arduino IDE uporablja za prenose. USB vrata so neposredno povezana z vgrajenimi vrati USB ESP32S3. Na plošči ni USB-Serial mostišča, kot ga lahko najdete na drugih ploščah ESP32 ali ESP32S3. Zato morate v meniju Tools (Orodja) Arduino IDE določitiUSB-CDC on Boot :Enabled,da lahko uporabite ukaze preko serijskega kanala. Obstaja 4-pinski priključek z oznako I2C, za katerega sem sprva domneval, da sledi standardu „Grove“, saj je bil fizično enak. Motil sem se! Na srečo sem preveril pinout in ugotovil, da ni bil povezan v skladu s standardom „Grove“, ampak je bil priključek „Gravity“. To je logično, saj je „Gravity“ standard medsebojnega povezovanja DFRobot.Pri „Gravity“ sta priključka za napajanje/GND in SCL/SDA obrnjena v primerjavi z Grove standardom. Če bi na primer priključili senzorsko ploščo Grove, bi jo verjetno uničili.
2,8-palčni TFT-zaslon je zelo svetel, za razliko od nekaterih poceni zaslonov, ki sem jih kupil v preteklosti in so bili preveč temni za uporabo. TFT-zaslon je povezan z ESP32S3 prek enega od ESP32S3 SPI konektorjev in vsebuje priljubljeni čip za krmiljenje LCD-zaslona ILI9341. Knjižnica naprav, ki se uporablja za ta zaslon, je priljubljena knjižnica TFT_eSPI, ki jo je napisal Bodmer. O tem bom podrobneje spregovoril kasneje, saj je treba upoštevati nekaj pomembnih stvari v zvezi s tem TFT zaslonom in povezano knjižnico.
Kamera je 2-megapiksel barvna kamera (GalaxyCore GC2145), podobna tistim, ki jih najdemo na številnih ploščah tipa ESP32-CAM. DFRobot ponuja paket podpore za ploščo Arduino (BSP) za K10, ki delno podpira kamero z uporabo ukazov visoke ravni.
Zvočne zmogljivosti plošče K10 zagotavljajo naslednje komponente:
dva analogna mikrofona MSM381ACT
2-kanalni I2S ADC ES7243 s programirljivim avdio ojačenjem
I2S DAC NS4168 z vgrajenim 2,5-vatnim ojačevalnikom
majhen zvočnik, ki je približno tako zmogljiv kot zvočnik mobilnega telefona
Pri testiranju avdio podsistema sem naletel na nekaj težav, vendar sem našel rešitev, ki jo bom podrobneje pojasnil kasneje.
Preizkusil sem delovanje preostalih senzorjev na plošči, pri čemer sem uporabil primerne skice iz K10 BSP. Ti senzorji so:
Senzor temperature/vlažnosti AHT20 I2C,
3-osni merilnik pospeška SC7A20 I2C,
Senzor svetlobe okolice LTR-303ALS-01 I2C.
XL9535QF24 I/O razširitev portov
Ker ima K10 toliko vgrajenih senzorjev, kamero in TFT zaslon, so skoraj vsi GPIO-pini ESP32S3 namenjeni tem napravam. K10 pa vsebuje Micro:bit združljiv konektor na robu, ki vsebuje 17 I/O-pinov. Od kod prihajajo te I/O-linije? K10 vključuje XL9535QF24 I2C GPIO razširitev, ki ima 16 pinov, ki jih je mogoče konfigurirati kot vhod ali izhod. Te linije so označene s P0-P7 in P10-P17 (tako so označene tudi na sami GPIO razširitvi). Pet od teh linij se uporablja za različne funkcije na plošči K10, ostale pa so na voljo na Micro:bit robnem konektorju, kjer se uporabljajo oznake Px.
Podobno kot običajni Microchip MCP 23017, XL9535QF24 omogoča obrnitev katerega koli od pinov, ko se uporabljajo kot vhodi. Ko so konfigurirani kot vhodni pini, so ti pini tolerantni do 5 V, kar je lahko zelo priročno pri povezovanju K10 z napravami, ki uporabljajo 5 V logične nivoje. Ko so konfigurirani kot izhodi, lahko pini potegnejo 14 mA. XL9535QF24 vsebuje izhodni pin za prekinitev (priključen na pin GPIO43 ESP32S3), ki lahko obvesti MCU ESP32S3, ko kateri koli od vhodnih pinov spremeni stanje.
DFRobotov paket podpore za ploščo Arduino K10 (BSP) je razširil standardna ukaza Arduino digitalRead in digitalWrite, da vključujejo nadzor nad temi priključki za razširitev portov. Vse, kar morate storiti, je, da se pri uporabi digitalRead ali digitalWrite sklicujete na te Px oznake. Seveda s temi oznakami ne boste dobili tako hitrega odziva, saj se nadzorujejo/berejo prek I2C vrat s frekvenco 400 kHz. Vendar sem lahko z dvema zaporednima ukazoma digitalWrite() ustvaril impulz s širino le 2,9 uS, kar je precej hitro.
Glede na temo priključnih pinov Micro:bit je treba opozoriti, da obstajata dva pina, ki se lahko uporabita za branje analognih napetosti. Ta sta označena s P0 in P1 na konektorju, ki se nahaja na robu plošče. Nista povezana z XL9535, ampak sta neposredno povezana z GPIO1 in GPIO2 ESP32S3. Ta je mogoče odčitati z ukazom Arduino analogRead(), vendar morate uporabiti oznaki P0 in P1, ne pa 1 in 2, ki bi ju običajno uporabili za sklicevanje na pina GPIO1 in GPIO2 ESP32S3.
DFRobot prodaja več nosilnih plošč, ki vsebujejo Micro:bit vtičnico. Ena takšnih plošč je plošča za razširitev portov DFR0548, prikazana na sliki 3.
Ker je plošča K10 nameščena pod pravim kotom na tej plošči, se ne prilega za vgradnjo v ohišje. Vendar sem kupil ploščo Sparkfun BOB-164 (slika 4), ki se namesti v isti ravnini kot K10 in se mi je zdela bolj praktična.
Programiranje UNIHIKER K10 plošče
Ker je UNIHIKER K10 namenjen mladim in tistim, ki se izobražujejo, je DFRobot razvil programski jezik Mind+, ki je zasnovan tako, da je prijazen do otrok. Mind+ je zasnovan na jeziku Scratch, ki ga je za otroke razvil MIT. Je vizualno usmerjen – uporabnik postavlja medsebojno povezane bloke, od katerih vsak opredeljuje programsko izjavo.
Prvič sem se s Scratchem srečal, ko je bil predstavljen Raspberry Pi, saj ga je Raspberry Pi promoviral kot dober jezik za uvajanje otrok v računalniško programiranje. Osebno me Mind+ ne zanima, vendar si lahko ogledate preprost primer v sliki 5.
Bolj me je zanimalo, kakšna podpora za Arduino je na voljo za K10 in, v manjši meri, kakšna podpora za MicroPython. Oboje je na voljo, zato si najprej oglejmo podporo za Arduino.



Podpora za Arduino
Ker K10 uporablja priljubljeni mikrokontroler ESP32S3, lahko razvijate programe za ploščo samo z uporabo paketa podpore za ploščo Espressif ESP32S3, ki ga morda že uporabljate. Vendar ta BSP ne podpira neposredno perifernih naprav na K10. Zato DFRobot ponuja prilagojen Arduino BSP za K10.
K10 BSP je relativno enostaven za namestitev. Je dobro opisan v Wiki o izdelku, ki ga najdete na:
https://www.unihiker.com/wiki/K10/
Natančneje, poglejte v razdelek „Začetek/Arduino IDE“ na Wikiju. Upoštevajte, da URL ni domena DFRobot, ampak domena Unihiker. Menim, da je UNIHIKER ločena entiteta od DFRobot. Kontaktna oseba, s katero sem komuniciral, je bila del ekipe UNIHIKER, ne DFRobot.
Ko je K10 BSP naložen, odprite meni Tools (Orodja) in izberite ploščo. K10 se bo prikazal v razdelku UNIHIKER kot Unihiker K10. V meniju Tools (Orodja) je še nekaj drugih nastavitev, ki so vredne omembe:
Port: To se razlikuje od računalnika do računalnika, vendar če je K10 priključen na vaš računalnik, se bo prikazal kot COMx (naprava družine Esp32).
USB-CDC ob zagonu: To mora biti nastavljeno na Enabled (če želite uporabljati ukaze Serial()). Za razliko od nekaterih drugih plošč ESP32/ESP32S3, K10 nima vgrajenega čipa USB-Uart bridge, zato je treba omogočiti notranji USB-UART vmesnik ESP32S3. Omogočanje USB-CDC ob zagonu pa NI potrebno za namene programiranja Flash pomnilnika.
Shema particij: Običajno je pri mikrokontrolerju ESP32S3 na voljo več shem particij, zlasti ker obstajajo različne možnosti, odvisno od količine nameščenega Flash pomnilnika. Vendar pa imate pri K10 BSP na voljo le eno možnost: 16 MB Flash pomnilnika (3 MB za aplikacije/9,9 MB za FATFS). To lahko pojasnimo v naslednjem vnosu.
Model: noben. Za različne razpoložljive primere AI/ML se model sklepanja in podatkovni nizi naložijo v particije FATFS in SPIFFS. Da bi lahko uporabili te primere, morate izbrati model – EN ali CN (angleški, kitajski). Tudi če uporabite privzeto izbiro modela „none“, boste za svojo aplikacijo imeli na voljo le 3 MB, saj ni drugih možnosti particij.
PSRAM: OPI PSRAM Modul ESP32-S3-WROOM-1 na K10 vsebuje 8 MB PSRAM-a. To sem preizkusil s skico ESP32S3, ki je potrebovala PSRAM, in delovalo je brez težav.
Ko naložite program v Flash pomnilnik ESP32S3, se postopek razlikuje glede na izbrani model. Če izberete »none«, bo programiranje potekalo tako, kot bi pričakovali. Če pa izberete EN ali CN, bo različica esptool, vsebovana v K10 BSP, delovala nekoliko drugače. Opazili boste, da izvaja programiranje v 3 različnih pomnilniških območjih in da traja veliko dlje kot običajno. To se zgodi, ker nalaga model sklepanja in »glasovne« podatke v dve ločeni particiji. Z uporabo brskalnika espconnect sem pridobil particijski zemljevid ESP32S3, pri čemer je bil model nastavljen na EN.
To je razvidno iz slike 6. Vidite lahko, da pomnilniški prostor ni razdeljen točno tako, kot je prikazano v možnosti »16M Flash (3MB App/9.9MB FATFS« v shemi razdelitve. Tovarniška particija je prostor, kjer se nahaja vaša aplikacija, in je velika 5 MB. Model particija je velika 4,5 MB in je prostor, kjer se običajno nahaja SPIFFS. Particija voice_data je velika 2,5 MB in je prostor, kjer se običajno nahaja FATFS.
Če se vrnete na model „none“, bo vsako nadaljnje programiranje vrnilo model v normalno stanje in naložilo le vašo dejansko skico (razen če izberete skico, ki uporablja AI/ML). Vendar pa bodo particije model in voice_data ostale aktivne in podatki bodo ostali shranjeni. Podporno osebje UNIHIKER mi je povedalo, da ko enkrat izberete model, ni mogoče odstraniti teh dveh prilagojenih particij. Za brisanje sem uporabil prej omenjeni pripomoček espconnect. Po tem sta obe particiji vsebovali vrednosti „0xFF“, kar je stanje izbrisanega Flash pomnilnika. Ugotovil sem tudi, da lahko particijo „model“ ponovno uporabite za datotečni sistem SPIFFS.
Ne priporočam, da izbrišete ves Flash pomnilnik, saj potem nisem mogel več naložiti primerov prepoznavanja glasu ali slike. Na srečo sem naredil varnostne kopije teh dveh particij (z uporabo espconnect) in po obnovitvi podatkov sem lahko naložil primere prepoznavanja slike/glasu.
Ne vem zakaj, ampak v meniju Tools, če izberete katero koli ploščo, ki vsebuje mikrokontroler ESP32S3 z 16 MB Flash pomnilnika, sta na voljo le dve možnosti za particijo, ki določata 2 ali 3 MB za particijo APP. Torej, ne glede na to, ali uporabljate te druge particije, je 3 MB očitno največji razpoložljivi pomnilniški prostor za aplikacije z ESP32S3.
Zaključek
V tem delu sem na kratko predstavil HW plošče in osnove različnih vrst programiranja. V 2. delu članka bom predstavil Arduino primere, TFT displej, ki se nahaja na K10 plošči, avdio možnosti te plošče ter podporo za kamero.
