本帖最后由 PY学习笔记 于 2025-8-27 16:55 编辑
近期,DFRobot 推出了全新开发板 FireBeetle 2 ESP32-C5。这块开发板搭载了 ESP32-C5 主控,集成 支持5GHz的Wi-Fi6(意思为可以连接5G网络),凭借强劲性能,令人眼前一亮。很荣幸能抢先体验这块开发板! 1.开发板介绍FireBeetle 2 ESP32-C5有很多外设: 2.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)
复制代码
接着我又写了两个无需触摸的代码: - 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%一直没有解决,遇到的朋友不用担心,不会有问题的
|