Avtor: Brian Millier
V drugem delu tega članka, ki je bil objavljen v februarski številki revije Svet Elektronike, sem predstavil Uno Q praktične primere programov, ki so vključevali enostavne primere, kot je utripanje LEDice, do programov, ki so zajemali in prepoznavali objekte na sliki.
V zadnjem delu članka bom podal nekaj komentarjev glede drugih programskih primerov, ki so na voljo. Pokazal bom, kako je z nadgradnjami Uno Q, kako namestiti ADB programe, predstavil bom tudi naprednejše programiranje klicev oddaljenih postopkov.
Ta vsebina je samo za naročnike
Komentarji glede drugi primerov programov
Na voljo je 24 primerov. Tisti, ki niso navedeni tukaj, so tisti, za katere sem menil, da so podobni opisanim primerom, ali za katere nisem imel potrebne zunanje strojne opreme.
Mnogi primeri uporabljajo spletno nadzorno ploščo. Tako koda C++ v sketch.ino, kot koda Python, ki teče na Linux SOC, na splošno nista preveč zapleteni. Podjetje Arduino poudarja, da večino »težkega dela« opravijo sami brick-i. Čeprav je to verjetno res, si oglejte tudi druge datoteke, ki so del teh primerov – glejte sliko 7, ki prikazuje datoteke, potrebne za primer Uno Q Pin Toggle. Ugotovili boste, da so različne html datoteke (index.html itd.) precej dolge in vključujejo nekaj zapletenega HTML kodiranja.
Obstajajo tudi datoteke, ki vsebujejo javascript programiranje, ki so prav tako precej zapletene. Nobena od nadzornih plošč, uporabljenih v teh primerih, ni posebej zapletena, če upoštevamo vse potrebne HTML datoteke.
Brick-i sami so za uporabnika v tem trenutku v bistvu »črne skrinjice«. Program App Lab ima na levi strani zavihek Brick. Opisuje njihovo uporabo in API-je, ki so potrebni za dostop do njih. Vendar pa v primeru Brick-i za strojno učenje ni nobenega navedka, kje so shranjene datoteke za učenje, niti kako bi lahko ustvarili svoje modele – vsaj kakor sem ugotovil.


