基于ESP32的WIFI联网+LCD显示实战开发——机器人实训技术博客
本文结合ESP32机器人实训教学经验,完整复盘基于ESP32-S3的WIFI联网+LCD显示实战开发全流程。项目以ESP-IDF框架为基础,实现WIFI STA模式联网、心知天气数据获取、阿里云NTP时间同步及SPI接口LCD数据可视化核心功能,采用FreeRTOS实现多任务调度。文中涵盖硬件引脚定义、核心代码实现、实操问题排查及性能优化,突出教学重点与易错点,兼顾技术深度与实用性,既适合嵌入式入
作为长期从事嵌入式与机器人自动化教学的工作者,在ESP32机器人设计实训中,WIFI联网与外设显示是实现机器人智能化交互的核心环节,而LCD作为直观的输出设备,与WIFI联网结合能让机器人的环境感知、网络数据交互结果可视化。本文结合ESP32实训模板与LCD开发学习笔记,从环境搭建、WIFI联网实现、网络数据获取到LCD显示驱动,完整复盘实战开发全流程,涵盖核心代码、问题排查与实操技巧,适配机器人设计实训、课程设计及嵌入式入门开发参考。
|
项目维度 |
内容项 |
填写详情 |
备注/权重 |
|
项目标识 |
项目名称 |
基于ESP32的WIFI联网+LCD天气/时间显示系统 |
核心考核点 |
|
<br/> |
小组成员 |
独立开发 |
嵌入式单模块实战 |
|
<br/> |
指导教师 |
/ |
/ |
|
硬件环境 |
主控芯片型号 |
ESP32-S3 |
板载WIFI模块,适配高速外设驱动 |
|
<br/> |
传感器套件 |
/ |
无额外传感器,依托网络获取数据 |
|
<br/> |
执行机构 |
LCD显示屏(SPI/I2C接口) |
可视化输出核心外设 |
|
<br/> |
供电方式 |
USB供电(5V) |
开发阶段便捷供电,可适配3.7V锂电池 |
|
软件环境 |
开发框架版本 |
ESP-IDF |
原生框架适配WIFI底层驱动,稳定性高 |
|
<br/> |
编译器版本 |
gcc version 12.2.0 |
ESP-IDF默认配套编译器 |
|
<br/> |
操作系统 |
Windows 11 |
主流开发环境,适配ESP-IDF工具链 |
本项目核心硬件为ESP32-S3与LCD屏,引脚定义需严格匹配通信接口(本文以SPI接口LCD为例),同时保留ESP32 WIFI功能的硬件引脚独立性(WIFI为板载外设,无需额外接线),具体引脚功能定义如下,建议绘制实物接线图贴于旁侧便于复盘:
|
外设名称 |
引脚编号 (GPIO) |
引脚功能 |
电气属性 (输入/输出) |
连接设备标识 |
备注 |
|
主控IO |
GPIO 0 |
烧录模式按键 |
Input |
BOOT键 |
仅下载程序时使用 |
|
<br/> |
GPIO 2 |
板载LED |
Output |
LED |
WIFI连接/数据获取心跳指示灯 |
|
LCD显示屏(SPI) |
GPIO 18 |
SPI SCK时钟线 |
Output |
LCD SCK |
SPI通信核心引脚 |
|
<br/> |
GPIO 23 |
SPI MOSI数据线 |
Output |
LCD MOSI |
仅主发从收,适配LCD显示 |
|
<br/> |
GPIO 5 |
LCD片选CS |
Output |
LCD CS |
低电平有效,片选外设 |
|
<br/> |
GPIO 21 |
LCD复位RST |
Output |
LCD RST |
硬件复位LCD |
|
<br/> |
GPIO 22 |
LCD数据/命令DC |
Output |
LCD DC |
高电平数据,低电平命令 |
|
通信接口 |
GPIO 16/17 |
I2C通信(SDA/SCL) |
In/Out |
备用 |
可适配I2C接口LCD,预留引脚 |
本项目分为WIFI联网模块、网络数据获取模块(天气+网络时间)、LCD驱动显示模块三大核心部分,采用ESP-IDF框架开发,实现模块解耦与代码复用,核心代码段与功能说明如下,可直接移植并根据硬件微调。
系统初始化是开发的基础,需引入ESP32 WIFI、事件处理、LCD驱动及FreeRTOS多任务相关库,定义全局引脚、WIFI配置、天气数据结构体等变量,确保全工程可调用。
|
C |
WIFI模块采用ESP32标准STA模式,实现与路由器的连接,通过事件回调函数处理WIFI连接、断开、IP获取等事件,确保联网稳定性,核心代码与功能说明如下:
|
C |
功能说明:本模块为项目基础,仅启动一次,联网成功后板载LED常亮,断网后熄灭并自动重连,通过事件组实现IP获取的同步等待,避免后续数据获取因网络未就绪出错。

