在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

LVGL適配到OpenMV工程的實現方法

RTThread物聯網操作系統 ? 來源:RTThread物聯網操作系統 ? 2024-08-09 16:51 ? 次閱讀

板級適配

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

1ec9f756-4e62-11ef-b8af-92fbcf53809c.png

LVGL 適配到 OpenMV 工程

menuconfig 配置

LVGL 配置

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

1ef3510a-4e62-11ef-b8af-92fbcf53809c.png

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

1f0329b8-4e62-11ef-b8af-92fbcf53809c.png

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

1f188baa-4e62-11ef-b8af-92fbcf53809c.png

觸摸配置

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

1f41ac92-4e62-11ef-b8af-92fbcf53809c.png

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

1f6ac2bc-4e62-11ef-b8af-92fbcf53809c.png

最后把 packages 包下載下來

1f8aec36-4e62-11ef-b8af-92fbcf53809c.png

porting 配置

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

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

lv_port_disp.c

1f98b7bc-4e62-11ef-b8af-92fbcf53809c.png1fa73ef4-4e62-11ef-b8af-92fbcf53809c.png

lv_port_indev.c

1fbe6f98-4e62-11ef-b8af-92fbcf53809c.png1fd8737a-4e62-11ef-b8af-92fbcf53809c.png20350324-4e62-11ef-b8af-92fbcf53809c.png

lv_conf.h

20585b12-4e62-11ef-b8af-92fbcf53809c.png207ef36c-4e62-11ef-b8af-92fbcf53809c.png

demo 測試

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

1f0329b8-4e62-11ef-b8af-92fbcf53809c.png

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

209efa40-4e62-11ef-b8af-92fbcf53809c.png

修改為

20b3f670-4e62-11ef-b8af-92fbcf53809c.png

然后使能 widgets 的 demo

20c79e0a-4e62-11ef-b8af-92fbcf53809c.png

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

20eacace-4e62-11ef-b8af-92fbcf53809c.png

Overflow修改

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

2107023e-4e62-11ef-b8af-92fbcf53809c.png

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

1f41ac92-4e62-11ef-b8af-92fbcf53809c.png

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

21396ecc-4e62-11ef-b8af-92fbcf53809c.png

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

2147c6c0-4e62-11ef-b8af-92fbcf53809c.png

觸摸也可以正常使用

21720f66-4e62-11ef-b8af-92fbcf53809c.png

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

界面設計

GUI Guider

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

219dc110-4e62-11ef-b8af-92fbcf53809c.png

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

21c762c2-4e62-11ef-b8af-92fbcf53809c.png21e0c5aa-4e62-11ef-b8af-92fbcf53809c.png

目錄樹如下

21fdfada-4e62-11ef-b8af-92fbcf53809c.png

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

220fbf68-4e62-11ef-b8af-92fbcf53809c.png

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

22201c82-4e62-11ef-b8af-92fbcf53809c.png

效果如下

2235f246-4e62-11ef-b8af-92fbcf53809c.png

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

添加 mpy 自定義庫

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

添加模塊與方法

模塊的添加

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

2274ea00-4e62-11ef-b8af-92fbcf53809c.png

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

2293ad3c-4e62-11ef-b8af-92fbcf53809c.png

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

22aef826-4e62-11ef-b8af-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_int、py_image_cobj 等 C 函數來獲取整數值、圖像指針等

22d2c80a-4e62-11ef-b8af-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

22ecc14c-4e62-11ef-b8af-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 是模塊名字,下面兩個是模塊的方法

22fd6f88-4e62-11ef-b8af-92fbcf53809c.png

添加方法

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

230994f2-4e62-11ef-b8af-92fbcf53809c.png

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

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

23203680-4e62-11ef-b8af-92fbcf53809c.png233be146-4e62-11ef-b8af-92fbcf53809c.png

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

2356c8d0-4e62-11ef-b8af-92fbcf53809c.png

