Avtor: Janez Pirc
Optimizacija razvoja ugnezdenih grafičnih uporabniških vmesnikov z GUI-O rešitvijo 1. del
Razvoj ugnezdenih sistemov se sooča z neprestanimi izzivi, saj postajajo mikrokontrolerji in ugnezdeni računalniki vedno kompleksnejši, hkrati pa tehnološki napredek omogoča njihovo cenovno dostopnejšo uporabo.
Kljub pojavu orodij, ki naj bi olajšala razvoj, se zahtevnost razvoja ugnezdenih sistemov nenehno povečuje. Orodja sicer na prvi pogled obljubljajo olajšanje procesa, vendar je za resen razvoj potrebno globoko razumevanje kompleksnih sklopov.
Tržne zahteve po zmogljivih in odzivnih grafičnih uporabniških vmesnikih (GUI) nenehno rastejo, kar postavlja dodatne izzive pred razvijalce. Ta članek se osredotoča na raziskovanje teh izzivov ter prednosti uporabe inovativne rešitve za razvoj GUI. Trg in marketinški trendi zahtevajo, da so zasloni naprav veliki in zmogljivi, kar vodi do logičnega odgovora tehnike – izdelava GUI na ugnezdenem računalniku.
Optimizacija razvojnega procesa vodi v specializacijo razvijalcev za različne dele naprave, vendar pa ločeni programerji za ugnezdene mikrokontrolerje in GUI na računalniku dodajajo kompleksnost tudi v samo organizacijo dela. S časom postanejo manjši koraki reševanja parcialnih problemov manj učinkoviti, kar zahteva celosten pogled na napravo. Ta članek bo raziskal te probleme ter ponudil rešitev.
Članek predstavlja alternativno metodo za izdelavo grafičnega uporabniškega vmesnika (GUI), ki se razlikuje od klasičnih pristopov. Pri tej metodi je GUI celovit program, ki deluje kot tolmač ukazov iz mikrokontrolerja. Prvi del članka podrobno predstavi to inovativno rešitev, medtem ko se drugi del osredotoča na razvojni proces in vpliv uporabe novega pristopa na celoten razvoj izdelka.
Namen članka je prikazati prednosti, ki jih ta novi pristop prinaša. Sodoben GUI na ločenem HW oziroma na ugnezdenem PC je danes optimalnejša rešitev. Ločena HW arhitektura pa v razvojni proces prinese nove probleme. Razvoj SW arhitektur ter analiza problemov postopno ponovno združi izdelavo SW na enem mestu. Bistvo pa je, da se ob tem ohrani prednost ločene HW arhitekture – sodoben GUI na PC. Rešitev odstopa od trenutnih trendov pri razvoju sodobnih GUI in oddaljenega dostopa (IoT) in je na nek način logičen razvojni trend dalje.
Komu je članek namenjen?
Ta članek je namenjen razvijalcem elektronike, programerjem ugnezdenih sistemov ter vodjem razvoja, ki se srečujejo s kompleksnimi izzivi pri razvoju naprav in njihovih uporabniških vmesnikov. Če iščete zunanje podjetje za izdelavo sodobnega grafičnega uporabniškega vmesnika (GUI) in oddaljeni dostop (IoT) za vašo napravo, je branje tega članka nujno.
Pri zasnovi članka sem se soočal z dilemo, ali naj najprej obravnavam težave pri razvoju naprav z ugnezdenimi sistemi ter nato predstavim rešitve, ali obratno. Izbral sem vrstni red, ki je primernejši za programerje ugnezdenih mikrokontrolerjev ter najprej opisal samo rešitev GUI-O. Vendar, če ste programer ugnezdenega računalnika in programirate GUI, ali če ste vodja projektov, bi morda bilo bolje, da najprej preberete drugi del, ki opisuje težave razvojnega procesa.
Razlaga koncepta GUI-O rešitve
Razumevanje rešitve GUI-O oziroma razumevanje osnovnega principa delovanja je ključno. Ko slišite stavek „Nova rešitev za razvoj GUI.“, se takoj pojavi ovira (predsodek). Zaradi vaših izkušenj z eno ali več rešitvami klasičnih pristopov začnete razmišljati o novem programskem okolju ter še bolj avtomatizirani programski podpori za hitro delo. Vendar prosim, pozabite na klasične okvirje in natančno berite naprej. Kvalitetno razumevanje rešitve je ključnega pomena.
Program je popolnoma zaključen in celovit za vse projekte, deluje kot interpreter ukazov iz mikrokontrolerja. Ko govorim o zaključenem programu, to pomeni, da ne zahteva spreminjanja, kodiranja ali prevajanja. Uporabnik v sam program le vnese komunikacijske parametre. Vnos podatkov je uporabniku prijazen, s strani programa voden in avtomatiziran način vzpostavitve prve povezave med napravo in GUI-O.
Ker z istim programom dostopamo do različnih naprav, bi ga lahko poimenovali „GUI brskalnik“. Slika 2 spodaj prikazuje osnovni princip delovanja. Na levi strani spodnjih grafik je GUI oziroma naš program GUI-O, na desni pa mikrokontroler naprave. Podroben opis rešitve je dostopen na naši spletni strani na povezavi https://www.gui-o.com/home.
Če ste programer mikrokontrolerja, bo za vas ključnega pomena razumevanje ASCII protokola med mikrokontrolerjem ter programom GUI-O. Vse ostale vidike že dobro obvladate. Program deluje na ANDROID operacijskem sistemu ter tako lahko deluje na ugnezdenem PC kot tudi na telefonu ali tablici.
Če hitro preletite rešitev na spletu, bi lahko dobili vtis, da GUI-O ne ponuja enake funkcionalnosti kot klasični pristopi izdelave GUI. Vendar temu ni tako. Naša rešitev ne omejuje razvijalca na noben način in mu omogoča izdelavo tudi najzahtevnejših grafičnih uporabniških vmesnikov. Pristop, kjer programer nadzoruje funkcionalnost naprave in hkrati tudi GUI, prinaša številne prednosti:
GUI-O zmanjša stroške: Ker GUI razvija strokovnjak preko ukazov iz mikrokontrolerja ni potrebe po dodatnem strokovnjaku za razvoj GUI-ja na PC, kar zmanjšuje stroške razvoja.
GUI-O zmanjša kompleksnost razvoja: Krmiljenje GUI preko protokola je preprosteje, kot razviti celoten ločen GUI. Aplikacijo GUI-O lahko inicializira tudi najbolj preprost mikrokontroler, hkrati pa GUI ohranja polno funkcionalnost in kakovost.
GUI-O izboljša kakovost naprave: Na konkretnem projektu ni več potrebno odpravljati razvojne napake na GUI. Distribucija funkcionalnih popravkov SW za GUI je avtomatizirana, popravek je potreben samo na SW mikrokontrolerja naprave.
GUI-O omogoča vrhunsko zmogljivost: GUI-O je zgrajen z uporabo najzmogljivejšega orodja Qt, je skrbno načrtovan in temeljito testiran. Rešitev izkorišča vse zmogljivosti sodobnih naprav Android. Rezultat je zmogljiv uporabniški vmesnik.
GUI-O omogoča preprost prehod na IoT: Z zamenjavo lokalnega komunikacijskega vmesnika z WiFi vmesnikom, ali le dodajanje novega porta z WiFi vmesnikom na napravi je mogoč enostaven prehod na oddaljeni dostop do naprave (IoT), saj GUI-O rešitev že vključuje standardno povezovanje preko MQTT strežnika.
Uporaba GUI-O v praksi
Programer mikrokontrolerja postopoma razvija programske rešitve za upravljanje naprave, običajno z izdelavo ločenih programskih sklopov za vsako funkcionalnost. Hkrati v istih programskih sklopih, ob spremembi stanj naprave, generira ASCII stringe s katerimi pošilja ukaze za upravljanje GUI-ja. Ko uporabnik preko zaslona na dotik upravlja napravo, GUI-O vrača kratke stringe. Na strani mikrokontrolerja interpreter prejetih stringov ustvari dogodke za nadzorni proces in vpliva na stanja naprave. Naprava spremenjena stanja in podatke ponovno vrača na GUI.
Takšen pristop omogoča, da se funkcionalnosti naprave in grafični vmesnik razvijata vzporedno, hkrati pa omogoča enostavno usklajevanje med njima. Programer mikrokontrolerja lahko tako učinkovito nadzoruje delovanje naprave in hkrati zagotavlja, da se grafični vmesnik odziva na uporabnikove interakcije na pričakovan način. Ta integriran pristop olajša razvojni proces in omogoča hitrejše iteracije ter boljše usklajevanje med funkcionalnostjo naprave in uporabniškim vmesnikom. Poleg tega se z uporabo takšnega pristopa zmanjša tveganje za neskladja med funkcionalnostjo naprave in uporabniškim vmesnikom, saj se spremembe na eni strani avtomatično posodobijo tudi na drugi strani. To pripomore k večji stabilnosti in zanesljivosti sistema ter zmanjšuje potrebo po organizacijskem usklajevanju med razvojem naprave in grafičnega vmesnika.
Priprava prvega okolja
Končna rešitev izvedbe GUI na napravi zahteva izbor in nakup ugnezdenega PC z ANDROID operacijskim sistemom. Lahko uporabimo tudi tablični računalnik, vendar to ni optimalno, če ne potrebujemo akumulatorskega napajanja. Seveda pa lahko izbor in nakup HW za končno rešitev odložite ter samo rešitev testirate na svojem telefonu ali tablici. GUI-O program bo dobro deloval na ANDROID 5.1 dalje in ne potrebuje visoke procesne zmogljivosti. Končna kakovost bo bolj odvisna od kakovosti zaslona, kot od zmogljivosti računalnika, saj vektorska grafika zagotavlja lepe slike na visokozmogljivih zaslonih.
Za začetek bo primerno, da na telefon naložite GUI-O aplikacijo ter naredite povezavo na vaš mikrokontroler. Na strani mikrokontrolerja inicializirajte dodatni UART port ter nanj priključite komunikacijski vmesnik po vašem izboru (BT, BLE, USB, ETHERNET). Na sliki 4 je nekaj primerov modulov. Od leve proti desni si sledijo 3 x WiFi, BlueTooth, USB.
GUI-O ASCII protokol
Za uspešno uporabo rešitve je ključno razumevanje ASCII protokola, ki omogoča komunikacijo med napravo in GUI-O programom. Komunikacijo lahko razdelimo na dva tipa ukazov: inicializacijske ukaze, ki se začnejo z znakom |, in komunikacijska sporočila, ki se začnejo z znakom @. Za znakom | sledi koda elementa, na primer |TG za preklopnik „toggle“, in nato obvezen parameter, ki določa ime elementa (|TG UID:tg1). Med tipom parametra in imenom je znak : . Večina parametrov ostane nespremenjenih, kar pomeni, da jih ne vpisujemo. Nekaj parametrov pa je obveznih, kot sta ime UID: in pozicija X:Y:. Vsi komunikacijski stringi se zaključijo z \r\n. Tako se na primer preklopnik „toggle“ prikaže na sredini zaslona s stringom |TG UID:tg1 X:50 Y:50\r\n. Preklop tega preklopnika v aktivno stanje vrača @tg1 1\r\n , ter preklop nazaj v pasivno stanje @tg1 0\r\n. Trije nazorni primeri inicializacijskih stringov in pripadajočih GUI-jev so na voljo na https://www.gui-o.com/examples/gui-designs .
GUI-O podpira široko paleto standardnih grafičnih gradnikov kot so tipke, preklopniki, drsniki, vnosna polja itd., ki v kombinaciji z enostavnimi gradniki, kot so liki, črte, okvirji, zadostujejo za večino aplikacij. Ko pa želite ustvariti nekaj, česar GUI-O še nima, lahko sestavite vaše grafične predloge skupaj s funkcionalnostjo programiranih elementov.
Na primer na vašo želeno sliko postavite tipko primerne velikosti in s polno prosojnostjo (transparentnost) ter s tem naredite tipko z vašo grafično podobo.
Z dinamičnim spreminjanjem parametra, kot je velikost ali rotacijo, lahko naredite element ki se povečuje, ali rotira.
Inovativen pristop natančnega sestavljanja in prekrivanja elementov od roba do roba za vse velikosti in oblike zaslonov omogoča gradnjo kompleksnih elementov iz enostavnih osnovnih gradnikov.
Grafični učinki, kot so prelivanja barv, senčenje ter dinamično spreminjanje katerekoli lastnosti so močna orodja za inovativne kreatorje GUI.
Postopen učni proces
Vaša naloga na mikrokontrolerju je preprosta: pošljite nekaj stringov, s katerimi nastavite GUI. Med delovanjem lahko nastavitve dinamično spreminjate, GUI-O pa bo sledil vašim ukazom. Aplikacija GUI-O vam bo vračala odzive dotikov uporabnikov. Ob zagonu aplikacije na napravi z Androidom se vzpostavi podatkovna povezava med GUI-O in komunikacijskim modulom. Komunikacija se začne z oddajo sporočila @init\r\n od GUI-O proti mikrokontrolerju, kar pomeni, da GUI-O deluje in čaka na inicializacijo naprave. Odziv mikrokontrolerja običajno vključuje večji inicializacijski blok podatkov. Nadaljnja komunikacija poteka v obe smeri glede na dogodke v napravi in GUI. Proces prikazuje slika 3.
Pri učenju GUI-O ASCII protokola je obvezen priročnik: https://www.gui-o.com MANUAL, kjer najdete vse potrebno. Priročnik je lepo strukturiran. Na začetku WIDGETS OVERVIEW ponudi izgled osnovnih elementov. Ko element izberete, na osnovi imena v naslednji tabeli WIDGETS CHEATSHEET najdete minimalen inicializacijski string, ki ga lahko preprosto uporabite v svoji kodi. V drugem delu WIDGETS API pa najdete opis vseh parametrov izbranega elementa, s katerimi prilagodite element po vaših željah. Ko postanete bolj vešči in že razumete osnovne principe delovanja GUI-O, se vrnete na GRAPHICAL INTERFACE OVERVIEW, kjer najdete vse podrobnosti za učinkovitejše delo.
Uporaba dodatnih virov računalnika
Pregled priročnika MANUAL bo pokazal, da GUI-O protokol omogoča programerju uporabo drugih virov PC, ki jih ni smiselno programirati na mikrokontrolerju. Ker program deluje na operacijskem sistemu ANDROID, protokol na podoben način uporablja standardne ugnezdene senzorje, vključno s kamero, krmili aktuatorje in omogoča zapis ter branje podatkov prek standardnega datotečnega sistema. V tretjem poglavju, „Oddaljeni dostop do naprave“ , bom opisal tudi uporabo komunikacijskih vmesnikov, kot so WiFi in podatkovni GSM vmesniki.
Upam, da ste s tem pridobili osnovno razumevanje GUI-O in kako se le-ta primerja z vašimi rešitvami. V nadaljevanju bom pojasnil, kako se je v razvojnem procesu ločila strojna arhitektura ugnezdenih sistemov na mikrokontroler in PC, ter kako in zakaj je smiselno ponovno združiti programsko arhitekturo, kar omogoča GUI-O