作为长期从事嵌入式与机器人自动化教学的工作者,在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框架开发,实现模块解耦与代码复用,核心代码段与功能说明如下,可直接移植并根据硬件微调。

  1. 系统初始化:头文件与全局变量定义

系统初始化是开发的基础,需引入ESP32 WIFI、事件处理、LCD驱动及FreeRTOS多任务相关库,定义全局引脚、WIFI配置、天气数据结构体等变量,确保全工程可调用。

C
// 头文件引用
#include "nvs_flash.h"
#include "esp_event.h"
#include "esp_http_client.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "esp_mac.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "cJSON.h"
#include "driver/gpio.h"
#include "driver/spi_master.h"
// 自行编写的LCD驱动头文件
#include "lcd.h"  

// 全局变量定义
// WIFI配置
#define WIFI_STA_SSID "你的WIFI名称"
#define WIFI_STA_PASSWORD "你的WIFI密码"
#define TAG "WIFI_LCD"
#define WIFI_CONNECTED_BIT BIT0
EventGroupHandle_t wifi_event_group = NULL;

// LCD引脚定义
#define LCD_CS_GPIO 5
#define LCD_RST_GPIO 21
#define LCD_DC_GPIO 22
#define LCD_SCK_GPIO 18
#define LCD_MOSI_GPIO 23

// 天气数据结构体(心知天气)
typedef struct{
    char date[20];    // 日期
    char temp[20];    // 温度(低-高)
    char humi[20];    // 湿度
    char rain[20];    // 天气状况
    int code;         // 天气编码(适配图标显示)
}WEATHER_Type;
WEATHER_Type weather[3];  // 存储未来3天天气

// 网络时间全局变量
char sys_time[30];  // 存储格式化后的网络时间

  1. WIFI联网模块:STA模式实现

WIFI模块采用ESP32标准STA模式,实现与路由器的连接,通过事件回调函数处理WIFI连接、断开、IP获取等事件,确保联网稳定性,核心代码与功能说明如下:

C
// WIFI事件回调函数:处理连接、断开、IP获取事件
void wifi_event_handler (void* event_handler_arg,esp_event_base_t event_base,int32_t event_id,void* event_data)
{
    if (event_base == WIFI_EVENT){
        switch (event_id){
            case WIFI_EVENT_STA_START:
                ESP_LOGI(TAG,"WIFI正在连接...");
                esp_wifi_connect();
            break;
            case WIFI_EVENT_STA_CONNECTED:
                ESP_LOGI(TAG,"WIFI连接成功!");
                gpio_set_level(GPIO_NUM_2, 1); // 板载LED亮,标识联网成功
            break;
            case WIFI_EVENT_STA_DISCONNECTED:
                gpio_set_level(GPIO_NUM_2, 0); // 板载LED灭,标识断网
                vTaskDelay(2000 / portTICK_PERIOD_MS);
                ESP_LOGI(TAG,"WIFI断开,重新连接...");
                esp_wifi_connect();
            break;
            default:break;
        }
    }
    if (event_base == IP_EVENT){
        if(event_id == IP_EVENT_STA_GOT_IP){
            ip_event_got_ip_t *ip_event = (ip_event_got_ip_t *)event_data;
            ESP_LOGI(TAG, "获取IP地址:" IPSTR, IP2STR(&ip_event->ip_info.ip));
            xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_BIT);
        }
    }
}

// WIFI配置函数:初始化网络、事件组、STA模式
void WifiConfig(void)
{
    wifi_event_group = xEventGroupCreate();
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_sta();
    // 注册WIFI与IP事件回调
    esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID,  wifi_event_handler, NULL);
    esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, wifi_event_handler, NULL);
    // 初始化WIFI配置
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    // 配置WIFI账号密码
    wifi_config_t wifi_config = {
        .sta = {
            .ssid = WIFI_STA_SSID,
            .password = WIFI_STA_PASSWORD,
            .bssid_set = 0,
        }};
    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
    ESP_ERROR_CHECK(esp_wifi_start());
    // 等待WIFI连接成功
    while (true){
        EventBits_t bits = xEventGroupWaitBits(wifi_event_group, WIFI_CONNECTED_BIT, pdTRUE, pdFALSE, portMAX_DELAY);
        if (bits & WIFI_CONNECTED_BIT) break;
    }
}