添加LVGL的自定義方法

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

23c730ca-4e62-11ef-b8af-92fbcf53809c.png

添加到 guider 模塊中

23d4c8e8-4e62-11ef-b8af-92fbcf53809c.png

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

23e2ff94-4e62-11ef-b8af-92fbcf53809c.png

攝像頭,啟動!

23f0a536-4e62-11ef-b8af-92fbcf53809c.png

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

24347522-4e62-11ef-b8af-92fbcf53809c.png

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

24488a30-4e62-11ef-b8af-92fbcf53809c.png

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

24673e94-4e62-11ef-b8af-92fbcf53809c.png

運行tflite

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

24a5a8a0-4e62-11ef-b8af-92fbcf53809c.png

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

24bd3592-4e62-11ef-b8af-92fbcf53809c.png

得到一個如下文件

24d04c18-4e62-11ef-b8af-92fbcf53809c.png

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

24deeb74-4e62-11ef-b8af-92fbcf53809c.png

在 openmv IDE 上運行識別

24f30e42-4e62-11ef-b8af-92fbcf53809c.png252366f0-4e62-11ef-b8af-92fbcf53809c.png

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

255ecb46-4e62-11ef-b8af-92fbcf53809c.png258b17e6-4e62-11ef-b8af-92fbcf53809c.png

最終工程可見 Github 倉庫 https://github.com/POMIN-163/RA8D1-Vision-Board-OpenMV-with-LVGL-V8

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

    關注

    60

    文章

    4841

    瀏覽量

    95691
  • 命令
    +關注

    關注

    5

    文章

    684

    瀏覽量

    22021
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1036

    瀏覽量

    45935
  • openMV
    +關注

    關注

    3

    文章

    39

    瀏覽量

    9817