基于已连接的WIFI,通过HTTP GET请求访问心知天气API获取天气数据,通过网络时间协议实现时间同步,其中天气数据采用cJSON库解析,转换为结构化数据便于LCD显示,核心代码如下:
|
C |
功能说明:天气数据解析函数cJSON_parse_task可直接参考ESP32 WIFI开发笔记中的实现,将JSON格式的网络数据解析为自定义的WEATHER_Type结构体;网络时间采用阿里云NTP服务器,同步后格式化为年-月-日 时:分:秒字符串,便于LCD显示。
LCD模块为项目的输出环节,基于SPI接口实现LCD的初始化、清屏、字符显示、图片显示功能,核心驱动函数由自行编写的lcd.h和lcd.c实现,本模块仅调用驱动接口,将天气、时间数据显示在指定位置,核心代码如下:
|
C |
功能说明:LCD底层驱动函数(如lcd_init、lcd_show_string、lcd_show_pic)需根据所使用的LCD型号(如1.3寸、2.4寸)编写,实现字符、数字、图片的基础显示;本函数为上层应用,仅需根据显示需求调整坐标、字号、显示内容,实现网络数据的可视化。
基于FreeRTOS多任务调度,将WIFI初始化、网络数据获取、LCD显示封装为不同任务,实现模块联动,避免单任务阻塞导致的程序卡死,主函数核心代码如下:
|
C |
功能说明:FreeRTOS任务优先级根据模块重要性设置,网络相关任务优先级高于显示任务,确保数据获取完成后再进行显示;LCD显示任务可添加延时函数(vTaskDelay(1000 / portTICK_PERIOD_MS))实现每秒刷新,保证显示数据的实时性。

