欢迎光临
我们一直在努力

ESP32芯片基础应用

日期:2026年3月9日

本文为机器人设计与应用综合实训中,基于ESP32的开发技术分享帖,主要记录实训过程中的ESP32开发要点、问题排查及实践总结,表格部分留空供同学们根据自身实训情况填写,适配实训报告补充、技术复盘及同学间交流使用。

核心方向:ESP32芯片基础应用、机器人控制模块开发、传感器数据交互、代码调试与优化,贴合实训核心需求,兼顾技术细节与实操记录。

一、实训基础信息

实训项目名称

实训时间

ESP32开发板型号

开发环境

实训小组人数

ESP32与LVGL应用

3月12日

ESP32-S3

VSCode ESP-IDF

1

二、ESP32开发核心知识点梳理

本部分记录实训中涉及的ESP32核心技术点,包括引脚配置、外设驱动、通信协议等,结合机器人设计场景补充细节。

知识点类别

具体知识点

核心原理简述

实训应用场景

(机器人相关)

备注

(易错点/重点)

图片显示

将想要显示的图片于LCD显示

将图像分解为像素点阵,通过通信接口将每个像素的颜色数据按坐标发送至液晶显示屏,驱动液晶分子改变透光率,从而在屏幕上组合并还原出完整的图像。

机器人显示图片,表情包,动图等。

图片是否放置在正确的项目工程。

文字显示

在LCD屏幕显示文字

将一块区域看成整体(汉字16*16,字符8*16),在这块区域上设置字体颜色和背景色,由字体色组合出想要的文字。

机器人LCD显示文字进行与外界交互。

调节文字大小及行间距。

GIF表情包显示

将GIF图片分离后显示在屏幕上

按文件结构解析出每一帧图像数据,再按帧延迟时间依次渲染,本质是 “多帧静态图 + 时间控制” 的幻灯片式播放。

服务机器人(如展厅导览、餐饮机器人)需要展示动态提示(如 “请扫码”“正在送餐”)、表情动画(如开心、抱歉),或工业机器人展示工作状态(如 “运行中”“故障预警”)。

帧数过大导致显示不出结果

三、ESP32机器人开发实操步骤

按实训流程,记录从环境搭建到机器人功能实现的完整步骤,重点填写ESP32相关操作,明确每一步的核心操作与目的。

步骤序号

实操内容

(ESP32相关)

操作步骤细节

使用工具/代码片段

操作结果

(成功/失败及原因)

1

LVGL移植

准备工程;拉取组件;添加LVGL相关代码;添加LVGL设置

   lvgl/lvgl: ^9.4.0

  espressif/esp_lvgl_port: ^2.6.3

  espressif/esp_lcd_touch_ft5x06: ^1.0.6  # 触摸屏驱动

成功

2

页面设计

打开文本显示网站;找到需要相关代码;尝试编译代码是否可用

http://lvgl.100ask.net/9.2/

成功

四、ESP32开发常见问题及解决方案

记录实训过程中遇到的ESP32开发相关问题(如烧录失败、外设通信异常、代码报错等),填写解决方案与总结,便于后续复盘和同学参考。

问题序号

问题描述(ESP32相关)

排查过程

解决方案

问题总结(避免方法)

1

LVGL移植准备工程出现错误

检测工程是否可用

不可用即修改工程

移植前应先详细检查

2

添加LVGL代码过程出现报错

确实代码运行路径是否正确

修改路径,不断检测

确定SKD是否修改

3

页面设计过程出现混乱排版

查看代码是否正确

如果代码正确还无法运行,尝试添加新代码

页面设计代码运行过程容易出现问题,需不断修改,尝试。

五、实训总结与ESP32开发心得

项目完成情况

ESP32开发重点收获

存在的不足

后续改进计划

设计页面

了解LVGL是一个开源的嵌入式图形库,专为资源受限的微控制器和小型设备设计,用于创建美观、响应迅速的图形用户界面。

LVGL显示应用代码出现错误

更换路径,修改代码

  • 代码附录

页面设计代码:

/*

 * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD

 *

 * SPDX-License-Identifier: CC0-1.0

 */

#include <stdio.h>

#include <inttypes.h>

#include "sdkconfig.h"

#include "freertos/FreeRTOS.h"

#include "freertos/task.h"

#include "esp_chip_info.h"