// WIFI初始化入口函数
void Wifi_STA_Init(void)
{
    // 初始化NVS(ESP32存储必备)
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK( ret );
    WifiConfig();
}

功能说明:本模块为项目基础,仅启动一次,联网成功后板载LED常亮,断网后熄灭并自动重连,通过事件组实现IP获取的同步等待,避免后续数据获取因网络未就绪出错。

  1. 网络数据获取模块:天气+网络时间

基于已连接的WIFI,通过HTTP GET请求访问心知天气API获取天气数据,通过网络时间协议实现时间同步,其中天气数据采用cJSON库解析,转换为结构化数据便于LCD显示,核心代码如下:

C
// 心知天气配置:替换为自己的私钥
#define USER_KEY "你的心知天气私钥"
#define LOCATION "nanning" // 目标城市
#define DAYS "3" // 获取未来3天天气

// HTTP GET请求获取心知天气数据
static void http_get_weather(void)
{
    char output_buffer[1300] = {0};
    int content_length = 0;
    // 拼接心知天气API请求地址
    static const char *URL = "http://api.seniverse.com/v3/weather/daily.json?"
    "key=" USER_KEY "&location=" LOCATION
    "&language=zh-Hans&unit=c&start=0&days=" DAYS;
    // 配置HTTP客户端
    esp_http_client_config_t config = {.url = URL,};
    esp_http_client_handle_t client = esp_http_client_init(&config);
    esp_http_client_set_method(client, HTTP_METHOD_GET);
    // 打开HTTP连接并获取数据
    esp_err_t err = esp_http_client_open(client, 0);
    if (err == ESP_OK){
        content_length = esp_http_client_fetch_headers(client);
        int data_read = esp_http_client_read_response(client, output_buffer, 1300);
        if (data_read >= 0){
            ESP_LOGI(TAG, "天气数据获取成功,开始解析...");
            cJSON_parse_task(output_buffer); // 调用cJSON解析函数,解析为WEATHER_Type结构体
        }
    }
    esp_http_client_close(client);
    esp_http_client_cleanup(client);
}

// 网络时间同步函数:适配ESP32 SNTP协议
void sntp_time_sync(void)
{
    sntp_setoperatingmode(SNTP_OPMODE_POLL);
    sntp_setservername(0, "ntp.aliyun.com"); // 阿里云NTP服务器,稳定
    sntp_init();
    // 等待时间同步完成
    while (sntp_get_sync_status() == SNTP_SYNC_STATUS_RESET) {
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        ESP_LOGI(TAG, "正在同步网络时间...");
    }
    // 格式化时间为字符串,存入sys_time
    time_t now;
    struct tm timeinfo;
    time(&now);
    localtime_r(&now, &timeinfo);
    strftime(sys_time, sizeof(sys_time), "%Y-%m-%d %H:%M:%S", &timeinfo);
    ESP_LOGI(TAG, "网络时间同步完成:%s", sys_time);
    sntp_stop();
}

功能说明:天气数据解析函数cJSON_parse_task可直接参考ESP32 WIFI开发笔记中的实现,将JSON格式的网络数据解析为自定义的WEATHER_Type结构体;网络时间采用阿里云NTP服务器,同步后格式化为年-月-日 时:分:秒字符串,便于LCD显示。

  1. LCD驱动显示模块:数据可视化核心

LCD模块为项目的输出环节,基于SPI接口实现LCD的初始化、清屏、字符显示、图片显示功能,核心驱动函数由自行编写的lcd.h和lcd.c实现,本模块仅调用驱动接口,将天气、时间数据显示在指定位置,核心代码如下:

C
// LCD显示初始化:引脚配置+SPI初始化+LCD屏幕初始化
void LCD_Init_All(void)
{
    // 配置LCD引脚为输出模式
    gpio_config_t lcd_gpio_cfg = {
        .pin_bit_mask = (1ULL<<LCD_CS_GPIO)|(1ULL<<LCD_RST_GPIO)|(1ULL<<LCD_DC_GPIO),
        .mode = GPIO_MODE_OUTPUT,
        .pull_up_en = GPIO_PULLUP_ENABLE,
        .pull_down_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_DISABLE,
    };
    gpio_config(&lcd_gpio_cfg);
    // 初始化SPI总线(适配ESP32 SPI Master)
    spi_bus_config_t spi_bus_cfg = {
        .miso_io_num = -1, // SPI写操作,无需MISO
        .mosi_io_num = LCD_MOSI_GPIO,
        .sclk_io_num = LCD_SCK_GPIO,
        .quadwp_io_num = -1,
        .quadhd_io_num = -1,
    };
    spi_bus_initialize(SPI2_HOST, &spi_bus_cfg, SPI_DMA_CH_AUTO);
    // 调用LCD底层驱动初始化函数
    lcd_init();
    lcd_clear(WHITE); // 清屏,白色背景
    ESP_LOGI(TAG, "LCD显示屏初始化成功!");
}

// 数据显示主函数:将天气、时间显示在LCD指定位置
void LCD_Show_Data(void)
{
    // 显示网络时间:坐标(20,10),字号24,黑色字体
    lcd_show_string(20, 10, (u8*)"当前时间:", 24, BLACK);
    lcd_show_string(120, 10, (u8*)sys_time, 24, BLACK);
    // 显示天气标题:坐标(20,50),字号24,黑色字体
    lcd_show_string(20, 50, (u8*)"未来3天天气:", 24, BLACK);
    // 显示第一天天气:坐标(20,90),字号16,黑色字体
    lcd_show_string(20, 90, (u8*)"日期:", 16, BLACK);
    lcd_show_string(60, 90, (u8*)weather[0].date, 16, BLACK);
    lcd_show_string(20, 110, (u8*)"温度:", 16, BLACK);
    lcd_show_string(60, 110, (u8*)weather[0].temp, 16, BLACK);
    lcd_show_string(20, 130, (u8*)"天气:", 16, BLACK);
    lcd_show_string(60, 130, (u8*)weather[0].rain, 16, BLACK);
    // 第二天、第三天天气显示可按上述格式扩展
    // 天气图标显示:根据weather[0].code匹配预制图标,调用lcd_show_pic函数
    // lcd_show_pic(200,90,48,48, (u8*)pic_weather[weather[0].code]);
}

功能说明:LCD底层驱动函数(如lcd_init、lcd_show_string、lcd_show_pic)需根据所使用的LCD型号(如1.3寸、2.4寸)编写,实现字符、数字、图片的基础显示;本函数为上层应用,仅需根据显示需求调整坐标、字号、显示内容,实现网络数据的可视化。

  1. 主函数:多任务调度与模块联动

基于FreeRTOS多任务调度,将WIFI初始化网络数据获取LCD显示封装为不同任务,实现模块联动,避免单任务阻塞导致的程序卡死,主函数核心代码如下:

C
void app_main(void)
{
    // 1. 初始化板载LED:GPIO2
    gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);
    gpio_set_level(GPIO_NUM_2, 0); // 初始灭
    // 2. 初始化LCD显示屏
    LCD_Init_All();
    // 3. 初始化WIFI并联网
    Wifi_STA_Init();
    // 4. 创建FreeRTOS任务,实现多任务调度
    // 网络时间同步任务:优先级5,栈大小4096
    xTaskCreate(sntp_time_sync, "sntp_time_sync", 4096, NULL, 5, NULL);
    // 天气数据获取任务:优先级5,栈大小8192(cJSON解析需较大栈空间)
    xTaskCreate(http_get_weather, "http_get_weather", 8192, NULL, 5, NULL);
    // LCD显示任务:优先级4,栈大小4096,每秒刷新一次
    xTaskCreate(LCD_Show_Data, "LCD_Show_Data", 4096, NULL, 4, NULL);
}

功能说明: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无故障

  • 实训成果展示与总结反思
  1. 项目功能演示

