news 2026/10/3 19:55:07

HoloCubic_AIO LVGL8.3移植实战:显示、输入与文件系统初始化详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoloCubic_AIO LVGL8.3移植实战:显示、输入与文件系统初始化详解

HoloCubic_AIO LVGL8.3移植实战:显示、输入与文件系统初始化详解

【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO

HoloCubic_AIO 是一款基于 ESP32 的超多功能 AIO(All-in-One)固件,内置天气时钟、相册、视频播放、桌面投屏、Web 服务和 bilibili 粉丝等应用。本文以新手视角详解其中 LVGL 8.3 的移植流程:如何完成 240×240 屏幕的显示初始化、用 MPU6050 手势作为输入设备,以及 FatFS 文件系统驱动注册,带你快速读懂整个移植骨架。

一、5分钟认识 HoloCubic AIO 固件

HoloCubic 小电视是一块 240×240 的立方体智能屏,固件把"小电视"装进了一个 ESP32 开发板里。它的 UI 层完全由LVGL 8.3驱动,配合三大硬件外设:

外设角色关键文件
ST7789 TFT 屏幕显示输出display.cpp
MPU6050 六轴传感器手势/编码器输入imu.h
microSD 卡图片、天气图标、视频素材lv_fs_fatfs.c

固件源码采用 PlatformIO 工程组织,LVGL 8.3 完整源码以库形式放在 lib/lvgl-v8.3/,屏幕驱动基于 TFT_eSPI 库,IMU 驱动基于 MPU6050 库。

二、显示初始化:从背光 PWM 到 lv_disp_drv_register

显示部分是整个移植的"门面",核心逻辑集中在 display.cpp 的Display::init()中,流程分为五步:

  1. 背光控制:用 LEDC 硬件 PWM(5kHz)驱动背光引脚,先把亮度压到 0,避免初始化时出现"花屏";
  2. LVGL 启动:调用lv_init();
  3. 屏幕驱动启动:tft->begin()初始化 ST7789,发送开屏指令并设置旋转方向(加棱镜需要镜像,可通过设置项调整);
  4. 注册刷新回调:分配 240×80 像素的绘制缓冲区(draw buffer),把my_disp_flush设为刷新回调——LVGL 渲染完一块区域后,回调里用tft->pushColors()把像素推给屏幕,再调用lv_disp_flush_ready()通知 LVGL;
  5. 注册显示驱动:通过lv_disp_drv_register()把分辨率、缓冲区、回调一次性交给 LVGL。

之后每次主循环调用Display::routine(),实际执行的就是加锁后的lv_timer_handler(),让 LVGL 的定时器、动画、刷新持续运转。锁机制定义在 common.h 的AIO_LVGL_OPERATE_LOCK宏中,防止多任务并发访问 LVGL 产生脏数据。

💡 移植提示:如果你的硬件不是 TFT_eSPI 支持的屏,可以把 common.h 中的GFX宏改为 1,切换到 Arduino_GFX 驱动路径。

三、输入初始化:MPU6050 手势变身 LVGL 编码器

这块小电视没有触摸屏,"点按"全靠甩一甩。移植时把 MPU6050 的动作数据"翻译"成 LVGL 的编码器输入:

  • lv_port_indev.c 定义了encoder_read()回调,每次 LVGL 查询输入时读取全局变量encoder_diff(转动步数)和encoder_state(按下/抬起);
  • imu.h 中的 IMU 类负责解析 MPU6050 数据,识别出左转、右转、上滑、下滑、前进、摇晃、返回等动作,再写入encoder_diff/encoder_state;
  • 主入口 HoloCubic_AIO.cpp 的setup()里先显示一次界面、再初始化 IMU(mpu.init()比较耗时),并用一个 200ms 硬件定时器周期性触发mpu.getAction()采样动作,兼顾开机速度与输入灵敏度。

这种"IMU 写变量 → LVGL 回调读变量"的解耦方式,是移植无屏显输入设备时的经典套路。

四、文件系统初始化:注册 FatFS 的 'S:' 盘符