#include "esp_flash.h"

#include "esp_system.h"

#include "LCD/LCD.h"

#include "Timer.h"

#include "demos/lv_demos.h"

static void event_handler(lv_event_t * e)

{

}

void lv_example_demo(void)

{

    lv_obj_t * label;

    label = lv_label_create(lv_scr_act());

    lv_label_set_text(label, "login interface");

    lv_obj_set_width(label, 240);

    lv_obj_set_height(label, 30);

    lv_obj_set_x(label, 40);

    lv_obj_set_y(label, 10);

    lv_obj_t *textarea = lv_textarea_create(lv_scr_act());

    lv_textarea_set_placeholder_text(textarea, "Please enter your account number.");

    lv_textarea_set_one_line(textarea, true);  // 单行模式

    lv_obj_set_size(textarea, 240, 40);

    lv_obj_set_x(textarea, 40);

    lv_obj_set_y(textarea, 60);

    // 密码输入框

    lv_obj_t *textarea1 = lv_textarea_create(lv_scr_act());

    lv_textarea_set_placeholder_text(textarea1, "Please enter your password.");

    lv_textarea_set_one_line(textarea1, true);  // 单行模式

    lv_obj_set_size(textarea1, 240, 40);

    lv_obj_set_x(textarea1, 40);

    lv_obj_set_y(textarea1, 100);

    // lv_obj_set_flex_flow(lv_screen_active(), LV_FLEX_FLOW_COLUMN);

    // lv_obj_set_flex_align(lv_screen_active(), LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER);

    lv_obj_t * cb_container = lv_obj_create(lv_screen_active());

lv_obj_set_style_bg_opa(cb_container, LV_OPA_TRANSP, LV_PART_MAIN);  // 透明背景

lv_obj_set_style_border_opa(cb_container, LV_OPA_TRANSP, LV_PART_MAIN); // 无边框

lv_obj_set_flex_flow(cb_container, LV_FLEX_FLOW_ROW);                // 横向布局

lv_obj_set_flex_align(cb_container, LV_FLEX_ALIGN_SPACE_EVENLY,     // 水平均匀分布

                                      LV_FLEX_ALIGN_CENTER,         // 垂直居中

                                      LV_FLEX_ALIGN_CENTER);

lv_obj_set_size(cb_container, lv_obj_get_width(lv_screen_active()) – 40, 30); // 适配屏幕宽度

// 第一个复选框(放入容器中)

lv_obj_t * cb;

cb = lv_checkbox_create(cb_container);  // 父对象改为容器,不再是lv_screen_active()

lv_checkbox_set_text(cb, "Save");

lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);

// 第二个复选框(放入容器中)

cb = lv_checkbox_create(cb_container);  // 父对象改为容器,不再是lv_screen_active()

lv_checkbox_set_text(cb, "Auto");

lv_obj_add_state(cb, LV_STATE_CHECKED);

lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);

    lv_obj_update_layout(cb);  

    lv_obj_t * btn1 = lv_button_create(lv_screen_active());

    lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_ALL, NULL);

    // lv_obj_align(btn1, LV_ALIGN_CENTER, 0, -40);

    lv_obj_remove_flag(btn1, LV_OBJ_FLAG_PRESS_LOCK);

    lv_obj_set_width(btn1, 240);

    lv_obj_set_height(btn1, 24);

    lv_obj_set_x(btn1, 40);

    lv_obj_set_y(btn1, 180);

    label = lv_label_create(btn1);

    lv_label_set_text(label, "login");

    lv_obj_center(label);

    lv_obj_t * btn2 = lv_button_create(lv_screen_active());

    lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_ALL, NULL);

    // lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 40);

    lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE);

    lv_obj_set_width(btn2, 240);

    lv_obj_set_height(btn2, 24);

    lv_obj_set_x(btn2, 40);

    lv_obj_set_y(btn2, 210);

    label = lv_label_create(btn2);

    lv_label_set_text(label, "Toggle");

    lv_obj_center(label);

}

void app_main(void)

{

    bsp_i2c_init();

    pca9557_init();

    // bsp_lcd_init();

    // ESP_Timer_Init();

    bsp_lvgl_start();

    lv_example_demo();

     while(1){    

        vTaskDelay(10);

    }

}

赞(0)
未经允许不得转载:171主机测评 » ESP32芯片基础应用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址