本项目实现了ESP32 WIFI STA模式联网心知天气网络数据获取阿里云NTP网络时间同步SPI接口LCD天气/时间可视化显示四大核心功能,具体演示效果如下:

  1. 程序启动后,板载LED先灭,WIFI连接成功后常亮,断网后自动熄灭并重连;
  2. LCD屏初始化后清屏为白色,依次显示同步后的网络时间(年-月-日 时:分:秒)、未来3天天气的日期、温度、天气状况;
  3. 可根据天气编码实现天气图标联动显示,如晴天显示太阳图标、雨天显示雨伞图标;
  4. 系统连续运行72h无故障,断网后可自动重连,数据获取与显示实时性良好。

  1. 实训总结与心得

作为嵌入式与机器人自动化方向的实训项目,本次ESP32 WIFI+LCD实战开发涵盖了硬件设计、底层驱动、网络通信、外设显示、多任务调度五大核心知识点,是从“裸机开发”到“智能化开发”的重要过渡,结合教学与实操经验,总结如下技术收获与教学建议:

  1. 技术收获
  1. 深入理解了ESP32 WIFI模块的工作原理,掌握了STA模式联网事件回调处理HTTP网络请求的开发方法,能独立实现ESP32与网络的数据交互;
  2. 掌握了SPI接口外设的驱动开发思路,理解了SPI通信的时钟、数据、片选核心原理,能根据外设手册编写通用的SPI驱动;
  3. 熟悉了FreeRTOS多任务调度机制,学会了根据模块重要性设置任务优先级,避免单任务阻塞导致的程序卡死,提升了系统的稳定性;
  4. 掌握了cJSON库解析JSON数据的方法,能将非结构化的网络数据转换为结构化的自定义结构体,为后续机器人环境感知模块开发奠定基础;
  5. 养成了“问题复盘”的开发习惯,能通过串口打印、报错信息快速定位硬件与代码问题,提升了嵌入式开发的排错能力。
  1. 团队协作(独立开发)

本次项目为独立开发,核心在于需求拆解与模块规划,将复杂的“WIFI+LCD”系统拆解为多个独立的子模块,逐个实现并调试,最后进行模块联动,这种开发思路可有效降低开发难度,提升开发效率。

  1. 教学建议
  1. 建议在嵌入式/机器人实训中,增加**“网络+外设”综合实战**课程,避免单一模块的开发,让学生理解嵌入式系统的模块联动逻辑;
  2. 希望提供更多不同接口的外设硬件(如I2C LCD、OLED屏、触摸屏),让学生对比不同接口的驱动差异,提升硬件适配能力;
  3. 建议在教学中加入物联网平台对接内容(如阿里云、腾讯云),将本次项目的天气/时间数据上传至云平台,实现“端-云”交互,贴合工业机器人与物联网的发展趋势;
  4. 可增加低功耗优化教学内容,针对ESP32的休眠模式进行调试,让系统适配机器人的锂电池供电场景,提升项目的实用性。
  • 拓展与延伸

本次基于ESP32的WIFI+LCD实战开发是机器人智能化的基础环节,在此基础上可进行多项拓展,适配更复杂的机器人设计需求:

  1. 添加环境传感器:结合DHT11/DHT22温湿度传感器、BH1750光照传感器,将本地环境数据与网络天气数据对比,在LCD屏同步显示,提升机器人的环境感知能力;
  2. 实现远程控制:通过MQTT协议对接物联网平台,实现手机APP远程控制LCD显示内容,或远程控制机器人的其他执行机构(如电机、舵机);
  3. 添加触摸交互:更换为触摸屏LCD,实现触摸切换显示页面(如时间页、天气页、传感器数据页),提升机器人的人机交互体验;
  4. 适配机器人移动平台:将本系统移植到ESP32智能小车平台,在小车移动过程中实时显示位置、速度、环境数据,实现移动机器人的状态可视化。

嵌入式与机器人开发的核心在于**“理论+实操+复盘”**,本次项目的每一个环节都离不开反复的调试与总结,希望本文的开发流程与问题排查技巧能为嵌入式入门者与机器人实训学生提供参考,在实操中积累经验,在复盘中提升能力。

本文代码已开源,可根据实际硬件调整引脚与配置,适配ESP32系列所有主控芯片,如需完整代码与LCD驱动文件,可在评论区留言交流。

  • 参考链接

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