# ESP32-S3+LVGL+FreeRTOS smart_terminal **Repository Path**: dhs347/smart-terminal ## Basic Information - **Project Name**: ESP32-S3+LVGL+FreeRTOS smart_terminal - **Description**: 纯小白,水平有限仅作参考!!! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-12-31 - **Last Updated**: 2025-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP32+LVGL+FreeRTOS多功能智能终端 这个项目是一个基于 ESP32-S3 和 LVGL (v9) 图形库开发的多功能综合智能终端。静止时约50FPS,工作时也有25-45FPS,还挺流畅。可以说是我嵌入式入门的课设。 **b站链接:** [https://www.bilibili.com/video/BV1Zsv6BcEjJ/](https://www.bilibili.com/video/BV1Zsv6BcEjJ/?spm_id_from=333.1387.upload.video_card.click&vd_source=a5af305d351dea5aafb311bb5b0268d5) **gitee开源代码:** [https://gitee.com/max1337/smart-terminal](https://gitee.com/max1337/smart-terminal) ## 一、功能 1. 支持左右划屏切换应用菜单,点击图标进入子应用。 2. 实时显示时、分、秒;通过 SNTP 网络校时同步日期、星期。 3. 通过心知天气获取三天的天气和所在的城市。 4. 通过 DHT11 传感器采集温湿度;控制板载 LED 通断、亮度(PWM)及 RGB 灯效。 5. 可以实时查看/发送串口数据。 6. 使用AIDA64进行PC 性能监控,实时显示 CPU占用、温度、内存使用率,内存可用大小。 7. 可以玩三个小游戏:谷歌小恐龙,2048,贪吃蛇。 8. 计算器功能。 9. AI 智能对话(文本输入),接入 MiniMax (abab6.5s) 大模型,中英文智能聊天,具备历史记录滚动查看功能。 10. 输入账号密码连接WIFI。 ## 二、技术栈 ### 1. 硬件抽象与驱动层 * **通信接口:** * 8080 并行总线:驱动 ST7789 屏幕,实现高帧率显示。 * I2C:驱动 FT6336U 触摸屏和 XL9555 端口扩展器。 * UART/GPIO/PWM:用于串口通信、传感器采集和 LED 调光。 * **IO 扩展技术:** 通过 XL9555 节省 ESP32 引脚,管理屏幕复位、背光和按键中断。 ### 2. 软件框架 * **操作系统:** FreeRTOS。采用多任务架构,将 LVGL 渲染、传感器读取、串口接收、网络请求分到不同任务执行。 * **图形库:** LVGL v9。利用其事件驱动机制、动画引擎和丰富的组件(TextArea, ButtonMatrix, Keyboard)。 * **文件系统:** SPIFFS。将 UI 所需的图片素材存储在 Flash 中,通过相对路径引用。 * **开发环境:** 使用vscode+esp-idf开发。 ### 3. 网络与云端服务 * **联网协议:** Wi-Fi STA 模式,配合 LwIP 协议栈。 * **应用层协议:** * HTTP Client:用于发送 POST 请求给 AI 接口和获取天气数据。 * SSE: 解析AIDA64的HTTP数据。 * SNTP:用于同步全球标准时间。 * cJSON:用于解析 AI 和天气接口返回的 JSON 数据包。 ## 三、难点与注意事项(避坑指南) 1. **内存管理** * **PSRAM 是必须的:** 由于 LVGL 9 非常吃内存,必须开启 ESP32-S3 的外部 PSRAM,并设置 malloc 自动分配。 * **栈空间溢出:** 网络任务和拼音输入法任务需要较大的栈空间(建议 16KB 以上),否则极易触发 Stack Overflow 导致重启。 2. **UI 线程安全** * **LVGL 锁机制:** 在 FreeRTOS 的其他任务(如串口接收、DHT11 读取)中更新 UI 控件时,必须使用 `lvgl_port_lock(0)` 和 `unlock`,否则会由于多核竞争导致 UI 界面随机死机或出现乱码。如果操作控件没反应,很有可能没注册事件或回调函数。如果操作控件死机了,很有可能是guider.c里void init_scr_del_flag(lv_ui *ui)函数中ui->screen_xxxx_del = true;忘加了,如果操作控件屏幕直接重启,很有可能是,定义控件时的变量名和你注册事件函数或回调函数用到的变量名不一样,有的时候有这些变量只有细微的区别,编译不会报错,因为语法是对的,但是逻辑不对 3. **HTTPS 安全连接** * **证书验证:** 访问 AI 接口必须处理 SSL 证书。 4. **健壮性处理** * **联网状态预检:** 在发起 HTTP 请求前,必须先调用 Wi-Fi 状态检查,避免在未联网状态下初始化网络组件导致系统崩溃。 * **看门狗触发:** UI 加载动画过于复杂或阻塞时间过长会触发 Task Watchdog。应保证 UI 逻辑简洁,并合理分配任务优先级。 5. **debug** * vscode不好debug,加入了大量串口输出调试如`ESP_LOGI()`。 6. **不懂问AI,** 整体UI代码框架非常清晰,完全按照gui guider的生成框架标准写的(除2048游戏,因为我当时偷懒了,请注意)。懒得出代码讲解了,见谅。 7. **使用串口功能时,** 请务必`ctrl+]`退出vscode esp-idf终端,这样使用电脑上的串口调试助手才不会出现串口被占用,打不开串口的情况。 8. **有时可能会WIFI突然断开,** 这个时候重启板子重新联网,多这样试几次就好了,这是环境问题。 9. **AI聊天机器人用的是minimax平台,** 请去官网注册并免费开通账户,这样才能用,密钥要自己生成! ## 四、不足之处 1. LCD的背光在我的开发板上接到了XL9555上,没有直接接ESP32-S3的GPIO,因此无法进行屏幕亮度调节。 2. WIFI连接采取最普通的输入账号密码,故而我用了NVS也不会重新上电就直接有记忆地连接WIFI,必须输入账号密码。没有扫描网络的功能。 3. AI聊天是文本形式,不是语音对话模式。没有中文输入法,因为我懒得搞字库了,而且内存太大了,不过聊天用拼音AI也听的懂。 4. 懒得接OneNet。 ## 五、补充说明 1. **学习ESP32+LVGL的参考资料:** b站宸芯物联,板子也是买的他家的,讲的真的很好,大概1周即可学完,这里面例如sntp,天气,aida64部分就是参考他的教程。 2. 本项目搓了5天。 3. 在学习之前建议学一学FreeRTOS,否则可能部分代码就是看天书,可以看正点原子,我是看的尚硅谷,不是官号的那个教程,不过那个很好的非官号教程貌似现在被下架了