Nadgradnje
Uno Q sem kupil takoj, ko je bil na voljo v severni Ameriki. Zato sem pričakoval, da bom več mesecev dobival posodobitve programske opreme/firmware-a. Nekoliko me je presenetila pogostost, s katero so se pojavljale – zdelo se mi je, da se je vsakič, ko sem vklopil ploščo, sprožila posodobitev. Čeprav bodo mnoge od teh posodobitev že izšle, preden boste prebrali ta članek, bo plošča, ki jo boste prejeli, vsebovala zgodnjo tovarniško nameščeno različico firmware-a in bo potrebovala te posodobitve.
Če ste v preteklosti že uporabljali Arduino IDE, ste verjetno seznanjeni z njegovim precej enostavnim pristopom k posodabljanju paketov podpore za plošče in knjižnice – to je ena najboljših lastnosti tega IDE. Všeč mi je, da je ta proces popolnoma prostovoljen – občasna posodobitev plošče ali knjižnice lahko „pokvari“ obstoječo funkcijo ali rutino, ki jo uporabljate v tekočih projektih. Zato je dobro, da lahko takšne posodobitve preložite. Arduino IDE vam omogoča tudi ponovno nalaganje starejših različic knjižnic ali paketov podpore za plošče, če morate nadaljevati z razvojem nekaterih obstoječih projektov.
V primeru Uno Q plošče postopek posodobitve trenutno ni prostovoljen. Menim, da je glavni razlog za to dejstvo, da imate pri Uno Q opravka s tremi neodvisnimi „računalniki“, ki so med seboj povezani in soodvisni:
STM32U585 Arm MCU,
Qualcomm QRB2210,
PC, ki ga uporabljate za razvoj.
Poglejmo si to medsebojno odvisnost podrobneje. Mikrokontroler STM32U585 Arm je programiran v C++, za pisanje kode pa lahko uporabite obstoječi Arduino 2.x.x IDE (ali pa Arduino App Lab). Za nalaganje kode na STM32U585 mikrokontroler pa se uporabljata Qualcomm QRB2210 in operacijski sistem Linux. Poleg tega je Zephyr RTOS, ki ga uporablja mikrokontroler STM32U585, vsebovan v image Linux datoteki, ki je bila tovarniško vnaprej nameščena na ploščo. Zdi se, da se posodobitve Zephyr RTOS mikrokontrolerja STM32U585 izvedejo, ko se posodobi image Linux datoteka, vsebovana v pomnilniku eMMC plošče. Druga medsebojna odvisnost vključuje program Arduino App Lab, ki je privzeti razvojni IDE, ki ga ponuja Arduino. To sta dva popolnoma ločena programa, ki delujeta bodisi na vašem računalniku, bodisi neposredno na plošči Uno Q pod operacijskim sistemom Linux. V obeh primerih je uporabniški vmesnik, ki ga vidite, identičen in deluje v bistvu na enak način. Če program App Lab teče na računalniku, lahko komunicira s ploščo Uno Q prek USB ali WiFi (v omrežnem načinu). Oba App Lab programa komunicirata s strojno opremo/firmware na plošči Uno Q. Zato morajo biti vse večje posodobitve firmware plošče Uno Q ali katerega koli od App Lab programov, sinhronizirane.
Na neki točki se bo prikazalo sporočilo, da poteka prisilna posodobitev programske opreme App Lab na plošči Uno Q prek WiFi. Ko bo posodobitev končana, se bo ob naslednjem zagonu App Lab na računalniku takoj začel postopek posodobitve, da bo program sinhroniziran z novo različico App Lab na plošči Uno Q.
Tabela 1 prikazuje štiri glavne vrste posodobitev in kako se izvedejo. V 1. delu sem opisal postopek posodobitve Linux image-a s Flash Update Tool orodjem na računalniku prek USB-ja. Omenil sem, da bo to izbrisalo vaše poverilnice za WiFi in vse spremembe, ki ste jih naredili na Linux namizju. Vendar sem kasneje izvedel, da bodo izbrisani tudi vsi programi, ki ste jih morda napisali z App Lab! O tem bom govoril kasneje.
Upoštevajte, da se veliko posodobitev strojne programske opreme na Uno Q izvaja prek njegovega WiFi vmesnika. To mi je povzročalo nekaj težav. Domača pisarna, v kateri delam, je precej oddaljena od moje WiFi dostopne točke. Moj računalnik je povezan prek Etherneta, tj. WiFi se ne uporablja. WiFi tudi ni bil problem za različne MCU-je z WiFi, ki jih uporabljam, kot so ESP32, Arduino Nano Matter ali Raspberry Pi SBC-ji. Uno Q ni imel nobenih težav z zaznavanjem/povezovanjem z mojim brezžičnim usmerjevalnikom (WAP). Vendar je bila moč signala, ki jo je prikazoval, včasih šibka in sem imel težave z izgubo povezave. Uno Q običajno uporabljam v načinu SBC ali v omrežnem načinu. To storim zato, ker je edini način za zagon programov Uno Q, ki zahtevajo USB-periferne naprave (kamero, mikrofon itd.), priključitev USB-C-vmesnika. Ko je ta vmesnik priključen, lahko priključite miško, tipkovnico in HDMI-monitor, zato je uporaba načina SBC priročna. Vendar v tej konfiguraciji Uno Q nima neposredne povezave z vašim računalnikom prek USB. Če želite zagnati program App Lab na svojem računalniku, je edini način za povezavo z Uno Q prek WiFi, in sicer v načinu Network.
V mojem primeru je šibka WiFi povezava pomenila, da program App Lab na računalniku pogosto ni zaznal prisotnosti plošče Uno Q. Tudi ko je bil WiFi signal zadovoljiv, je App Lab, ki je deloval na računalniku v omrežnem načinu, potreboval do minuto, da je zaznal Uno Q. Zato je bila včasih izguba časa čakati na povezavo, ki se nikoli ni zgodila, ker je bil WiFi signal šibak.
Poskušal sem popraviti ta šibek WiFi signal tako, da sem v svojo pisarno dodal WiFi repetitor. Ta WiFi repetiror se priključi na Ethernet stikalo/vozlišče v moji pisarni. Uno Q sem preklopil na to dostopno točko WiFi ojačevalnika in dobil močan WiFi signal z dodeljenim IP-naslovom v istem podomrežju kot moj pisarniški računalnik. V dokumentaciji Arduina je navedeno, da morata biti Uno Q in vaš računalnik v istem omrežju, da lahko uporabljata omrežni način. Vendar pa App Lab v tem primeru ni mogel zaznati Uno Q, čeprav je bil v istem omrežnem podomrežju kot moj računalnik. Na enak način bi bil neuspešen tudi poskus dostopa do Uno Q prek .local iz mojega spletnega brskalnika ali iz SSH. Ta način naslavljanja plošče Uno Q prek omrežja je deloval brez težav, dokler sem uporabljal svoj običajni WAP (razen v primeru šibkega signala v moji pisarni). Program PC App Lab mora prav tako uporabljati metodo .local, kar bi pojasnilo, zakaj ni zaznal Uno Q, ko sem poskušal uporabiti WiFi repetitor.
Potreba po zanesljivi WiFi povezavi med razvojem programske opreme je za Uno Q pomembna – glejte nedavni prispevek na forumu Arduino: Trenutno App Lab zahteva aktivno internetno povezavo vsakič, ko se povežete s ploščo UNO Q. To je bilo prvotno uvedeno, da bi se zagotovilo, da imajo uporabniki najnovejšo različico App Lab in druge programske opreme Arduino, tudi če je plošča opremljena s starejšo različico. Zavedamo se, da je to problematično, in delamo na rešitvi, da boste lahko preskočili posodobitve in uporabljali ploščo UNO Q, da je ne bi bilo potrebno povezati z internetom. Rešitev bo objavljena v eni od naslednjih izdaj App Lab.
Lokacije datotek in ravnanje z njimi
Programsko opremo App Lab lahko uporabljate na tri načine:
Single Board Computer način,
Aplikacijski laboratorij na osnovi osebnega računalnika z USB povezavo,
Aplikacijski laboratorij na osnovi osebnega računalnika z omrežno povezavo.
Čeprav to ni očitno, ne glede na to, kako izvajate App Lab, so vse programske datoteke (tako za priložene primere, kot za vaše lastne programe) shranjene v eMMC Uno Q pomnilniku. Poleg dejanskih zagonskih datotek, ki morajo seveda biti shranjene v pomnilniku Uno Q, so tam shranjene tudi vse datoteke izvorne kode. To se razlikuje od tega, kar se zgodi, če za razvoj kode za druge mikrokontrolerje uporabljate Arduino IDE na svojem računalniku – izvorna koda ostane na vašem računalniku, v Flash pomnilnik ciljne plošče pa se naloži samo zagonska datoteka.
Če gremo še korak dlje, je nekoliko nejasno, katere funkcije program PC App Lab dejansko opravlja. Primeri, ki jih zagotavlja Arduino, obstajajo le v pomnilniku eMMC Uno Q (čeprav so dobro skriti). Izvorna koda za programe, ki jih napišete sami (ali spremenite iz primerov), se nahaja v mapi Home/Arduino/ArduinoApps na Uno Q.
Ni jasno, ali App Lab, ki teče na osebnem računalniku, dejansko izvaja prevajanje/povezovanje kode skice, kot tudi vse korake, potrebne za nastavitev Pythonovega dela programa. Pri delovanju v načinu SBC program App Lab, ki teče na Uno Q, vsekakor izvaja vse te operacije. Vendar, ko App Lab teče na osebnem računalniku, se mi zdi, da osebni računalnik nadzira samo program App Lab, ki teče na QRB2210 SOC Uno Q. Vsa statusna sporočila, ki jih vidite na osebnem računalniku na zaslonu App Launch, verjetno prihajajo iz QRB2210 in se samo posredujejo App Lab programu za prikaz na osebnem računalniku.
Iz radovednosti sem izmeril čas, ki je bil potreben za »izgradnjo« primera Hey Arduino. V načinu SBC je to trajalo 38 sekund. Ista operacija z uporabo programa App Lab na računalniku je trajala 41 sekund. Ker je procesor i7 v mojem namiznem računalniku precej močnejši od QRB2210, me dejstvo, da je bil proces počasnejši, še dodatno prepričuje, da vse delo opravlja QRB2210. Nekoliko počasnejši čas, ki sem ga opazil pri računalniku, je verjetno čas, ki je potreben za pošiljanje kontrolnih in statusnih sporočil med obema napravama.
Kot je omenjeno drugje v tem članku, se ob prisilni posodobitvi datoteke Linux Image izbrišejo vsi kopirani primerjalni programi in vaši lastni programi. Enako velja za vaše WiFi poverilnice in druge prilagoditve, ki ste jih morda naredili na namizju Linux.
Zato morate imeti na voljo nekaj načinov za varnostno kopiranje teh datotek. Če kateri od teh programov vključuje USB-napravo (kamero, mikrofon itd.), boste morali priključiti USB-C vmesnik na Uno Q. Če imate na voljo tipkovnico, miško in HDMI-monitor, lahko Uno Q uporabljate v načinu SBC. V tem načinu je enostavno priključiti USB-ključ in kopirati datoteke z uporabo datotečnega upravitelja Thunar ali iz ukazne vrstice Linux (CLI).
Če pa ne morete delovati v načinu SBC, morate poiskati drugo rešitev. Poznam uporabo SSH za komunikacijo z drugimi Linux SBC-ji iz svojega računalnika. V primeru Uno Q SSH deluje, vendar se morate najprej prijaviti v Linux OS Uno Q in nastaviti uporabniško ime in geslo. Nato lahko uporabite SSH za povezavo z Uno Q na enega od naslednjih načinov:
arduino@
(IP# najdete na spodnji vrstici stanja v App Lab v načinu omrežja)
arduino@.local
(deluje samo, če sta računalnik in Uno Q v
istem omrežju)
SSH vam omogoča dostop do Linuxove lupine Uno Q, vendar ne kopira datotek. To lahko stori drug SCP program, vendar ga nisem uporabljal.
Zahvaljujoč povratnim informacijam iz foruma Arduino (oddelek Uno Q) sem izvedel, da lahko program ADB prenese datoteke. ADB pomeni Android Debug Bridge in sem ga redko uporabljal na svojem Android telefonu. Vendar deluje tudi z operacijskim sistemom Linux. Tukaj je navodilo, kako namestiti in uporabljati ta program.
Namestitev in uporaba ADB
Na Uno Q ni treba namestiti ničesar dodatnega, vendar je treba na računalnik naložiti program ADB. ADB komunicira prek USB vmesnika in samodejno poišče ploščo Uno Q, ko je ta prek USB-ja priključena na računalnik. ADB je vmesnik ukazne vrstice (CLI), zato ni tako enostaven za uporabo kot program GUI za Windows, vendar je vsestranski. Na osnovni ravni se ADB lahko uporablja za zagon lupine na sistemu Linux Uno Q, podobno kot SSH. Če želite namestiti ADB na računalnik z operacijskim sistemom Windows, v ukazni vrstici vnesite:
winget install Google.PlatformTools
S tem boste namestili ADB in tudi orodje za programiranje. Ob koncu prenosa vas bo program pozval, da zaprete in ponovno odprete ukazno vrstico, saj dodaja spremenljivke v okoljsko datoteko računalnika (kar vam omogoča, da ADB zaženete iz katere koli mape).
Za Mac OS in Linux računalnike glejte naslednje:
https://docs.arduino.cc/tutorials/uno-q/ADB/
Da preizkusite komunikacijo med računalnikom in Uno Q ploščo, v ukazni vrstici računalnika vnesite:
ADB devices
in videli boste 10-mestno številko + »device«. ADB shell vas bo pripeljal v Linux shell na Uno Q. Z ADB ni potrebno ime uporabnika/geslo. Za varnostno kopiranje datotek/map, ki se nahajajo na Uno Q, v ukazni vrstici računalnika izvedite naslednje:
ADB pull
Tako je na primer za varnostno kopijo aplikacije Uno Q pot
/home/arduino/ArduinoApps/
Upoštevajte, da bo ADB pri prenosu aplikacij ustvaril nekaj napak – »Takšna datoteka ali mapa ne obstaja«, ko dostopa do mape .cache. To ni resničen problem, saj se mapa .cache ponovno ustvari, kadar App Lab naloži aplikacijo in ne najde mape .cache. Vendar morate to nepopolno mapo .cache izbrisati s svojega računalnika, preden jo prenesete nazaj na Uno Q (tj. obnovite aplikacijo iz varnostne kopije). Zame je flash disk najlažji način za prenos datotek, in sicer v načinu SBC.
Klici oddaljenih postopkov
Poleg USB perifernih naprav so edini senzorji, ki jih je mogoče enostavno priključiti na Uno Q, tisti, ki se lahko povežejo s STM32U585 prek vrat I2C, SPI ali UART. Kamere in zasloni, ki uporabljajo vmesnike MIPI CSI, DSI, so izključeni, saj so priključeni samo na zelo goste konektorje JMISC in JMEDIA Uno Q. Trenutno nisem slišal za razpoložljivost Arduino nosilne plošče, ki bi se povezovala s tema dvema konektorjema.
Če SMR32U585 obdeluje vse podatke senzorjev, se postavlja naslednje vprašanje: kako se ti podatki prenesejo na Qualcomm Linux SOC. Ker ste kupili ploščo z 2 ločenima procesorjema, bi bilo smiselno v celoti izkoristiti Linux SOC zaradi njegove večje zmogljivosti obdelave. Poleg tega je WiFi modul Uno Q neposredno dostopen samo prek Linux SOC.
Arduino je zagotovil visoko raven metode za pošiljanje podatkov med dvema procesorjema plošče. To se imenuje Remote Procedure Call (daljinski klic postopka) in je implementiran tako na Qualcomm SOC kot na STM32U585.
Da bi uporabili funkcijo RPC, morate v svoji skici na STM32U585 na začetku programa umestiti naslednji ukaz:
include
S tem se namestijo rutine usmerjevalnika MessagePack RPC na STM32U585. Usmerjevalnik MessagePack RPC omogoča RPC klice med več odjemalci MessagePack RPC, povezanimi v omrežju z zvezdasto topologijo, kjer je usmerjevalnik osrednji vozlišče. V tem primeru se zdi, da funkcijo usmerjevalnika opravlja STM32U585, edini odjemalec pa je Qualcomm SOC. Za procesor Qualcomm SOC ne obstaja nobena podobna zahteva, razen da sem ugotovil, da so vsi primeri, ki so uporabljali funkcijo RPC, vključevali tudi naslednje v Python programu tega primera:
from arduino.app_utils import *
Ko so te direktive vzpostavljene, za uporabo RPC uporabite funkcijo Bridge, ko želite izmenjati podatke. RPC lahko obdeluje booleanske, numerične (int, float itd.) in String spremenljivke. Prav tako lahko izmenjuje podatke v poljih, na primer binarne podatke. Vendar noben od primerov, ki jih je zagotovil Arduino (in so bili na voljo, ko sem to pisal), ni prikazoval prenosa polj. Čeprav bi pričakovali, da rutina, ki izmenjuje podatke med dvema procesorjema, te informacije posreduje z imenom spremenljivke in vrednostjo spremenljivke, funkcija RPC deluje nekoliko drugače. Poleg teh dveh parametrov posreduje tudi ime rutine odjemalca, za katero pričakuje, da bo obdelala te podatke. Zato lahko uporabite RPC-je za posredovanje spremenljivk več različnim rutinam odjemalca, imena teh spremenljivk pa bodo specifična (lokalna) za to rutino. Poglejmo si funkcijo RPC, vzeto iz primera Uno Q Pin Toggle, ki ga je zagotovil Arduino. V Python programu spletni nadzorni panel zagotavlja dve spremenljivki, ki ju nadzira uporabnik s premikanjem stikal, povezanih z vsakim od pinov STM32U585 GPIO Uno Q:
name – to je ime pina (uporablja se nomenklatura Arduino GPIO)
state_for_hw – to je stanje visoko/nizko, v katerega želimo, da preklopi pin.
Te informacije o stanju pinov pošljemo v STM32U585, da lahko program sketch.ino nastavi imenovani pin v ustrezno stanje. Za to v programu Python uporabimo naslednji ukaz:
Bridge.call(»set_pin_by_name«, name,
state_for_hw)
Funkcija Bridge.call sproži prenos podatkov. Njen prvi parameter je ime servisne rutine, ki bo sprejela te podatke in se izvaja v programu sketch.ino C++ na STM32U585. Imenovana spremenljivka in njena vrednost (v tem primeru Boolean) se preneseta kot drugi in tretji parameter.
Na mikrokontrolerju STM32U585 mora sketch.ino zagnati funkcijo RPC v oddelku setup() z vključitvijo izjave Bridge.begin();. To inicializira usmerjevalnik RPC, podobno kot funkcija begin() deluje z razredi C++. Vendar pa potrebujete še eno izjavo, da dokončate nastavitev RPC:
Bridge.provide(»set_pin_by_name«,
set_pin_by_name);
Na prvi pogled bi se zdelo, da je vir podatkov mikrokontroler STM32U585, kar pa ni res. To si lahko predstavljate kot podobno izjavi, ki bi jo uporabili za zagotovitev prekinitvene rutine (ISR) za prekinitev spremembe pinov ali časovnika. Vendar pa bo v tem primeru usmerjevalnik RPC prejel niz „set_pin_by_name” kot ime rutine, za katero pričakuje, da bo obdelala dohodne podatke. Drugi parameter, set_pin_by_name, je dejansko ime funkcije, ki se uporablja v programu sketch.ino za sprejemanje/obdelavo teh podatkov. Upoštevajte, da imata oba parametra tukaj enako ime, vendar je to le zaradi jasnosti – dejanska funkcija bi lahko imela katero koli ime, ki bi ga izbrali, če bi se ime, uporabljeno tukaj, uporabljalo tudi drugje v programski kodi, kjer je opredeljena koda za to rutino.
V tem primeru imamo torej naslednjo servisno rutino:
void set_pin_by_name(String name, bool s) {
int idx = findIndex(name.c_str());
if (idx < 0) return;
// neznano ime
digitalWrite(kPins[idx].pin, s ? HIGH : LOW);
}
Dva parametra, ki ju prejme RPC usmerjevalnik, sta enaka tistim, ki jih pošlje program Python: niz imena pina in njegova boolean vrednost (oz. vrednosti). Ime pina se pretvori v String, ki se konča s C, in findIndex rutina to pretvori v indeks v kPins polje, ki zagotavlja konstanto, ki jo lahko uporabi rutina digitalWrite(). To nastavi GPIO pin v skladu z vrednostjo boolean spremenljivke s. Izraz s ? HIGH: LOW preprosto pretvori resnično/neresnično stanje spremenljivke »s« v konstante HIGH, LOW, za uporabo v digitalWrite() ukazu. Z RPC funkcijo še nisem preživel veliko časa. Vendar me je zanimalo, koliko časa bi potreboval za prenos preproste podatkovne strukture, kot je ime pina/logično stanje, prikazano v tem primeru. Da bi to storil, sem najprej spremenil Python program, da sem dodal drugi ukaz
Bridge.call(»set_pin_by_name«, name,
state_for_hw
takoj za prvim. Nato sem modificiral set_pin_by_name rutino v sketch.ino, da na začetku te rutine nastavit določen GPIO pin na visoko, kot tudi ukaz, da na koncu te rutine isti GPIO pin ponovno nastavite na nizko. S temi spremembami programa sem s pomočjo svojega osciloskopa ugotovil, da je klic RPC trajal 8,3 ms. Čas, potreben za STM32U585, da izvede spremembo GPIO-pinov v set_pin_by_name() rutine je bil 2.7 us (ali 4 us ko je tekel Uno Q v SBC načinu).
Na podlagi tega poskusa sem sklenil, da bi bilo hitro prenašanje večjih količin podatkov med dvema procesorjema mogoče le, če bi rutina RPC lahko obdelovala nize (po možnosti binarne nize). Verjetno bi v tem primeru zamuda 8,3 ms nastala le enkrat na prenos niza. Nimam posebnih izkušenj s Pythonom, vendar sem na forumu Arduino Uno Q našel nekaj informacij o prenosu nizov z uporabo RPC. V nadaljevanju so navedene osnovne programske strukture, potrebne za pošiljanje nizov v obe smeri. Velikost prikazanega niza (104 bajtov) je tista, ki bi bila potrebna za upravljanje matrike LED 8 x 13 na Uno Q.
Od STM32U585 MCU do Pythona:
Sketch.ino-
uint8_t frame[104];
Bridge.notify(»frame_packet«, frame, 104);
Python –
@bridge.on(»frame_packet«)
def handler(data: bytes):
grid = list(data
Od Pythona na STM32U585 MCU
Python-
frame = bytes(your_flattened_8x13_list)
bridge.notify(»frame_packet«, frame)
Sketch-
@bridge.on(»frame_packet«)
void handleFrame(uint8_t* data, size_t len) {
// len should be 104
// process your LED grid here
}
Različne ugotovitve
Med delom z Uno Q sem odkril nekaj stvari, ki so vredne omembe, saj vam lahko prihranijo nekaj časa. Tukaj je nekaj izmed njih:
V programu App Lab med uporabo urejevalnika deluje funkcija Kopiraj z desnim klikom, funkcija Prilepi pa je sivkasta. Vendar lahko uporabite bližnjice na tipkovnici CTRL-C in CTRL-V.
Pri delovanju v načinu SBC je za zagon programa z namizja potreben le en klik. V primeru App Lab bo trajalo nekaj sekund, preden se kaj prikaže na zaslonu, z dvojnim klikom pa se zaženeta dva ločena primerka programa.
Moj glavni HDMI monitor je deloval brez težav z Uno Q, ko sem ga priključil na USB-C hub. Imam še en monitor, ki ima samo DVI vhod, ki deluje brez težav z mojimi računalniki in Raspberry Pi, če uporabim kabel DVI-HDMI. Vendar Uno Q tega monitorja ni prepoznal, ko sem ga priključil na USB-C hub.
Gumb z oznako »Power« na Uno Q ne izklopi plošče. Če ga pridržite 5 sekund, se Linux ponovno zažene. Podobno tudi izvedba ukaza Shutdown iz namizja Linuxa samo ponovno zažene Linux. Iz CLI lahko ploščo izklopite z vnosom ukaza Sudo halt.
Če pozabite geslo za Linux, morate po mojih izkušnjah ponovno namestiti image Linuxa z uporabo Flash orodja na računalniku. To bi izbrisalo tudi vse programe, ki ste jih napisali, pa tudi vaše podatke za WiFi itd.
Shema plošče Uno Q (vseh 24 strani) je na voljo na:
https://docs.arduino.cc/resources/schematics/ABX00162-schematics.pdf
Kako nastaviti samodejni zagon aplikacije ob zagonu Uno Q? V Linux CLI Uno Q vnesite naslednje:
arduino-app-cli properties set default
je ime aplikacije, ki jo želite nastaviti kot privzeto aplikacijo, tj. tisto, ki se bo zaganjala ob zagonu/vklopu naprave. Upoštevajte, da če naredite kopije priloženih primerov, bo ime datoteke „kopija-ime-primera“. Mislim, da v imenih aplikacij, ki vsebujejo več besed, ne morete uporabljati presledkov. Ko določite aplikacijo kot privzeto, se bo ta prikazala v App Lab z besedo »privzeta« kot del ikone tega programa.
Tukaj je še nekaj drugih CLI ukazov, ki jih lahko uporabite v zvezi z aplikacijami:
arduino-app-cli app list
arduino-app-cli properties get default
Če želite odstraniti obstoječo privzeto aplikacijo, uporabite ukaz set default (prikazan zgoraj), ne da bi navedli ime aplikacije.
Ko se aplikacija samodejno zažene, se ne morete povezati z Uno Q iz PC App lab v omrežnem načinu.
Zaključki
To je še zgodnja faza za Uno Q. V zadnjem mesecu sem ga večkrat vklopil in vsakič je bila potrebna prisilna posodobitev. Te so bile precej obsežne – izpis dnevnika je lahko obsegal več strani. Zaradi teh posodobitev so bile odpravljene nekatere zgodnje težave, s katerimi sem se srečal. Do takrat, ko boste to prebrali, se bo še kaj spremenilo.
Nisem prepričan, katero „nišo“ na trgu bo Uno Q zapolnil. Kot enoploščni Linux računalnik Uno Q ni tako priročen za uporabo, kot Raspberry Pi 4 ali 5. Potrebno bi bilo veliko časa, da bi lahko konkuriral Raspberry Pi v smislu podporne dokumentacije ali se primerjal z veliko skupnostjo uporabnikov Raspberry Pi. Njegova glavna prednost bi lahko bila vključitev sekundarnega mikrokontrolerja STM32U585, kot tudi standardni pinout Arduino Uno, ki omogoča uporabo velikega števila razpoložljivih Arduino ščitov. Tudi 5 V toleranca logične ravni na digitalnih GPIO linijah STM32U585 bi lahko bila za nekatere zelo koristna.
Arduino App Lab je bil lepo zasnovan, da združuje vse operacije, potrebne za programiranje dveh procesorjev v Pythonu in C++, ter avtomatizira postopek »gradnje«. Če bo Arduino nadaljeval z razvojem uporabnih Brick-ov, bo to prav tako velika prednost.
