PY学习笔记 发表于 2025-8-27 16:54:37

尝鲜DFRobot ESP32-C5开发板,LVGL Micropython性能检测体验

本帖最后由 PY学习笔记 于 2025-8-27 16:55 编辑

近期,DFRobot 推出了全新开发板 FireBeetle 2 ESP32-C5。这块开发板搭载了 ESP32-C5 主控,集成 支持5GHz的Wi-Fi6(意思为可以连接5G网络),凭借强劲性能,令人眼前一亮。很荣幸能抢先体验这块开发板!1.开发板介绍FireBeetle 2 ESP32-C5有很多外设:
[*]Type-C:USB接口
[*]Charge:充电指示灯

[*]熄灭:未接入电源或已充满
[*]常亮: 充电中
[*]15/D13:板载LED引脚
[*]RST:复位按键
[*]28/BOOT:IO28引脚/BOOT按键
[*]BAT:锂电池接口,支持3.7~4.2V
[*]lO1:电池电压检测引脚
[*]3V3_C:IO0控制3.3V电源输出,默认关闭,可高电平开启。
[*]GDI:GDI显示屏接口
[*]ESP32-C5:型号为ESP32-C5-WROOM-1模组
2.micropython烧录在上一篇《尝鲜DFRobot ESP32-C5开发板,玩转LVGL Micropython》的基础上添加了性能检测的效果,根据上一篇烧录即可。3.正式体验请先修改screen.py提高性能:import lcd_bus
from micropython import const
import machine
import lcd_utils

# 创建SPI总线对象
spi_bus = machine.SPI.Bus(
    host=1,
    mosi=24,
    miso=25,
    sck=23,
)

# 创建显示屏的SPI通信对象
display_bus = lcd_bus.SPIBus(
    spi_bus=spi_bus,
    freq=40000000,
    dc=8,
    cs=27,
)

import ili9488
import lvgl as lv
import task_handler

# 创建显示屏对象
display = ili9488.ILI9488(
    data_bus=display_bus,
    display_width=320,
    display_height=480,
    backlight_pin=15,
    reset_pin=26,
    reset_state=ili9488.STATE_LOW,
    color_space=lv.COLOR_FORMAT.RGB888,
    color_byte_order=ili9488.BYTE_ORDER_RGB,
    rgb565_byte_swap=True,
)

import i2c
import task_handler
import gt911

# 初始化显示屏
display.init()

# 定义触摸屏的I2C通信参数
i2c_bus = i2c.I2C.Bus(host=0, scl=10, sda=9, freq=400000, use_locks=False)
print(i2c_bus.scan())
touch_dev = i2c.I2C.Device(bus=i2c_bus, dev_id=0x5D, reg_bits=gt911.BITS)

# 创建触摸屏设备对象
indev = gt911.GT911(touch_dev)

# 如果未校准,则进行校准
#indev.calibrate()
#indev._cal.mirrorX = False
#indev._cal.mirrorY = True
#indev._cal.save()

# 启用输入优先级
indev.enable_input_priority()

# 旋转显示
display.set_rotation(lv.DISPLAY_ROTATION._270)
# 打开屏幕背光(实战派ESP32C3是相反的)
display.set_backlight(1)
th = task_handler.TaskHandler(duration=1)
然后再次运行上一篇《尝鲜DFRobot ESP32-C5开发板,玩转LVGL Micropython》的程序会看到画面不动基本在100FPS左右。接着我又写了两个无需触摸的代码:import lvgl as lv
import screen

scr = lv.screen_active()      # 获取当前活动屏幕

obj = lv.obj(scr)
obj.remove_flag(lv.obj.FLAG.SCROLLABLE)
obj.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), 0)
obj.set_style_radius(lv.RADIUS_CIRCLE, 0)
obj.align(lv.ALIGN.LEFT_MID, 10, 0)

# size 动画:通过 key = "size" 实现
a1 = lv.anim_t()
a1.init()
a1.set_var(obj)
a1.set_values(10, 100)
a1.set_duration(2500)
a1.set_reverse_delay(250)
a1.set_reverse_duration(300)
a1.set_repeat_delay(500)
a1.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
a1.set_path_cb(lv.anim_t.path_ease_in_out)
a1.set_custom_exec_cb(lambda a,val: obj.set_size(val,val))
a1.start()

# x 坐标动画:通过 key = "x" 实现
a2 = lv.anim_t()
a2.init()
a2.set_var(obj)
a2.set_values(10, 380)
a2.set_duration(2500)
a2.set_reverse_delay(250)
a2.set_reverse_duration(300)
a2.set_repeat_delay(500)
a2.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
a2.set_path_cb(lv.anim_t.path_ease_in_out)
a2.set_custom_exec_cb(lambda a,val: obj.set_x(val))
a2.start()
import lvgl as lv
import math,screen

scr = lv.screen_active()

# -------------------------------------------------
# 工具:角度 -> 方位字符串
# -------------------------------------------------
def heading_to_cardinal(heading: int) -> str:
    h = heading % 360
    if   h < 23:return "N"
    elif h < 68:return "NE"
    elif h < 113: return "E"
    elif h < 158: return "SE"
    elif h < 203: return "S"
    elif h < 248: return "SW"
    elif h < 293: return "W"
    elif h < 338: return "NW"
    else:         return "N"

# -------------------------------------------------
# 创建 scale(罗盘)
# -------------------------------------------------
scale = lv.scale(scr)
scale.set_size(200, 200)
scale.set_mode(lv.scale.MODE.ROUND_INNER)
scale.align(lv.ALIGN.CENTER,0,0)

scale.set_total_tick_count(61)
scale.set_major_tick_every(5)

scale.set_style_length(5, lv.PART.ITEMS)
scale.set_style_length(10, lv.PART.INDICATOR)
scale.set_style_line_width(3, lv.PART.INDICATOR)
scale.set_range(0, 360)

custom_labels = ["N", "30", "60", "E", "120", "150",
               "S", "210", "240", "W", "300", "330", ""]
scale.set_text_src(custom_labels)

scale.set_angle_range(360)
scale.set_rotation(270)

# -------------------------------------------------
# 中心文字标签
# -------------------------------------------------
label = lv.label(scr)
label.set_width(100)
label.align(lv.ALIGN.CENTER,0,0)
label.set_text("0°\nN")
label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)

# -------------------------------------------------
# 红色箭头符号
# -------------------------------------------------
symbol = lv.label(scale)
symbol.align(lv.ALIGN.TOP_MID, 0, 5)
symbol.set_text(lv.SYMBOL.UP)
symbol.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
symbol.set_style_text_color(lv.palette_main(lv.PALETTE.RED), 0)

# -------------------------------------------------
# 动画:旋转罗盘
# -------------------------------------------------
def set_heading_value(_, v):
    scale.set_rotation(270 - v)
    label.set_text(f"{v}°\n{heading_to_cardinal(v)}")

anim = lv.anim_t()
anim.init()
anim.set_var(scale)
anim.set_custom_exec_cb(lambda _, v: set_heading_value(None, v))
anim.set_duration(5000)
anim.set_repeat_delay(500)
anim.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
anim.set_reverse_duration(5000)
anim.set_reverse_delay(500)
anim.set_values(0, 360)
anim.start()
第一个基本在50~130FPS(差距很大的原因是动画又慢有快)之间,而第二个很奇怪调了很久还是3~4FPS:
PS:CPU为0%一直没有解决,遇到的朋友不用担心,不会有问题的


页: [1]
查看完整版本: 尝鲜DFRobot ESP32-C5开发板,LVGL Micropython性能检测体验