精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何優(yōu)雅的在OpenMV上使用LVGL

RT-Thread官方賬號 ? 2024-07-31 08:36 ? 次閱讀

板級適配

得益于官方團隊對 RA8D1-Vision Board 的 SDK 貼心地維護,對于板級配置文件 configuration.xml 板載的攝像頭、SDRAM、LCD、TOUCH 等眾多外設都已經配置好了

dc409aac-4ed4-11ef-817b-92fbcf53809c.png

LVGL 適配到 OpenMV 工程

menuconfig 配置

LVGL 配置

在 SDK 中的 openmv 工程的基礎上進行修改,添加 LVGL V8 的 packages 包,使用 scons --menuconfig 命令進入配置窗口,直接鍵入 / 來查找 PKG_USING_LVGL 這個宏

dc589fda-4ed4-11ef-817b-92fbcf53809c.png

然后按 1 跳轉到 LVGL 的設置界面,修改版本為 V8.3.5 版本,因為之后使用 GUI Guider 設計界面,我用的 GUI Guider 的 LVGL 版本是 V8.3.5,當然也可以用別的版本,porting 的代碼可能有些許不一樣

dc7bd7e8-4ed4-11ef-817b-92fbcf53809c.png

還需要在 > Hardware Drivers Config > On-chip Peripheral Drivers 中使能 LVGL for LCD

dcac9680-4ed4-11ef-817b-92fbcf53809c.png

觸摸配置

在官方 SDK 的 openmv 例程中觸摸是沒有被使能的,這里需要使能一下,在 > RT-Thread online packages > peripheral libraries and drivers > touch drivers 中使能 cst812t 的驅動

dcc5652a-4ed4-11ef-817b-92fbcf53809c.png

然后在 > RT-Thread Components > Device Drivers 中使能觸摸中斷管腳的驅動

dcd89c62-4ed4-11ef-817b-92fbcf53809c.png

最后把 packages 包下載下來

dcf3f48a-4ed4-11ef-817b-92fbcf53809c.png

porting 配置

這時 lvgl 的完整代碼已經自動添加到編譯環(huán)境中,下一步就是在 board 文件夾中適配 porting,和之前的文章類似,依然是 lv_conf.h、lv_port_disp.c、lv_port_indev.c 這些文件,這里就不再贅述,直接上代碼

lv_port_disp.c 和之前文章的代碼不太一樣,修改成了全屏刷新的方式

lv_port_disp.c

dd0105b2-4ed4-11ef-817b-92fbcf53809c.pngdd1f8aaa-4ed4-11ef-817b-92fbcf53809c.png

lv_port_indev.c

dd2c2fb2-4ed4-11ef-817b-92fbcf53809c.pngdd448738-4ed4-11ef-817b-92fbcf53809c.pngdd9cfaf8-4ed4-11ef-817b-92fbcf53809c.png

lv_conf.h

ddbf9a7c-4ed4-11ef-817b-92fbcf53809c.pngddd70f68-4ed4-11ef-817b-92fbcf53809c.png

demo 測試

適配好了 LVGL,下面運行個 demo 試一下,在 LVGL 的設置中,將 Enable built-in demos 使能

dc7bd7e8-4ed4-11ef-817b-92fbcf53809c.png

board/Kconfig 中關于 LVGL 的配置是 V9 版本的,所以需要改一下

de01b1f0-4ed4-11ef-817b-92fbcf53809c.png

修改為

de13bc88-4ed4-11ef-817b-92fbcf53809c.png

然后使能 widgets 的 demo

de60afde-4ed4-11ef-817b-92fbcf53809c.png

在 hal_entry.c 中添加代碼,lv_user_gui_init 會自動被調用

e16a629c-4ed4-11ef-817b-92fbcf53809c.png

Overflow修改