原文標題:如何優雅的在OpenMV上使用LVGL

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RT-Thread Studio上移植GUI-Guider-1.4開發LVGL8.2工程

    創建一個rttthread工程,選擇出廠帶好LVGL配置的demo,或者自己已經搭建好了LVGL環境的工程
    的頭像 發表于 11-03 12:52 ?2277次閱讀
    RT-Thread Studio上移植GUI-Guider-1.4開發<b class='flag-5'>LVGL</b>8.2<b class='flag-5'>工程</b>

    如何優雅的在OpenMV上使用LVGL

    LVGL適配到OpenMV工程menuconfig配置LVGL配置在SDK中的openmv
    的頭像 發表于 07-31 08:36 ?1066次閱讀
    如何優雅的在<b class='flag-5'>OpenMV</b>上使用<b class='flag-5'>LVGL</b>

    如何在openmv實現圖傳功能?

    Vision board的openmv固件wifi只能實現連接,一些通信和物聯網也用不了。如果我要實現openmv中的圖傳功能該怎么做呢,求助各位大佬
    發表于 07-09 06:36

    如何實現openmv和STM32之間的UART通訊?

    我已經嘗試過,用OPENMV直接發送一給串口助手,串口助手可以接受到,用STM32自己的TX給RX寫信息,改變某一引腳的電平,可以實現(就是STM32的讀沒問題)。但是openmv給STM32送數據
    發表于 07-19 19:36

    OpenMv和STM32如何實現通信?

    OpenMv和STM32如何實現通信?
    發表于 11-17 06:14

    OpenMV簡單實現物體追蹤

    簡單實現物體追蹤OpenMV簡介材料準備OpenMV實現脫機運行1.將OpenMV與電腦連接2.使用IDE把軟件內自帶的代碼燒錄到OpenM
    發表于 11-30 06:59

    如何實現Openmv與stm32之間的通信?

    如何實現Openmv與stm32之間的通信?
    發表于 02-18 07:39

    基于OPENMV和STM32的識別追蹤小車設計實現

    OPENMV和STM32的識別追蹤小車(詳細版)實現:通過OPENMV識別Apriltags標簽,STM32驅動小車追蹤標簽博主通過一段時間的學習,做了這個比較簡單的以OPENMV為攝
    發表于 02-25 06:21

    OPENMV和STM32的識別追蹤小車(詳細版)之OPENMV

    OPENMV和STM32的識別追蹤小車(詳細版)實現:通過OPENMV識別Apriltags標簽,STM32驅動小車追蹤標簽博主通過一段時間的學習,做了這個比較簡單的以OPENMV為攝
    發表于 01-13 12:05 ?0次下載
    <b class='flag-5'>OPENMV</b>和STM32的識別追蹤小車(詳細版)之<b class='flag-5'>OPENMV</b>端

    RISC-V SIG成功將Chromium等桌面軟件適配到openEuler RISC-V

    近日,RISC-V SIG 成功將 Chromium 等桌面軟件適配到 openEuler RISC-V,這是繼 openSUSE 之后第二個跑起來 Chromium 的 RISC-V 發行版。
    的頭像 發表于 08-26 14:07 ?2215次閱讀

    LVGL Simulation工程

    最近在玩一個開源項目,用到ESP32,玩著玩著感覺開源項目的UI太枯燥了,于是了解到了LVGL,網上很多關于ESP32跑LVGL的現有工程
    的頭像 發表于 05-11 09:12 ?1133次閱讀
    <b class='flag-5'>LVGL</b> Simulation<b class='flag-5'>工程</b>

    Hi3861移植LVGL教程

    給 Hi3861 適配了硬件 spi ,master 模式下最高 spi 速率可以達到 40M,用來驅動 oled 屏幕。適配過程遇到了一個芯片bug,困擾了很久,clk 管腳驅動能力差,需要外接一個上拉電阻才能正常運行。適配
    的頭像 發表于 05-18 09:23 ?2256次閱讀
    Hi3861移植<b class='flag-5'>LVGL</b>教程

    OpenMV初識

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

    基于OpenMV實現演示與導出

    從原圖到實現,不用寫一行OpenCV代碼,借助OpenMV工具輕松導出流程,可以整合到C++,支持各種上位機集成,讓你用OpenCV開發的速度成倍提升。大大降低OpenCV開發難度,提升開發效率。
    發表于 09-01 15:23 ?803次閱讀
    基于<b class='flag-5'>OpenMV</b><b class='flag-5'>實現</b>演示與導出

    基于Vision Board上的openMV垃圾分類

    通過在Vision Board部署openMV實現垃圾分類。
    的頭像 發表于 06-17 10:49 ?648次閱讀
    基于Vision Board上的<b class='flag-5'>openMV</b>垃圾分類
    主站蜘蛛池模板: 女人被两根一起进3p在线观看| 久久人人爽爽爽人久久久| 成人精品亚洲| 丁香婷五月| 亚洲邪恶天堂影院在线观看| 在线免费看一级片| 色天天干| 成人午夜视频免费看欧美| 性夜影院爽黄a爽在线看香蕉| h国产视频| 久久99久久精品国产只有| 亚洲人成电影| 亚洲免费观看视频| 国产1卡2卡三卡四卡网站| 偷偷久久| 欧美性喷潮| 黄色aaa大片| 99久久免费精品视频| 免费看黄在线观看| 91美女啪啪| 日本欧美色图| 国产偷窥女洗浴在线观看亚洲| 午夜看片| 1024你懂的在线播放欧日韩| av福利网址网站| 欧亚激情偷乱人伦小说视频| 国产精品一区电影| 女bbbbxxxx视频| 一级欧美日韩| 毛片综合| 午夜网站在线| 欧美综合网站| 亚洲va国产va天堂va久久| 欧美爱爱网| 窝窝午夜看片免费视频| 美女免费视频一区二区三区| 日韩免费毛片视频| freesexvideo性欧美医生护士| 国产小视频在线观看免费| 年下系列高h文| 欧美人与禽交|