尝鲜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]