Surprise,此時,最關鍵的一步來了,這個時候直接編譯的話,會 overflow,region `FLASH\’ overflowed by 165240 bytes,足足超了100多KB的Flash,這就需要縮減一些配置了

e17cea34-4ed4-11ef-817b-92fbcf53809c.png

因為開發(fā)板上的攝像頭是 OV5640,所以把其他的攝像頭驅動都刪掉

dcc5652a-4ed4-11ef-817b-92fbcf53809c.png

將 openmv 的 buffer 從默認的 512000 改成 384000,或者改到 256000

e1a08eee-4ed4-11ef-817b-92fbcf53809c.png

編譯燒錄到開發(fā)板,可以看到 openmv 運行 hello world 例程的時候同時運行著 LVGL V8 的 widgets 的 demo

e1b42a4e-4ed4-11ef-817b-92fbcf53809c.png

觸摸也可以正常使用

e1e10b5e-4ed4-11ef-817b-92fbcf53809c.png

至此,實現了 openmv 和 LVGL 的共存,實現了同時運行,當然這還不夠,下面開始介紹 GUI guider 設計界面和如何在 openmv IDE 上使用 micropython 調用 LVGL

界面設計

GUI Guider

使用 GUI Guider 來進行 LVGL 的拖拽式設計一個簡單界面,左邊用來顯示攝像頭內容,右邊用來顯示識別結果和 logo

e1f82f3c-4ed4-11ef-817b-92fbcf53809c.png

生成代碼后添加到工程當中,然后在 custom 和 generated 文件夾中添加兩個 SConscript 文件,內容如下

e2117b04-4ed4-11ef-817b-92fbcf53809c.pnge21b499a-4ed4-11ef-817b-92fbcf53809c.png

目錄樹如下

e22ff7aa-4ed4-11ef-817b-92fbcf53809c.png

然后把剛剛的 demo 代碼修改為如下內容,載入 GUI Guider 生成的界面

e2476afc-4ed4-11ef-817b-92fbcf53809c.png

編譯燒錄到開發(fā)板,可以看到剛剛設計的這個界面,左邊的因為是 canvas 控件,為了節(jié)省 RAM 空間,把生成的代碼刪除了一部分,所以是透明的

e2596cac-4ed4-11ef-817b-92fbcf53809c.png

效果如下

e285034e-4ed4-11ef-817b-92fbcf53809c.png

LVGL 和 GUI Guider 界面完成,下面就開始接入到 mpy 了

添加 mpy 自定義庫

解釋型語言本質上都是詞法解析、解釋執(zhí)行,或者直接點講就是腳本,mpy 就屬于解釋型語言,添加一個自定義的庫和方法也是十分容易的,在 mpy 的模塊和方法的定義中,大量使用了宏的方式來對 C API 進行添加,當然這些宏的種類也有很多

添加模塊與方法

模塊的添加

模塊的定義程序范式如下,需要定義一個表放入模塊的名字,然后使用 MP_DEFINE_CONST_DICT 宏來定義一個字典,然后定義一個 mp_obj_module_t 變量

e2a3c356-4ed4-11ef-817b-92fbcf53809c.png

此時僅僅是定義了一個模塊,并沒有加入到 mpy 中,下一步 打開 packages/micropython-v1.13.0/port/mpconfigport.h 這個文件添加三行代碼

e2b17f78-4ed4-11ef-817b-92fbcf53809c.png

然后添加到 MICROPY_PORT_BUILTIN_MODULES 這個宏中,就會參與到編譯當中了

e2beb4ae-4ed4-11ef-817b-92fbcf53809c.png

一般型方法

RT-Thread 也提供了一個生成器,倉庫地址:https://github.com/SummerGift/RT-MicroPython-Generator,或者點開即用可以訪問我的網站上面放的https://docs.pomin.top/codetools/RT-MicroPython-Generator

使用這個生成器,傳入參數設置為 1 的時候,生成代碼如下,使用的宏是 MP_DEFINE_CONST_FUN_OBJ_1,傳入一個泛型指針 arg_1_obj,使用 mp_obj_is_true 來獲取布爾類型的傳入參數

mpy 對于參數使用泛型指針的 typedef 類型 mp_obj_t 來傳參,然后使用一些 C 函數來獲取對應的類型以及值,例如 mp_obj_get_intpy_image_cobj 等 C 函數來獲取整數值、圖像指針等

e2d85bb6-4ed4-11ef-817b-92fbcf53809c.png

main 型方法

以此類推也有 MP_DEFINE_CONST_FUN_OBJ_0、MP_DEFINE_CONST_FUN_OBJ_2、MP_DEFINE_CONST_FUN_OBJ_3,但是參數過多的時候就不適合這樣定義了,因為在 ARM 中需要控制參數的數量,這時就引出了 main 形式的定義宏,類似與 main 函數的 argc 和 argv,輸入參數有 n_args 和泛型指針的指針 args

e2ecd71c-4ed4-11ef-817b-92fbcf53809c.png

添加一個 log 方法

QSTR的生成

QSTR 宏定義也可以用前文的生成器來生成

QSTR 的內容存放在 packages/micropython-v1.13.0/port/genhdr/qstrdefs.generated.h 中,可以使用 packages/micropython-v1.13.0/port/genhdr/gen_qstr.py 來生成,這里生成了三個后面需要用到的字符串,其中 guider 是模塊名字,下面兩個是模塊的方法

e2fd0204-4ed4-11ef-817b-92fbcf53809c.png

添加方法

這里定義一個名字為 guider 的模塊,帶有一個名為 lv_print 的方法

e309852e-4ed4-11ef-817b-92fbcf53809c.png

按照前文的方法加入到 built module 宏中然后編譯燒錄到開發(fā)板中

mpy 代碼如下。import guider 模塊然后調用 lv_print 方法

e31d647c-4ed4-11ef-817b-92fbcf53809c.pnge325f042-4ed4-11ef-817b-92fbcf53809c.png

連接到開發(fā)板然后運行這個代碼,可以看到 RTT 的終端打印出了代碼中寫的 log

e331e12c-4ed4-11ef-817b-92fbcf53809c.png

添加LVGL的自定義方法

定義一個 main 型的方法,代碼如下,實現傳參一個圖像類型的參數,獲取了參數后拷貝到緩沖區(qū),交由 canvas 控件來顯示,并且根據圖像大小自適應調節(jié)控件大小

e3473b8a-4ed4-11ef-817b-92fbcf53809c.png

添加到 guider 模塊中

e354451e-4ed4-11ef-817b-92fbcf53809c.png

此時就可以實現傳入攝像頭的圖像到 canvas 控件來顯示了,編譯燒錄到開發(fā)板,然后連接到 openmv IDE 運行如下 mpy 代碼

e364e52c-4ed4-11ef-817b-92fbcf53809c.png

攝像頭,啟動!

e3743f86-4ed4-11ef-817b-92fbcf53809c.png

再添加一個顯示識別結果的方法,實現對傳入的字符串顯示到 LVGL 界面的 label 控件上

e39ca2dc-4ed4-11ef-817b-92fbcf53809c.png

編譯燒錄到開發(fā)板中,在 openmv IDE 中運行如下代碼

e3abe6c0-4ed4-11ef-817b-92fbcf53809c.png

將 $ 顯示到了界面的 label 控件上

e3b4b5c0-4ed4-11ef-817b-92fbcf53809c.png

運行tflite

對于怎么完成對于 tflite 模型的訓練這里就不再重復介紹,可以參考這位大佬的文章 https://club.rt-thread.org/ask/article/69ef73018d63deef.html ,跟著一步步操作即可

e3c4fdc2-4ed4-11ef-817b-92fbcf53809c.png

下載生成的可以部署到 openmv 的代模型和代碼

e3e9ba22-4ed4-11ef-817b-92fbcf53809c.png

得到一個如下文件

e3f5c646-4ed4-11ef-817b-92fbcf53809c.png

將 edge impulse 中生成的代碼稍作修改,加入 guider 模塊

e402fbc2-4ed4-11ef-817b-92fbcf53809c.png

在 openmv IDE 上運行識別

e418fbac-4ed4-11ef-817b-92fbcf53809c.pnge4a53fae-4ed4-11ef-817b-92fbcf53809c.png

在開發(fā)板屏幕上顯示 LVGL 界面、識別結果與攝像頭畫面

e4b07540-4ed4-11ef-817b-92fbcf53809c.pnge4ecf18c-4ed4-11ef-817b-92fbcf53809c.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1006

    瀏覽量

    45420
  • openMV
    +關注

    關注

    3

    文章

    39

    瀏覽量

    9763
  • LVGL
    +關注

    關注

    0

    文章

    79

    瀏覽量

    2737
收藏 人收藏

    評論

    相關推薦

    RT-Thread NUC97x 移植 LVGL

    不涉及 rt-thread 驅動,但是它是 LVGL 和 rt-thread 的接口。LVGL rt-thread 運行的基石。
    發(fā)表于 07-08 09:37 ?1426次閱讀

    請問esp32使用lvgl的時候要怎么配置使用外部ROM?

    請問esp32 使用lvgl的時候要怎么配置使用外部ROM?我現在用的是git的的lv_port_esp32 https://github.com/lvgl/
    發(fā)表于 06-20 06:29

    嵌入式linux如何去運行LVGL

    GitHub - lvgl/lv_port_linux_frame_buffer: LVGL configured to work with a standard Linux framebuffer
    發(fā)表于 12-15 07:58

    怎樣openmv編寫nrf24l01的發(fā)送代碼Python呢

    nrf24l01是如何完成通信的?怎樣openmv編寫nrf24l01的發(fā)送代碼Python呢?
    發(fā)表于 12-17 06:54

    介紹lvglubuntu的vscode模擬環(huán)境的搭建

    前言本文的主要內容是,介紹lvglubuntu的vscode模擬環(huán)境的搭建,任務處理按鈕label/text
    發(fā)表于 01-18 07:21

    rtt studio打開LVGL配置完成后報錯,這個錯誤怎么解決

    rtt studio打開LVGL,配置完之后,就報這個錯誤了。我用的是rtt studio.rtt4.1.0,LVGL2.0。這個錯誤該怎么解決。另外
    發(fā)表于 04-14 09:29

    LuatOS之LVGL字體篇

    前言之前展示過Luatoswin32運行LVGL的效果,今天帶來LVGL的字體篇介紹LVGL字體支持很全,支持 UTF-8 編碼的 Un
    發(fā)表于 11-23 17:51 ?13次下載
    LuatOS之<b class='flag-5'>LVGL</b>字體篇

    esp8266 NodeMcu硬件環(huán)境下使用lvgl

    在arduinoIDE的庫管理器添加lvgl圖形庫arduino發(fā)布的第三方庫lv_arduino.(1)安裝TFT_
    發(fā)表于 11-25 19:06 ?32次下載
    esp8266 NodeMcu硬件環(huán)境下使用<b class='flag-5'>lvgl</b>

    LVGL 優(yōu)化幀率技巧

    這種性能以上,跑出來的效果才能讓人滿意,最常見的103芯片使用場景受限,總體不太好。F429平臺嘗試LVGL過程中,也總結出幾種優(yōu)化提高幀率的方法。這里我們還是直接用官方測試例程 benchmark做直觀的幀率展示
    發(fā)表于 12-07 13:21 ?15次下載
    <b class='flag-5'>LVGL</b> 優(yōu)化幀率技巧

    STM32與openmv通信(HAL庫)

    最近需要用到openmv進行追蹤物體,所以在此做個小結,其中這些文章給我很大的幫助,建議可以去看超詳細OpenMV與STM32單片機通信 以及星瞳科技官網實驗目的:openmv追蹤物體顏色,將物體
    發(fā)表于 12-24 19:16 ?23次下載
    STM32與<b class='flag-5'>openmv</b>通信(HAL庫)

    openmv4系列1----基本認知

    openmv4系列1----基本認知1.openmv的由來??OpenMV是一個開源,低成本,功能強大的機器視覺模塊。以STM32F427CPU為核心,集成了OV7725攝像頭芯片,
    發(fā)表于 12-29 18:51 ?8次下載
    <b class='flag-5'>openmv</b>4系列1----基本認知

    OpenMV Cam的RPC模塊

    OpenMV Cam 的rpc模塊允許您將 OpenMV Cam 連接到另一臺微控制器或計算機,并在 OpenMV Cam 執(zhí)行遠程 P
    的頭像 發(fā)表于 10-08 10:28 ?1314次閱讀

    OpenMV初識

    嵌入式端進行python開發(fā)。OpenMV基于32位,ARM Cortex-M7內核的OpenMV-H7, 并結合各種攝像頭,可以進行多種機器視覺應用的實現,比如人臉檢測,物體分類等。
    的頭像 發(fā)表于 06-12 11:23 ?3338次閱讀
    <b class='flag-5'>OpenMV</b>初識

    如何在MDK中部署LVGL

    LVGL的剛剛完成了對LVGL8的維護更新,發(fā)布了v8.3.5版。相對master分支正在開發(fā)的LVGL9,該版本是一個吐血推薦的穩(wěn)定版本。
    的頭像 發(fā)表于 07-27 14:41 ?1100次閱讀
    如何在MDK中部署<b class='flag-5'>LVGL</b>

    基于Vision BoardopenMV垃圾分類

    通過Vision Board部署openMV實現垃圾分類。
    的頭像 發(fā)表于 06-17 10:49 ?433次閱讀
    基于Vision Board<b class='flag-5'>上</b>的<b class='flag-5'>openMV</b>垃圾分類