|
FireBeetle 2 ESP32-P4 是一款搭载 ESP32-P4R32 芯片的高性能微控制器开发板,支持单精度 FPU 浮点运算与 AI 指令扩展,边缘 AI 处理能力十分出色,搭配 LVGL-MicroPython 开发图形界面效果最佳。 1、开发板速览双核RISC-V 360MHz + 单核RISC-V 40MHz处理器,提供强劲的计算能力 支持单精度 FPU 和 AI 扩展,具有强大的边缘AI能力 768KB L2MEM + 32MB PSRAM + 16MB FLASH,为数据、指令、代码提供高性能、大容量的存储 板载MIPI-DSI接口,最高支持720p@88fps 或 1080p@30fps图像显示 板载MIPI-CSI接口,最高支持720p@88fps 或 1080p@30fps图像采集 集成ESP32-C6模组,支持WiFi6、Bluetooth 5通讯 集成丰富易用的扩展接口:USB OTG 2.0高速、MIC、TF卡槽
2、LVGL_MicroPython 固件Micropython官方已支持ESP32-P4,Kevin维护的LVGL-Micropython也已支持ESP32-P4,但是DSI驱动还有点问题。我对源码进行修改并成功编译了lvgl_micropython固件。 编译过程略折腾,附件直接提供已编译好的固件,省去大家动手编译的麻烦。 3、烧录参考ESP32的烧录方法,注意烧录地址为:0x2000。 4、正式体验LVGL-Micropython 的屏幕与触摸驱动配置较为繁琐,我已将其封装为screen.py驱动模块,通过该模块可快速完成显示屏和触摸功能的初始化,大幅简化开发流程。 先将命名为 screen.py 的屏幕驱动文件上传到开发板根目录,LVGL 官方提供的 DEMO 原本不适配本这块屏幕,我对其进行修改测试:
- import lvgl as lv
- import screen
-
- # ---------- 初始化 ----------
- scr = lv.screen_active()
- scr.set_style_bg_color(lv.color_hex(0x000000), 0)
-
- # ---------- Controls 页面 ----------
- def controls_create(parent):
- parent.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
- parent.set_flex_align(lv.FLEX_ALIGN.SPACE_EVENLY, lv.FLEX_ALIGN.CENTER,
- lv.FLEX_ALIGN.CENTER)
-
- # Button
- btn = lv.button(parent)
- btn.set_size(100, 50)
- lbl = lv.label(btn)
- lbl.set_text("Button")
- lbl.center()
-
- # Switch
- sw = lv.switch(parent)
-
- # Checkbox
- cb = lv.checkbox(parent)
- cb.set_text("Check")
-
- # Slider + label
- slider = lv.slider(parent)
- slider.set_range(0, 100)
- slider.set_value(40, False)
- slider.set_size(150, 10)
-
- lbl_val = lv.label(parent)
- lbl_val.set_text("40")
- slider.add_event_cb(lambda e: lbl_val.set_text(str(slider.get_value())),
- lv.EVENT.VALUE_CHANGED, None)
-
- # Text area
- ta = lv.textarea(parent)
- ta.set_size(200, 80)
- ta.set_placeholder_text("Enter text here")
- ta.set_one_line(False)
-
- # 添加键盘
- kb = lv.keyboard(parent)
- kb.set_size(480, 150)
- kb.set_style_bg_color(lv.color_hex(0x333333), 0)
- kb.set_style_text_color(lv.color_hex(0xFFFFFF), 0)
- kb.set_textarea(ta) # 将键盘与文本输入框关联
-
- # 隐藏键盘,直到需要时显示
- kb.add_flag(lv.obj.FLAG.HIDDEN)
-
- # 为文本输入框添加事件回调
- def ta_event_cb(e):
- code = e.get_code()
- #print(f"Event code: {code}") # 打印事件代码
- if code == lv.EVENT.FOCUSED:
- print("Text area focused")
- kb.remove_flag(lv.obj.FLAG.HIDDEN) # 当文本输入框获得焦点时显示键盘
- elif code == lv.EVENT.DEFOCUSED:
- print("Text area defocused")
- kb.add_flag(lv.obj.FLAG.HIDDEN) # 当文本输入框失去焦点时隐藏键盘
-
- ta.add_event_cb(ta_event_cb, lv.EVENT.ALL, None)
-
- # ---------- Visuals 页面 ----------
- def visuals_create(parent):
- parent.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
- parent.set_flex_align(lv.FLEX_ALIGN.SPACE_EVENLY, lv.FLEX_ALIGN.CENTER,
- lv.FLEX_ALIGN.CENTER)
-
- # Line chart
- chart = lv.chart(parent)
- chart.set_size(220, 130)
- chart.set_type(lv.chart.TYPE.LINE)
- chart.set_point_count(8)
- chart.set_div_line_count(3, 5)
-
- ser1 = chart.add_series(lv.color_hex(0x01a2b1), lv.chart.AXIS.PRIMARY_Y)
- ser2 = chart.add_series(lv.color_hex(0x44d1b6), lv.chart.AXIS.PRIMARY_Y)
- for v in [10, 90, 30, 60, 10, 90, 30, 60]:
- chart.set_next_value(ser1, v)
- for v in [32, 66, 5, 47, 32, 66, 5, 47]:
- chart.set_next_value(ser2, v)
-
- # Arc
- arc = lv.arc(parent)
- arc.set_size(120, 120)
- arc.set_range(0, 100)
- arc.set_value(50)
-
- # Label with style
- lbl = lv.label(parent)
- lbl.set_text("Styled Label")
- lbl.set_style_text_color(lv.color_hex(0xFF0000), 0)
-
- # ---------- Selectors 页面 ----------
- def selectors_create(parent):
- parent.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
- parent.set_flex_align(lv.FLEX_ALIGN.SPACE_EVENLY, lv.FLEX_ALIGN.CENTER,
- lv.FLEX_ALIGN.CENTER)
-
- # Calendar
- cal = lv.calendar(parent)
- cal.set_size(160, 160)
-
- # Dropdown
- dd = lv.dropdown(parent)
- dd.set_options("Alpha\nBravo\nCharlie\nDelta")
- dd.set_size(120, 40)
-
- # Roller
- roller = lv.roller(parent)
- roller.set_options("A\nB\nC\nD\nE", lv.roller.MODE.NORMAL)
- roller.set_size(120, 60)
-
- # List
- lst = lv.list(parent)
- lst.set_size(200, 150)
- lst.set_style_bg_color(lv.color_hex(0x333333), 0)
- lst.set_style_text_color(lv.color_hex(0xFFFFFF), 0)
-
- # 添加文本和按钮
- list_btn1 = lst.add_button(lv.SYMBOL.FILE, "File")
- list_btn2 = lst.add_button(lv.SYMBOL.SETTINGS, "Settings")
- list_btn3 = lst.add_button(lv.SYMBOL.BATTERY_FULL, "Battery")
-
- # ---------- 主界面 ----------
- tabview = lv.tabview(scr)
- tabview.set_size(800, 480)
-
- tab1 = tabview.add_tab("Controls")
- tab2 = tabview.add_tab("Visuals")
- tab3 = tabview.add_tab("Selectors")
-
- controls_create(tab1)
- visuals_create(tab2)
- selectors_create(tab3)
-
复制代码
ESP32-P4 的性能能让 LVGL 的显示效果得到更好的发挥。
|