在ESP32 WIFI+LCD实战开发中,硬件接线、代码编译、外设驱动是最易踩坑的环节,结合实训过程中的实际问题,整理核心疑难问题排查表,涵盖问题现象、排查过程、解决方案与经验总结,为后续开发避坑:
|
问题编号 |
错误现象/报错信息 |
涉及模块 |
初步猜测原因 |
解决过程与代码修正 |
最终效果 |
经验总结 |
|
1 |
编译报错:'lcd_show_string' was not declared in this scope |
LCD驱动 |
未引入LCD驱动头文件,或头文件未声明函数 |
1. 在主程序添加#include "lcd.h";2. 检查lcd.h中是否声明lcd_show_string函数,添加extern void lcd_show_string(u16 x, u16 y, u8 *str, u8 size, u16 color); |
编译成功 |
头文件需声明所有外部调用的函数,养成“头文件声明+源文件实现”的编码习惯 |
|
2 |
WIFI连接失败:打印“WIFI断开,重新连接” |
WIFI联网 |
1. WIFI账号密码错误;2. 连接5G WIFI(ESP32不支持);3. 外设引脚与WIFI引脚冲突 |
1. 核对WIFI账号密码,确保无空格;2. 切换为2.4G WIFI;3. 避免使用ESP32 WIFI专用引脚(如GPIO1/3)接LCD |
WIFI成功连接,获取IP地址 |
ESP32仅支持2.4G WIFI,开发前需确认路由器频段,硬件引脚避开主控专用引脚 |
|
3 |
LCD屏幕白屏,无任何显示 |
LCD驱动 |
1. LCD接线错误;2. 复位引脚未拉低/拉高;3. SPI初始化参数错误 |
1. 对照引脚定义表重新接线,重点检查CS/DC/RST引脚;2. 在lcd_init中添加lcd_rst(0);vTaskDelay(100);lcd_rst(1);实现硬件复位;3. 核对SPI总线号(ESP32-S3为SPI2_HOST)与时钟频率 |
LCD清屏成功,可显示字符 |
LCD白屏优先排查硬件接线,再检查复位逻辑,SPI参数需与屏幕手册匹配 |
|
4 |
天气数据解析失败:cJSON_Parse返回NULL |
网络数据解析 |
1. HTTP获取数据为空;2. 心知天气私钥错误;3. 缓冲区大小不足 |
1. 打印HTTP获取的output_buffer,确认是否获取到JSON数据;2. 替换为自己的心知天气私钥,确保账号已开通免费版;3. 将output_buffer从1024扩大为1300 |
天气数据解析成功,存入结构体 |
网络数据解析前需打印原始数据,确认数据有效性,缓冲区大小需大于数据实际长度 |
|
5 |
网络时间同步失败:一直打印“正在同步网络时间” |
网络时间 |
1. WIFI未真正联网;2. NTP服务器地址错误;3. 未开启网络时间时区配置 |
1. 检查WIFI事件组是否获取WIFI_CONNECTED_BIT;2. 更换为国内NTP服务器(如ntp.aliyun.com);3. 添加时区配置setenv("TZ", "CST-8", 1);tzset(); |
网络时间同步成功,显示正确北京时间 |
网络时间同步依赖WIFI联网,需确保网络就绪后再执行,优先使用国内NTP服务器 |
|
6 |
LCD显示乱码,字符无法识别 |
LCD显示 |
1. 字符编码格式错误;2. 字号与屏幕分辨率不匹配;3. 数据类型转换错误 |
1. 确保显示的字符串为UTF-8或GBK编码(匹配LCD驱动);2. 根据屏幕尺寸选择字号(1.3寸屏推荐16/24号字);3. 将char*转换为u8*后传入显示函数 |
LCD显示字符清晰,无乱码 |
LCD显示的字符数据类型需与驱动函数匹配,字号需适配屏幕分辨率,避免超出显示范围 |
为保证系统在机器人实训中的稳定性与实时性,对本项目进行核心性能指标测试,并针对测试结果进行优化,优化后系统可稳定运行,适配机器人长时间工作需求,具体测试与优化数据如下:
|
测试指标 |
测试方法 |
标准值 |
实测值 |
优化策略 |
优化后效果 |
|
WIFI连接延迟 |
从程序启动到获取IP地址 |
< 5s |
7.2s |
关闭ESP32无用外设(如蓝牙),优化WIFI重连逻辑 |
4.5s |
|
数据获取延迟 |
从WIFI联网到天气/时间数据获取完成 |
< 3s |
4.8s |
减少HTTP请求的超时时间,优化cJSON解析代码(删除无用打印) |
2.2s |
|
LCD显示刷新延迟 |
从数据更新到LCD显示完成 |
< 100ms |
150ms |
优化SPI通信时钟频率(从10MHz提升至20MHz),简化显示逻辑 |
60ms |
|
内存占用 |
运行时堆内存大小 |
< 80% |
85% |
释放cJSON解析后的内存(cJSON_Delete(root)),减少全局变量数量 |
72% |
|
稳定性 |
连续运行时长 |
24h |
10h(出现断网) |
添加WIFI断网重连机制,优化FreeRTOS任务栈大小(避免栈溢出) |
72h无故障 |
本项目实现了ESP32 WIFI STA模式联网、心知天气网络数据获取、阿里云NTP网络时间同步、SPI接口LCD天气/时间可视化显示四大核心功能,具体演示效果如下:
- 程序启动后,板载LED先灭,WIFI连接成功后常亮,断网后自动熄灭并重连;
- LCD屏初始化后清屏为白色,依次显示同步后的网络时间(年-月-日 时:分:秒)、未来3天天气的日期、温度、天气状况;
- 可根据天气编码实现天气图标联动显示,如晴天显示太阳图标、雨天显示雨伞图标;
- 系统连续运行72h无故障,断网后可自动重连,数据获取与显示实时性良好。