LVGL 要显示图片、播放素材,必须有文件系统。本工程采用双存储方案:

  • SPIFFS(Flash):存放配置数据,setup()里SPIFFS.begin(true)挂载,失败则直接停止;
  • FatFS(SD 卡):存放素材文件,由 lv_fs_fatfs.c 把 FatFS 的f_open / f_read / f_lseek / f_readdir等函数逐一包装成 LVGL 的文件系统回调,并以盘符S注册,此后 LVGL 中打开S:/weather/Sunny_100.bin这样的路径即可。

SD 卡里放什么?仓库根目录的 放置到内存卡/ 就是完整的素材清单:天气图标、图片、mjpeg 视频、表情包等,复制进 SD 卡即可让各 APP 正常工作。

五、编译烧录:PlatformIO 一键搞定

工程配置见 platformio.ini,几个关键项:

  • 平台:espressif32 @ ~3.5.0,框架 Arduino,开发板pico32;
  • 分区表:partitions-no-ota.csv(关闭 OTA,预留空间给 SPIFFS);
  • 默认环境为HoloCubic_AIO_Releases,另提供HoloCubic_AIO_Debug调试环境(-O0 + 日志)。

除 PlatformIO 命令行/IDE 外,也可用仓库自带的 AIO_Tool/ PC 图形工具完成刷机和资源管理;想先跑起来再改代码的话,还可以参考 lv_simulater_platformio/ 在 PC 上用 SDL2 模拟器直接预览 LVGL 界面。

六、移植清单:照抄这 6 步

把这套流程搬到自己项目上,按顺序完成即可:

  1. ✅ 引入 LVGL 8.3 源码并裁剪lv_conf.h;
  2. ✅ 用屏幕库初始化 TFT,写一个flush_cb把像素推给屏幕并调用lv_disp_flush_ready;
  3. ✅ 调用lv_disp_draw_buf_init()+lv_disp_drv_register()注册显示;
  4. ✅ 准备输入设备(触摸/编码器/手势),实现read_cb回调并注册lv_indev_drv;
  5. ✅ 把存储设备(SD 卡/NVS)封装成lv_fs_drv回调并注册盘符;
  6. ✅ 在主循环中周期性执行lv_timer_handler(),必要时加互斥锁。

按这份清单走完,你就拥有了 HoloCubic_AIO 同款"显示 + 输入 + 文件"三件套,剩下的就是像它一样把天气、相册、视频一个个 APP"安装"进控制器了 🎉

【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 19:54:35

如何用 LLM API 批量生成短视频脚本?一套可落地的 AI 生文工作流

如何用 LLM API 批量生成短视频脚本?一套可落地的 AI 生文工作流 我做内容时经常遇到一个很具体的卡点:素材已经有了,选题也记在表格里,但轮到写口播稿,光是把同一件事改成不同平台能用的表达,就要耗掉一整…

作者头像 李华
网站建设 2026/10/3 19:53:16

161万个WPT测试全通过:Moli的Web平台标准兼容性建设蓝图

161万个WPT测试全通过:Moli的Web平台标准兼容性建设蓝图 【免费下载链接】moli Best headless browser for AI agents. Lite, Fast, High-Compatibility. Built in Rust 项目地址: https://gitcode.com/gh_mirrors/moli/moli Moli 是一款用 Rust 编写的开源、…

作者头像 李华
网站建设 2026/10/3 19:50:01

splashboard 2.7.0 Windows x64 下载:终端信息面板 ZIP 备用地址

splashboard 2.7.0 Windows x64 ZIP 下载入口 需要在终端启动时查看项目状态、常用信息或自定义面板,可以了解 splashboard。本文分享固定版本 2.7.0,文件名为 splashboard-v2.7.0-x86_64-pc-windows-msvc.zip,夸克文件列表显示 9.2M&#x…

作者头像 李华
网站建设 2026/10/3 19:45:23

Proteus 9.0安装教程:从环境准备到Keil联调完整指南

1. 为什么 Proteus 9.0 值得单独写一篇安装实录 搞单片机、搞电路仿真的朋友,对 Proteus 这个软件肯定不陌生。它最核心的价值就一个:让你在电脑上把电路搭出来、把程序跑起来,不用焊板子、不用烧芯片,就能看到 LED 亮不亮、串口发…

作者头像 李华
网站建设 2026/10/3 19:43:29

第四篇:AI对话引擎全解析,Claude Code如何编排工具调用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 19:41:21

从零开始编写MCP Server:全网最详细指南(TaoToken 统一 Key 接入版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华