Ako exportovať grafické používateľské rozhranie z EEZ studio do Arduina

Výber hardvéru a knižníc ovládačov
Projekt EEZ Studio je postavený na LVGL verzie 8.3, a preto je potrebné vybrať vývojovú dosku schopnú spustiť kód knižnice. V dokumentácii LVGL sú uvedené požiadavky na hardvér. Rozhodol som sa spustiť kód na doske RP2040, pretože sa do jej pamäte spoľahlivo zmestí kód a spustí používateľské rozhranie bez problémov.
Okrem vývojovej dosky je potrebné vybrať aj displej kompatibilný s Arduinom a LVGL. Samotné LVGL neposkytuje ovládače na prepojenie hardvérových obrazoviek. Namiesto toho sa spolieha na ďalšie knižnice, ako napríklad TFT_eSPI
, ktorú využíva tento článok. Tieto knižnice spolu fungujú ako po masle a ovládač podporuje aj tento rezistívny dotykový displej Adafruit ILI9341 použitý v tomto zostavení.
Napokon, ani LVGL
, ani TFT_eSPI
nedokážu spracovať všetky dotykové obrazovky, ktoré nájdete. Preto možno budete musieť využiť tretiu knižnicu na čítanie a spracovanie dotykových vstupov. V tomto príklade program Arduino používa knižnicu Adafruit touchscreen.
Nastavenie štruktúry projektu
Po exporte používateľského rozhrania z programu EEZ Studio sa v adresári projektu EEZ Studio nachádza niekoľko súborov kódu a hlavičiek, podobne ako na nasledujúcom obrázku:
Na tomto obrázku sú zobrazené súbory exportované aplikáciou EEZ Studio.
Predtým, ako začnete s týmito súbormi čokoľvek robiť, mali by ste pomocou prostredia Arduino IDE vytvoriť nový náčrt na mieste, ktoré si vyberiete. Po jeho uložení musíte upraviť umiestnenie skicára, aby ste zabezpečili, že sa knižnice nainštalujú do priečinka nového projektu a že Arduino IDE neskôr nájde súbory používateľského rozhrania EEZ Studio:
Na tomto obrázku je zvýraznené miesto, kde je potrebné definovať nové umiestnenie skicára.
Umiestnenie skicára musí ukazovať na priečinok, ktorý obsahuje novo vytvorený projekt Arduino. Potom môžete začať inštalovať potrebné knižnice. Musia sa zhodovať s výberom vykonaným v programe EEZ studio, aby sa zabezpečilo, že sa projekt skompiluje bez chýb. V mojom prípade som musel nainštalovať LVGL 8.3, TFT_eSPI 2.5.0 a knižnicu Adafruit Touch pomocou správcu knižníc v prostredí Arduino IDE.
Nakoniec skopírujte vygenerovaný kód z priečinka projektu EEZ Studio do nového priečinka knižnice Arduino. Tento priečinok by potom mal obsahovať vygenerované súbory kódu používateľského rozhrania a nainštalované knižnice s vašimi konfiguračnými súbormi, ako je znázornené na nasledujúcej snímke obrazovky:
Skopírujte súbory používateľského rozhrania do priečinka knižníc, ako je znázornené na obrázku.
Je dôležité, aby ste vybrali správny konfiguračný súbor lv_conf.h
pre zvolenú verziu LVGL, pretože ak to neurobíte, môže to neskôr viesť k záhadným a ťažko sledovateľným chybám pri kompilácii. Ak máte problémy s nastavením projektu, môžete si stiahnuť alebo rozklikať predkonfigurovanú verziu z GitHub.
Predkonfigurovaný repozitár GitHub obsahuje príklad používateľského konfiguračného súboru TFT_eSPI
pre Arduino Nano RP2040 Connect a displej Adafruit ILI9341. Ak však používate iné zariadenia, musíte zmeniť čísla pinov v konfiguračnom súbore, aby zodpovedali vašim zariadeniam a použitým pinom GPIO.
Na záver stojí za zmienku, že som narazil na problémy s kompatibilitou s verziami operačného systému Mbed OS nad 3.0.0 na Arduino Nano RP2040 Connect, čo viedlo k občasným pádom počas nahrávania a krátko po ňom. Preto ak sa vyskytnú takéto problémy, stojí za to skúsiť znížiť verziu dosky na 3.0.0 v správcovi dosky Arduino IDE.
Úprava vygenerovaného kódu tak, aby fungoval na Arduine
Po nastavení štruktúry projektu a nainštalovaní všetkých knižníc môžete začať kódovať svoju vstavanú aplikáciu používateľského rozhrania. Našťastie sú potrebné len minimálne zmeny zdrojového kódu, ak si v programe EEZ Studio vyberiete vhodnú verziu LVGL. Najprv prejdite všetky automaticky vygenerované hlavičkové súbory používateľského rozhrania a aktualizujte import knižnice LVGL:
// Replace all occurrences of this import:
#include <lvgl/lvgl.h>
// with the following statement:
#include <lvgl.h>
Tým sa zabezpečí, že kompilátor pri zostavovaní aplikácie nájde potrebné súbory. Ďalej importujete hlavný hlavičkový súbor vygenerovaného používateľského rozhrania do vášho náčrtu Arduino pridaním nasledujúcich importov:
#include <lvgl.h>
#include <TFT_eSPI.h>
#include <ui.h>
#include "TouchScreen.h"
Upozorňujeme, že tieto príkazy sa vzťahujú na nastavenie opísané v časti Predpoklady a možno ich bude potrebné upraviť pri použití iného displeja alebo dotykového ovládača. Nakoniec inicializujte používateľské rozhranie vygenerované programom EEZ Studio v metóde nastavenia náčrtu a musíte tiež pravidelne volať funkciu tick
používateľského rozhrania z funkcie loop hlavného programu Arduino:
void setup()
{
lv_init();
tft.begin();
tft.setRotation(2);
/* Other setup code discussed later */
ui_init(); // Init EEZ-Studio UI
}
void loop() {
lv_timer_handler();
ui_tick();
}
Všimnite si, že rovnako ako predtým, aj v tomto príklade nastavenia je uvedený inicializačný kód potrebný na spustenie displeja a skutočný kód sa môže v niektorých prípadoch líšiť. Metóda nastavenia obsahuje aj niekoľko ďalších kódov, o ktorých bude reč neskôr.
Implementácia používateľských akcií a premenných
Funkcie súvisiace s používateľskými akciami a používateľskými premennými definovanými v programe EEZ Studio sú uložené v hlavičkových súboroch actions.h
a vars.h
a pred kompiláciou kódu musíte implementovať vlastné metódy. Zdrojové súbory C obsahujúce implementácie by ste mali pridať do rovnakého priečinka ako hlavičkové súbory a implementácie môžu byť zatiaľ prázdne. Napríklad nasledujúci úryvok ukazuje prázdne implementácie hlavičkového súboru actions.h
:
#include "actions.h"
void action_update_app_units(lv_event_t * e) {
}
void action_navigate_to_settings(lv_event_t * e) {
}
void action_navigate_to_main_screen(lv_event_t * e) {
}
Ako ukazuje príklad, súbor actions.h
obsahuje spätné volania obsluhy, ktoré používateľské rozhranie volá vždy, keď používatelia interagujú s prvkami používateľského rozhrania pomocou prepojených akcií. Tieto funkcie budete musieť implementovať podľa ich požiadaviek.
V tejto chvíli by ste mali byť schopní skompilovať celý projekt a nahrať ho na dosku Arduino bez chýb. Ak bolo predtým všetko správne nakonfigurované, na obrazovke sa už môže zobrazovať grafické používateľské rozhranie. V niektorých prípadoch však môže byť potrebné ďalšie nastavenie obrazovky a dotykové vstupy v tomto okamihu nebudú fungovať.
Zápis obsluhy displeja a dotykových vstupov
Skôr ako sa dopracujete k funkčnému grafickému používateľskému rozhraniu, musíte pridať posledné dieliky skladačky. Bohužiaľ, záverečné časti kódu sú veľmi závislé od hardvéru projektu a knižníc použitých na prepojenie zariadení. Základná štruktúra funkcie nastavenia však zostáva rovnaká a je uvedená v nasledujúcom úryvku:
void setup()
{
lv_init();
tft.begin();
tft.setRotation(2);
lv_disp_draw_buf_init(&draw_buf, buf, NULL, screenWidth * screenHeight / 10);
// Register the custom display function
static lv_disp_drv_t disp_drv;
lv_disp_drv_init( &disp_drv );
disp_drv.hor_res = screenWidth;
disp_drv.ver_res = screenHeight;
disp_drv.flush_cb = my_disp_flush;
disp_drv.draw_buf = &draw_buf;
lv_disp_drv_register( &disp_drv );
// Register the custom touch-input handler
static lv_indev_drv_t indev_drv;
lv_indev_drv_init( &indev_drv );
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = my_touchpad_read;
lv_indev_drv_register( &indev_drv );
// Init EEZ-Studio UI
ui_init();
}
O prvých a posledných riadkoch sme už hovorili vyššie. Inicializujú LVGL, TFT_eSPI
a používateľské rozhranie EEZ Studio. Volanie lv_disp_draw_buf_init
inicializuje vyrovnávaciu pamäť LVGL s určenou veľkosťou, ktorá závisí od rozlíšenia displeja. V ďalších niekoľkých riadkoch sa registruje vlastná funkcia flush obrazovky, ktorá je potrebná, pretože LVGL neposkytuje ovládač displeja. Namiesto toho sa pri odosielaní údajov na displej spolieha na TFT_eSPI
a vlastná funkcia spätného volania displeja je tou časťou, ktorá túto úlohu vykonáva. Podobne LVGL nespracúva dotykové vstupy, ale spolieha sa na to, že používatelia definujú vlastnú obsluhu dotykových vstupov. Obsluha je zaregistrovaná v niekoľkých nasledujúcich riadkoch kódu.
Vlastná funkcia flush displeja vyzerá takto:
void my_disp_flush( lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p )
{
uint32_t w = ( area->x2 - area->x1 + 1 );
uint32_t h = ( area->y2 - area->y1 + 1 );
tft.startWrite();
tft.setAddrWindow(area->x1, area->y1, w, h);
tft.pushColors((uint16_t *)&color_p->full, w * h, true);
tft.endWrite();
lv_disp_flush_ready(disp);
}
Pred inicializáciou procesu a odoslaním údajov na obrazovku vypočíta rozsah adries na uloženie pixelových údajov na displeji. Príklad implementácie obsluhy dotykového vstupu sa nachádza v úložisku GitHub, na ktoré odkazujeme vyššie, ale pre stručnosť ho vynechávame.
Po nahratí aktualizovaného kódu s týmito vlastnými metódami obsluhy by sa malo na obrazovke zobraziť používateľské rozhranie a malo by reagovať aj na dotykové vstupy, a to aj bez definovania akýchkoľvek vlastných udalostí alebo kódu pre akcie používateľa:
Tento obrázok zobrazuje používateľské rozhranie spustené na Arduino Nano RP2040 Connect.
Záver
Predtým, ako budete môcť vygenerovaný kód použiť vo svojich projektoch, musíte sa postarať o niekoľko úloh pri exporte grafického používateľského rozhrania z EEZ Studia do Arduina. Začnite vytvorením nového projektu Arduino. Potom nastavte umiestnenie skicára prostredia Arduino IDE na koreňový priečinok nového projektu. Ďalej musíte nájsť a nainštalovať potrebné knižnice pre vaše nastavenie. Keďže LVGL sa pri komunikácii so zobrazovacími a vstupnými zariadeniami spolieha na externé knižnice, musíte poskytnúť aj vlastné implementácie pre obsluhu zobrazovacích a vstupných zariadení.
Sú potrebné len minimálne úpravy vygenerovaných súborov kódu. Najprv nahraďte niektoré príkazy import v hlavičkových súboroch tak, aby ukazovali na správne adresáre. Potom poskytnite vlastné implementácie pre všetky úlohy súvisiace s premennými a používateľské akcie, ktoré ste nastavili v programe EEZ Studio. Po týchto krokoch by ste mali byť schopní nahrať kód do vášho Arduina a mať krásne, funkčné používateľské rozhranie pre vaše vstavané projekty.
Kľúčové diely a komponenty použité v projekte
Ceny u distribútorov a skladové zásoby
Skontrolujte skladové zásoby a ceny ARDUINO NANO RP2040 CONNECT a GRAPHIC DISPLAY TFT RGB 2.8" u distribútorov pomocou nižšie uvedených výsledkov. Pomocou tlačidiel „Kúpiť“ navštívte priamo stránku distribútora s dielmi.
Článok vyšiel na stránkach Digikey
Máte aj vy zaujímavú konštrukciu, alebo článok a chceli by ste sa o to podeliť s viac ako 360.000 čitateľmi? Tak neváhajte a dajte nám vedieť, radi ju uverejníme a to vrátane obrazových a video príloh. Rovnako uvítame aj autorov teoretických článkov, či autorov zaujímavých videí z oblasti elektroniky / elektrotechniky.
Kontaktujte nás!