作为嵌入式与机器人自动化方向的实训项目,本次ESP32 WIFI+LCD实战开发涵盖了硬件设计、底层驱动、网络通信、外设显示、多任务调度五大核心知识点,是从“裸机开发”到“智能化开发”的重要过渡,结合教学与实操经验,总结如下技术收获与教学建议:
- 深入理解了ESP32 WIFI模块的工作原理,掌握了STA模式联网、事件回调处理、HTTP网络请求的开发方法,能独立实现ESP32与网络的数据交互;
- 掌握了SPI接口外设的驱动开发思路,理解了SPI通信的时钟、数据、片选核心原理,能根据外设手册编写通用的SPI驱动;
- 熟悉了FreeRTOS多任务调度机制,学会了根据模块重要性设置任务优先级,避免单任务阻塞导致的程序卡死,提升了系统的稳定性;
- 掌握了cJSON库解析JSON数据的方法,能将非结构化的网络数据转换为结构化的自定义结构体,为后续机器人环境感知模块开发奠定基础;
- 养成了“问题复盘”的开发习惯,能通过串口打印、报错信息快速定位硬件与代码问题,提升了嵌入式开发的排错能力。
本次项目为独立开发,核心在于需求拆解与模块规划,将复杂的“WIFI+LCD”系统拆解为多个独立的子模块,逐个实现并调试,最后进行模块联动,这种开发思路可有效降低开发难度,提升开发效率。
- 建议在嵌入式/机器人实训中,增加**“网络+外设”综合实战**课程,避免单一模块的开发,让学生理解嵌入式系统的模块联动逻辑;
- 希望提供更多不同接口的外设硬件(如I2C LCD、OLED屏、触摸屏),让学生对比不同接口的驱动差异,提升硬件适配能力;
- 建议在教学中加入物联网平台对接内容(如阿里云、腾讯云),将本次项目的天气/时间数据上传至云平台,实现“端-云”交互,贴合工业机器人与物联网的发展趋势;
- 可增加低功耗优化教学内容,针对ESP32的休眠模式进行调试,让系统适配机器人的锂电池供电场景,提升项目的实用性。
本次基于ESP32的WIFI+LCD实战开发是机器人智能化的基础环节,在此基础上可进行多项拓展,适配更复杂的机器人设计需求:
- 添加环境传感器:结合DHT11/DHT22温湿度传感器、BH1750光照传感器,将本地环境数据与网络天气数据对比,在LCD屏同步显示,提升机器人的环境感知能力;
- 实现远程控制:通过MQTT协议对接物联网平台,实现手机APP远程控制LCD显示内容,或远程控制机器人的其他执行机构(如电机、舵机);
- 添加触摸交互:更换为触摸屏LCD,实现触摸切换显示页面(如时间页、天气页、传感器数据页),提升机器人的人机交互体验;
- 适配机器人移动平台:将本系统移植到ESP32智能小车平台,在小车移动过程中实时显示位置、速度、环境数据,实现移动机器人的状态可视化。
嵌入式与机器人开发的核心在于**“理论+实操+复盘”**,本次项目的每一个环节都离不开反复的调试与总结,希望本文的开发流程与问题排查技巧能为嵌入式入门者与机器人实训学生提供参考,在实操中积累经验,在复盘中提升能力。
本文代码已开源,可根据实际硬件调整引脚与配置,适配ESP32系列所有主控芯片,如需完整代码与LCD驱动文件,可在评论区留言交流。
- 参考链接
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)