ESP32-S3-Touch-LCD-4.3C

来自Waveshare Wiki
跳转至: 导航搜索
{{{name2}}}
{{{name3}}}
功能简介
特性 无特性,不解释
主控 ESP32-S3-N16R8
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 Type C USB

产品介绍

产品简介

ESP32-S3-Touch-LCD-4.3C 是一款微雪 (Waveshare) 设计的低成本、高性能微控制器开发板。其支持 2.4GHz WiFi 和 BLE 5,集成大容量 Flash 和 PSRAM,板载 4.3 英寸宽电容触摸 LCD 屏,可流畅运行 LVGL 等 GUI 界面程序;搭载 ES8311 音频功放编解码器 与 ES7210 四通道高性能音频 ADC,支持高保真音频输入与输出,可实现语音采集、播放及语音交互等功能;结合多种外设接口(如 I2C 、宽电压IO 等),可快速开发基于 ESP32-S3 的 HMI 与多媒体应用。多种功能与接口满足在物联网 (IoT)、移动设备、智能家居等应用场景中的性能与功耗需求。

产品特性

  • 搭载高性能 Xtensa 32 位 LX7 双核处理器,主频高达 240MHz
  • 支持 2.4 GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth 5 (LE),板载天线
  • 内置 512KB SRAM 和 384KB ROM,叠封 16MB Flash 和 8MB PSRAM
  • 板载 4.3 英寸宽电容触摸屏,800 × 480 分辨率,65K 彩色
  • 支持 I2C 接口控制电容触摸,5 点触控,支持中断
  • 板载 I2C 接口和 Micro SD 卡座等,集成全速 USB
  • 支持灵活时钟,模块电源单独设置等精准控制,实现多场景低功耗模式
  • 集成 ES8311 音频 DAC 与 ES7210 多通道 ADC,支持麦克风输入与扬声器输出
  • 支持 I2S 音频数据传输与 I2C 控制,支持 16/24-bit 位深与最高 100kHz 采样率
  • 支持自动增益控制(ALC)、风噪抑制等音频处理功能,适用于语音交互与音频采集场景

资源简介

ESP32-S3-Touch-LCD-4.3B-details-intro.jpg

1、 ESP32-S3-WROOM-1-N16R8
   WiFi 蓝牙 SoC 模块,240MHz 运行频率
   封装 8MB PSRAM 和 16MB Flash

2、Micro SD 卡座
   用于连接TF卡

3、USB Type-C 接口
   用于给设备进行供电和程序烧录

4、BOOT 按键
   按住上电进行程序烧录

5、RESET 按键
   按下复位重启ESP32S3

6、光耦隔离
   隔离保护板子上的I/O引脚

7、屏幕触摸接线端子
    连接触摸屏排线

8、4.3 英寸屏幕接线端子
   连接液晶显示排线

10、电池连接开关
   ON:连接电池    OFF:断开电池

11、3.7V 单节锂电池 1.25 接口
   MX1.25接口,适用所有3.7V 锂电池

12、指示灯
   DONE:锂电池充电完成指示灯
   CHG:锂电池充电指示灯
   PWR:电源指示灯
   (有连接电源,没有连接电池或者开关关闭,则 CHG 闪烁 DONE 常亮)

13、7-36V DC 供电
   宽电压输入接口,支持7-36V的直流电源

14、I2C 接口
   VOUT 输出 5V/3.3V (由板载电阻切换,二选一)

15、数字输出
   5~36V,开漏输出,输出负载 450mA/通道 (MAX)

16、输入信号公共端
   不接悬空:干接点无源输入
   接电源正极:低电平触发,NPN 型湿接有源输入,电压 5V-36V DC
   接电源负极:高电平触发,PNP 型湿接有源输入,电压 5V-36V DC

17、数字输入
   5~36V,无源输入/有源输入 (NPN 型或 PNP 型)

接口说明

  • LCD 接口:连接液晶排线的接口
ESP32-S3 LCD 简介
GPIO0 G3 绿色数据第三位
GPIO1 R3 红色数据第三位
GPIO2 R4 红色数据第四位
GPIO3 VSYNC 竖向同步信号
GPIO5 DE 数据使能信号
GPIO7 PCLK 时钟信号
GPIO10 B7 蓝色第七位
GPIO14 B3 蓝色第三位
GPIO17 B6 蓝色第六位
GPIO18 B5 蓝色第五位
GPIO21 G7 绿色第七位
GPIO38 B4 蓝色第四位
GPIO39 G2 绿色第二位
GPIO40 R7 红色第七位
GPIO41 R6 红色第六位
GPIO42 R5 红色第五位
GPIO45 G4 绿色第四位
GPIO46 HSYNC 横向同步信号
GPIO47 G6 绿色第六位
GPIO48 G5 绿色第五位
IO EXTENSION LCD -
EXIO2 DISP 背光使能引脚
EXIO_PWM BL_PWM 背光调节引脚


  • 触摸屏接口:用于连接触摸排线的接口
ESP32-S3 Touch 简介
GPIO4 TP_IRQ 触摸中断引脚
GPIO8 TP_SDA 触摸数据引脚
GPIO9 TP_SCL 触摸时钟引脚
IO EXTENSION Touch -
EXIO1 TP_RST 触摸复位引脚


  • USB 接口:用于供电跟烧录使用
ESP32-S3 USB 简介
GPIO19 USB_DN 数据线D-
GPIO20 USB_DP 数据线D+


  • TF卡接口:用于连接TF卡的接口,引脚连接见下表。
ESP32-S3 TF 简介
GPIO11 MOSI TF卡输入引脚
GPIO12 SCK TF卡时钟引脚
GPIO13 MISO TF卡输出引脚
IO EXTENSION TF -
EXIO4 SD_CS TF卡使能引脚,低电平有效


  • RTC 接口:板载PCF85063芯片,可以提供时钟跟日历信息
ESP32-S3 RTC 简介
GPIO8 RTC_SDA RTC数据引脚
GPIO9 RTC_SCL RTC时钟引脚
IO EXTENSION RTC -
INT RTC_INT RTC中断引脚


  • I2C 接口:ESP32-S3 提供多路硬件 I2C,目前使用 GPIO8(SDA),GPIO9(SCL) 引脚做 I2C 总线
                     挂载 IO 扩展芯片、触摸接口,I2C外部接口
ESP32-S3 I2C 简介
GPIO8 SDA I2C数据引脚
GPIO9 SCL I2C时钟引脚


  • 音频编解码接口
ESP32-S3 SPEAKER/MIC 简介
GPIO6 I2S_MCLK I2S 主时钟
GPIO8 Audio_SDA I2C 数据线
GPIO9 Audio_SCL I2C 时钟线
GPIO15 I2S_DSDIN I2S 数据输入
GPIO16 I2S_LRCK I2S 帧同步/左右声道选择
GPIO43 I2S_ASDOUT I2S 数据输出
GPIO44 I2S_SCLK I2S 串行时钟
IO EXTENSION SPEAKER/MIC -
EXIO4 PA_CTRL 功放控制引脚


  • 隔离IO 接口:隔离IO是由数字输出、数字输入跟输入信号公共端组成,IO电平可达5~36V
IO EXTENSION DI/DO 简介
EXIO0 DI0 数字输入0
EXIO5 DI1 数字输入1
OD0 DO0 数字输出0
OD1 DO1 数字输出1


  • MX1.25 电池接口:开发板使用高效充放电管理芯片 CS8501 ,可将单节锂电池升压到 5V ,
    目前充电电流为 580mA,用户可更换 R45 电阻更改充电电流,详情请查阅ESP32-S3-Touch-LCD-4.3 原理图

产品尺寸

ESP32-S3-Touch-LCD-4.3B-details-size.jpg

产品参数

基础参数
处理器 高性能 Xtensa 32 位 LX7 双核处理器,主频高达 240MHz
Wifi/蓝牙 支持 2.4 GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth 5 (LE),板载天线
Flash 16MB Flash
PSRAM 8MB PSRAM
供电范围 TypeC 5V / DC 7-36V
屏幕参数
分辨率 800 x 480
显示接口 RGB
显示面板 IPS
可视角度 160°
屏幕亮度 550 Cd/m²
触摸类型 电容
触摸面板 钢化玻璃
外设接口
通信接口 I2C、USB、I2S
数字输入 5~36V,双向光耦隔离,支持无源和有源开关量输入
数字输出 5~36V,光耦隔离,输出采用大电流三极管,灌电流可达 450mA
音频解码器参数
编解码器 ES8311(低功耗 DAC)/ ES7210(高性能 4 通道 ADC,支持麦克风输入)
支持采样率 ES8311:8kHz ~ 96kHz / ES7210:8kHz ~ 192kHz
位深支持 16-bit / 24-bit
信噪比(SNR) ES8311:100dB / ES7210:102dB
总谐波失真 + 噪声(THD+N) ES8311:约 –85 dB / ES7210:约 –90 dB(不同模式略有变化)
动态范围(Dynamic Range) ES8311:约 100 dB / ES7210:约 102 dB
麦克风支持 支持模拟与数字麦克风,具降噪滤波功能
其它
功耗 5V 350mA
操作温度 0℃ ~ 65℃
产品尺寸 (L×W) 常规版:112.4×75.1mm
带外壳版:116.3×79mm

使用说明

ESP32-S3-Touch-LCD-4.3C 目前提供 Arduino IDEESP-IDFPlatformIO 三种开发工具和框架,提供了灵活的开发选择,你可以根据项目需求和个人习惯选择适合的开发工具。

开发工具介绍

Arduino-IDE-logo.jpg

Arduino IDE

Arduino IDE是一款便捷灵活、方便上手的开源电子原型平台。不需要太多基础,简单学习后,你也可以快速地进行开发。同时,Arduino 拥有庞大的全球用户社区,提供了海量的开源代码、项目示例和教程,还有丰富的库资源,封装了复杂功能,让开发者能快速实现各种功能。

ESP-IDF-logo.jpg

ESP-IDF

ESP-IDF,全称Espressif IDE,是乐鑫科技为 ESP系列芯片推出的专业开发框架。它使用C语言开发,包括编译器、调试器、烧录工具等,可在命令行下或使用集成开发环境(如 Visual Studio Code 配合 Espressif IDF 插件)进行开发,插件提供代码导航、项目管理、调试等功能。

ESP32-S3-Touch-LCD-4.3C-PlatformIO-log.png

PlatformIO

PlatformIO 是一款跨平台、跨架构、多框架的专业工具,适用于嵌入式系统工程师和为嵌入式产品编写应用程序的软件开发人员。


这三种开发方式各有其优势,开发者可以根据自身需求和技能水平进行选择。Arduino 跟 PlatformIO(编译速度更快) 适合初学者和非专业人士,因其简单易学、上手快。而对于有专业背景或对性能要求较高的开发者,ESP-IDF 是更好的选择,它提供了更高级的开发工具和更强的控制能力,适用于复杂项目的开发

器件准备

  • ESP32-S3-Touch-LCD-4.3C x1
  • SD卡 x1
  • USB线 type A公口 转 Type C公口 x1

ESP32-S3-Touch-LCD-4.3C-PlatformIO-device.png

注意事项

  • 使用时注意 PCB 天线区域,避免其它金属,塑料件贴合 PCB 天线
  • TF 卡使用 SD_MMC 通信,注意 SD_CS 引脚需要由 IO_EXTENSION 的 EXIO4 驱动
  • 开发板使用 3.5mm的接线端子引出I2C和隔离IO等外设引脚
  • 4.3inch 屏幕占用绝大多数 GPIO,开发板使用 IO_EXTENSION 的 EXIO_PWM,用于关闭打开和调节背光等
  • 隔离io是通过 IO_EXTENSION 去控制的,具体使用可以参考04_ISOLATION_IO示例,了解驱动原理,可以参考ESP32-S3-Touch-LCD-4.3C示例程序
  • 开发板使用USB下载程序,如果出现无法识别到端口,请进入boot模式(摁住boot按键后,再连接电脑,然后松开boot按键),下载程序后,按 RESET 按键运行程序
  • 目前在 ESP-IDF v5.3 下使用单核跑 LVGL benchamark 示例的平均帧率上限为 26, 对应接口帧率为 41 (PCLK 21 MHz),编译前需要通过menuconfig 对ESP32 和 LVGL进行配置:
CONFIG_FREERTOS_HZ=1000
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_120M=y [需要与 PSRAM 保持一致]
CONFIG_SPIRAM_MODE_OCT=y
CONFIG_IDF_EXPERIMENTAL_FEATURES=y and CONFIG_SPIRAM_SPEED_120M=y [需要与 FLASH 保持一致]
CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y
CONFIG_SPIRAM_RODATA=y
CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
CONFIG_COMPILER_OPTIMIZATION_PERF=y
#以下 LVGL 配置项对帧率提升有帮助 (LVGL v8.3):
#define LV_MEM_CUSTOM 1 or CONFIG_LV_MEM_CUSTOM=y
#define LV_MEMCPY_MEMSET_STD 1 or CONFIG_LV_MEMCPY_MEMSET_STD=y
#define LV_ATTRIBUTE_FAST_MEM IRAM_ATTR or CONFIG_LV_ATTRIBUTE_FAST_MEM=y
  • 详细 LCD 及 LVGL 性能说明,请参考文档
  • MX1.25 锂电池座子只支持单节 3.7V 锂电池,勿使用多组电池包同时接入充放电,建议单节容量在 2000mAH 以下
  • 板子的 IO_EXTENSION \ 触摸 \ 音频解码\ RTC \ 占用了如下的从机地址,请勿使用相同地址的I2C设备:
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
10: -  -  -  -  -  -  -  - 18  -  -  -  -  -  -  -
20: -  -  -  - 24  -  -  -  -  -  -  -  -  -  -  -
30: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
40: 40 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
50: -  51 -  -  -  -  -  -  -  -  -  -  -  -  5d -
60: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
70: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
在操作前,建议先浏览目录,快速了解文档结构。为顺利操作,请仔细阅读FAQ,提前了解可能的问题。文档中所有资料均提供超链接,方便下载。

出厂固件

本固件不间断更新,部分应用程序所需ESP-IDF版本依赖,需要一定时间测试更新,请耐心等待。

【程序说明】


  • 本示例演示了使用esp-brookesia master版本创建的应用示例,实现包含但不局限于触摸、显示、音频拾取、读取SD卡音频播放、时钟、电池电压、小智AI等

【开机准备】


  • 如果需要测试图片显示跟音乐播放,请提前将.\demo\Factory_Firmware的图片跟音乐文件夹复制到SD卡中,如果没有接入SD卡,或者卡里没有文件,点击图片时系统会重启。

【硬件连接】


  • 将SD卡插入开发板,再接入电脑
  • 通过固件烧录工具烧录固件(在线、本地等等)

【运行效果】


ESP32-S3-Touch-LCD-4B-250807-10.png ESP32-S3-Touch-LCD-4B-250807-11.png ESP32-S3-Touch-LCD-4B-250807-12.png ESP32-S3-Touch-LCD-4B-250807-13.png ESP32-S3-Touch-LCD-4B-250807-14.png ESP32-S3-Touch-LCD-4B-250807-15.png ESP32-S3-Touch-LCD-4B-250807-16.png

【AIChats】


AIChats默认使用小智AI,当用户点击进入之后,自动切换小智AI运行。返回esp-brookesia UI时,对小智说“返回应用界面”即可

Arduino开发

本章介绍 Arduino 环境搭建,包括 Arduino IDE、ESP32板管理、相关库的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。

环境搭建

下载和安装 Arduino IDE

  • 点击访问Arduino官网,选择对应的系统和系统位数下载。Arduino IDE的版本需要≥1.8,安装的路径不能出现中文,否则编译时会出现错误。
    ESP32-S3-AMOLED-1.91-Ar-software-01.png
  • 运行安装程序,全部默认安装即可。
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问Arduino-esp32环境搭建参考

安装 Arduino-ESP32

  • ESP32相关主板在Arduino IDE使用,须先安装“esp32 by Espressif Systems”库。
  • 国内部分区域安装,一般推荐“在线安装”, 若在线安装失败,则使用“离线安装”。
  • 安装 Arduino-ESP32教程,详见:Arduino 板管理教程
  • ESP32-S3-Touch-LCD-4.3C 开发板离线包,点击此处下载:esp32_package_3.0.7_arduino离线包
  • ESP32-S3-Touch-LCD-4.3C 开发板安装说明
板名称 板安装要求 版本号要求
ESP32-S3-Touch-LCD-4.3C “离线”安装/“在线”安装 3.0.0 以上

安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装离线安装若库安装要求离线安装,则必须使用提供的库文件
    对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 库安装教程,详见:Arduino 库管理教程
  • ESP32-S3-Touch-LCD-4.3C 库文件存放于示例程序中,点击此处跳转:ESP32-S3-Touch-LCD-4.3C示例程序
  • ESP32-S3-Touch-LCD-4.3C 库文件安装说明
库名称 说明 版本 库安装要求
lvgl LVGL图形化库 v8.4.0 “离线”安装
lv_conf.h LVGL配置文件 —— “离线”安装

运行第一个 Arduino 程序

如果你刚入门学习ESP32和Arduino,还不知道如何创建、编译、烧录和运行Arduino ESP32程序,那么请展开看看,希望可以帮助到你!

新建工程

  • 运行Arduino IDE,选择 File -> New Sketch
    ESP32-S3-AMOLED-1.91-Ar-study-01.png
  • 输入代码:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello, World!");
  delay(2000);
}
  • 保存代码工程,选择 File -> Save As...;在弹出的菜单选择保存工程路径,并输入工程名,如 Hello_World,点击保存

ESP32-S3-AMOLED-1.91-Ar-study-02.png

编译和烧录程序

  • 选择对应的开发板,以ESP32S3主板为例:

①. 点击选择下拉框选项“Select Other Board and Port”;
②. 搜索需要的开发板型号“esp32s3 dev module”并选择;
③. 选择COM口
④. 保存选择。
ESP32-S3-AMOLED-1.91-Ar-study-03.png

  • 若ESP32S3主板只有USB口,须打开(Enable)USB CDC,如下图所示:

ESP32-S3-AMOLED-1.91-Ar-study-04.png

  • 编译并上传程序:

①. 编译程序;②. 编译并下载程序;③. 下载成功。
ESP32-S3-AMOLED-1.91-Ar-study-05.png

  • 打开串口监视窗口,程序每隔2秒会打印“Hello World!”,运行情况如下所示:

ESP32-S3-AMOLED-1.91-Ar-study-06.png

示例程序

  • ESP32-S3-Touch-LCD-4.3C 示例程序
示例程序 基础例程说明 依赖库
01_I2C 测试I2C功能 -
02_RTC 测试RTC功能 -
03_LCD 测试LCD功能 -
04_ISOLATION_IO 测试ISOLATION_IO功能 -
05_SD 测试SD卡 -
06_TOUCH 测试显示屏触控功能 -
07_DISPLAY_BMP 测试SD卡图片显示 -
08_WIFI_SCAN 扫描附近WIFI,并显示WIFI名 -
09_WIFI_STA 测试STA功能 -
10_WIFI_AP 测试AP功能 -
11_SPEAKER_MICROPHONE 测试麦克风拾音功能和喇叭播放功能 -
12_LVGL_TRANSPLANT LVGL demo测试 LVGL
13_LVGL_BTN 画一个按钮,控制GPIO工作 LVGL
14_LVGL_SLIDER 画一个滑动条,控制背光跟GPIO输出,并同时显示电池电压 LVGL
15_UDP_TCP_NTP 实现UDP/TCP通信,实现NTP时间同步 LVGL


01_I2C

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

该函数是初始化I2C通信和IO扩展芯片,设置IO_EXTENSION_IO_2引脚为输出模式。

  • loop()

通过IO_EXTENSION_Output函数控制IO_EXTENSION_IO_2引脚的电平状态,在高电平(1)和低电平(0)之间切换,实现LCD背光的开启与关闭,形成每秒一次的周期性闪烁效果。

【代码烧录】


  • 选择型号 ESP32S3 Dev Module 与端口
  • 设置开发板参数

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-2.png.png

  • 烧录代码

【运行效果】


  • 屏幕无显示,连接的LED灯会以1Hz的频率亮灭

02_RTC

【硬件连接】


  • 使用USB线连接板子的UART口,接入电脑

【代码分析】


  • setup()

初始化串口、I2C、RTC芯片并设置初始时间和闹钟,为程序运行做准备。

  • loop()

不断读取当前时间并打印,同时检测闹钟是否触发,实现实时时钟与闹钟提醒功能。

【运行效果】


  • 打开串口调试助手向 ESP32-S3-Touch-LCD-4.3C 发送消息,该设备会将收到的消息返回给串口调试助手

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-13.png
1.选择对应串口 2.添加回车换行 3.选择对应的波特率 4.勾选DTR 5.开启串口 6.消息日志打印(正常触发闹钟功能)

03_LCD

【硬件连接】


  • 使用USB线连接板子的UART口,接入电脑

【代码分析】


  • setup():

完成LCD初始化、显存分配,并依次演示颜色渐变、点线图形、矩形圆形、文字数字及图片的显示效果。

  • Paint_NewImage()

画布创建:设置内存作为绘图帧缓冲区。

  • Paint_DrawRectangle()

矩形绘制:用于绘制颜色条纹等。

  • Paint_DrawString_EN()

文本渲染:用于绘制英文字符串。都绘制不同的元素,然后调用 wavesahre_rgb_lcd_display() 刷新屏幕。

【运行效果】


屏幕先显示彩色渐变条,然后依次展示点、线、矩形、圆、文字、数字,最后全屏显示两张图片。

04_ISOLATION_IO

【硬件连接】


  • 使用USB线把板子接入电脑
  • 在开发板背部将DO0->DI0 DO1->DI1连接,如图

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-4.png

【代码分析】


  • setup()

函数初始化串口、I2C、IO扩展、LCD屏幕,然后通过控制DO引脚并检测DI引脚的状态,测试DI/DO功能是否正常,并根据测试结果在RGB LCD屏幕上显示绿色(测试通过)或红色(测试失败)。

  • Serial.begin(115200)

初始化串口通信(用于打印调试信息,波特率115200)。

  • DEV_I2C_Init()

初始化I2C总线(通常用于连接传感器、显示屏等)。

  • O_EXTENSION_Init()

初始化IO扩展芯片(扩展更多的GPIO,比如DI/DO)。

【运行效果】


  • 烧录成功后,屏幕会根据背部接线情况显示红色还是绿色
  • 当正确接线,屏幕显示绿色
  • 当错误接线,屏幕显示红色

05_SD

【硬件连接】


  • 使用USB线把板子接入电脑
  • 将Micro SD卡接入ESP32-S3-Touch-LCD-4.3C中,如图

ESP32-S3-Touch-LCD-4.3C-PlatformIO-ex-05-1.png

【代码分析】


  • setup()

负责初始化所有必要的硬件和通信接口,包括串口、I2C、IO 扩展芯片和 LCD 屏幕。执行 SD 卡测试:尝试挂载 SD 卡,如果成功,则读取、计算并显示其总容量可用容量信息到 LCD 屏幕和串口,随后立即卸载 SD 卡。

  • sd_mmc_init():

尝试挂载 SD 卡文件系统。

  • read_sd_capacity():

从已挂载的 SD 卡读取总存储空间和可用存储空间。

  • sd_mmc_unmount():

卸载 SD 卡文件系统,释放相关资源。


【运行效果】


  • 烧录成功后,屏幕显示SD卡容量 ,若没插上SD卡则显示* SD Card Fail!

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-8.png

06_TOUCH

【硬件连接】


使用USB线把板子接入电脑

【代码分析】


  • setup()

初始化串口、I2C、IO扩展,设置触摸屏和LCD屏幕,配置双缓冲区。

  • touch_gt911_read_point()

触摸读取:获取当前屏幕上所有有效的触摸点坐标和数量。

  • DEV_I2C_Init()

初始化I2C接口。

  • waveshare_rgb_lcd_display()

显示屏幕内容。

【运行效果】


  • 烧录成功后,可以实现五点触摸功能。

07_DISPLAY_BMP

【硬件连接】


  • 使用USB线把板子接入电脑
  • 将Micro SD卡接入ESP32-S3-Touch-LCD-4.3C中

ESP32-S3-Touch-LCD-4.3C-PlatformIO-ex-05-1.png

【代码分析】


  • setup()

初始化所有硬件和通信接口,挂载 SD 卡,扫描 BMP 文件路径,并包含一个无限循环用于持续读取触摸操作和切换显示 SD 卡中的图像文件。

  • list_files(const char *base_path)

遍历SD卡根目录,查找所有 .bmp 文件,并将它们的完整路径存储起来。

  • sd_mmc_init()

尝试初始化 SD 卡文件系统。

  • touch_gt911_init()

初始化 GT911 触摸屏控制器。

  • GUI_ReadBmp()

从 SD 卡读取指定的 BMP 文件并将其绘制到 LCD 屏幕上。

【运行效果】


  • 烧录成功后,左/右导航箭头区域可以切换显示上一张或下一张BMP图片并更新导航箭头绘制。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-9.png

08_WIFI_SCAN

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

负责初始化所有通信接口和 LCD/Wi-Fi 硬件。准备图形环境,分配内存作为帧缓冲区。
绘制静态 UI 并执行一次 Wi-Fi 扫描 (wifi_scan),将所有找到的网络 SSID 列表直接显示在 LCD 屏幕的右侧区域。

  • wifi_scan_init()

初始化 Wi-Fi 硬件和配置。

  • wifi_scan()

执行实际的 Wi-Fi 扫描,并将结果直接绘制到 LCD 屏幕上。

【运行效果】


  • 烧录成功后,触屏屏幕时会在屏幕上显示扫描到的wifi名称。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-1.png

09_WIFI_STA

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

初始化所有通信接口和 LCD 硬件,并检查 PSRAM 状态。
分配帧缓冲区,初始化绘图画布,并绘制静态 UI(标题、分隔线和连接中提示)。
调用 wifi_sta_init(USER_SSID, USER_PASS) 尝试连接到预定义的无线接入点。

  • wifi_sta_init(USER_SSID, USER_PASS):

初始化 Wi-Fi 模块并尝试以 Station 模式连接到指定的 SSID 和密码。其副作用是更新 LCD 上的连接状态。

【运行效果】


  • 烧录成功后,连接成功或失败后更新屏幕右侧显示IP地址、Wi-Fi名称等信息或连接失败消息。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-2.png

10_WIFI_AP

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

初始化所有硬件和图形环境,并将设备配置为无线接入点 (AP),使用预设的 SSID 和密码对外广播网络。
该函数包含一个无限循环:它持续检查连接到 AP 的设备数量。一旦检测到设备连接或断开,它会清空 屏幕区域,并更新显示当前连接数以及每个已连接设备的 MAC 地址列表。

  • play_or_pause(bool play)

根据布尔参数切换程序状态:若为 true 则从麦克风读取 5 秒音频数据并存储到缓冲区(录音) 若为 false 则从缓冲区读取数据并输出到扬声器(播放),并更新屏幕上的状态和图标。

  • wifi_ap_init(USER_SSID, USER_PASS)

初始化Wi-Fi模块并将其配置为接入点AP模式,使用指定的网络名称和密码。

  • wifi_ap_StationNum()

动态更新LCD屏幕右侧显示已连接设备数量

  • wifi_ap_StationMac(station_mac, i)

显示每个连接设备的MAC地址

【运行效果】


  • 烧录成功后,会显示wifi设备的连接数量和MAC地址。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-3.png

11_SPEAKER_MICROPHONE

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

该函数初始化所有硬件、触摸屏、LCD 和音频编解码器,分配音频缓冲区,然后进入一个无限循环,持续监测触摸操作,以在录音和播放录制的 5 秒音频之间切换。

  • play_or_pause(bool play)

根据布尔参数切换程序状态:若为 true 则从麦克风读取 5 秒音频数据并存储到缓冲区(录音),若为 false 则从缓冲区读取数据并输出到扬声器(播放),并更新屏幕上的状态和图标。

  • codec_init()

初始化音频编解码器 (codec_init) 并设置扬声器音量和麦克风增益,配置音频路径。

  • mic_i2s_read() / speaker_i2s_write()

在 play_or_pause 函数内部调用,分别用于从麦克风读取音频数据和向扬声器写入音频数据。

【运行效果】


  • 烧录成功后,当点击指定区域时切换录音/播放相应操作,实现录音和播放功能。

12_LVGL_TRANSPLANT

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup():

它初始化所有硬件(I2C 总线、IO 扩展芯片)和 GT911 触摸屏,然后初始化 Waveshare RGB LCD 屏幕并开启背光。 核心功能:它将 LCD 和触摸屏句柄集成到 LVGL 图形库中 (lvgl_port_init),锁定 LVGL 互斥锁,然后启动 LVGL 官方的 Widgets 演示界面 (lv_demo_widgets)。

  • lv_demo_widgets():

启动 LVGL 演示:加载并运行 LVGL 官方提供的 Widgets 示例界面。

【运行效果】


  • 烧录成功后,显示lvgl的示例程序

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-4.png

【其他说明】

13_LVGL_BTN

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup():

初始化所有硬件(串口、I2C、IO 扩展、GT911 触摸屏)和 Waveshare RGB LCD 屏幕。 核心功能:它将 LCD 和触摸屏驱动集成到 LVGL 图形库中 (lvgl_port_init),然后锁定 LVGL 互斥锁,并调用 lvgl_btn() 在屏幕上创建并显示一个交互式按钮。

  • lvgl_btn():

在 LVGL 当前活动屏幕的中心位置创建一个按钮对象。 设置按钮的大小、位置和标签文本 ("Button")。 将 btn_event_cb 回调函数绑定到按钮上,以响应用户的交互。

  • btn_event_cb(lv_event_t * e):

当按钮被点击 (LV_EVENT_CLICKED) 时触发。 通过串口打印 "Button Pressed." 消息。

【运行效果】


  • 烧录成功后,会运行lv_demo_widgets,可以进行交互操作。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-5.png


14_LVGL_SLIDER

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

它初始化所有硬件和 Waveshare RGB LCD 屏幕。 将 LCD 和触摸屏驱动集成到 LVGL 图形库中 (lvgl_port_init),然后锁定 LVGL 互斥锁,并调用 lvgl_slider() 创建并显示包含滑块和电压标签的用户界面。

  • loop()

循环读取10次获得的ADC值,并计算平均值以降低噪声。电压转换:将平均 ADC 值转换为实际电压。

  • lvgl_slider()

在 LVGL 屏幕上创建主要的 滑块、显示滑块值的 数值标签,以及显示电池电压的 BAT 标签。同时,它将 IO 扩展的 PWM 输出初始化为 0 亮度,并将 slider_event_cb 绑定到滑块事件。

  • slider_event_cb(lv_event_t * e)

当用户拖动滑块时触发。它更新滑块上方的数值标签,并根据滑块的当前值设置 IO 扩展芯片的 PWM 占空比 (IO_EXTENSION_Pwm_Output),从而控制 LED 亮度。

  • bat_cb(lv_timer_t * timer)

由 loop() 函数创建的定时器触发。使用 lv_label_set_text 更新屏幕上的电池电压标签 (BAT_Label)。

【运行效果】


  • 烧录成功后,显示滑动空间和电量显示,可以通过滑动组件控制图片亮度

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-6.png

15_UDP_TCP_NTP

【硬件连接】

  • 使用USB线把板子接入电脑

【代码分析】

  • setup()

锁定LVGL访问权限,调用ui_init()创建完整的用户界面。
尝试连接到预设的 Wi-Fi 网络,并在连接成功后,在 UI 上更新 ESP32 的本地 IP 地址。
创建一个 FreeRTOS 任务(ntpSyncTask)在后台与 NTP 服务器同步时间,并初始化 UDP 端口监听。

  • loop()

持续检查是否有新的传入数据,处理来自 TCP 客户端和 UDP 端口的接收消息,并将所有接收到的消息通过 ui_log() 实时显示到屏幕的日志框中。 周期性地获取本地同步时间 (getLocalTime),并锁定 LVGL 访问权限,实时更新屏幕顶部的时间标签。

  • ntpSyncTask(void pvParameters)

后台任务:这是一个在独立 FreeRTOS 任务中运行的函数,它等待 Wi-Fi 连接成功后,配置 NTP 服务并同步网络时间,然后将同步结果打印到日志框中。

  • event_tcp_send(lv_event_t * e)

获取输入框文本,检查 TCP 连接状态。如果未连接,则尝试连接到目标 Host IP;如果已连接或连接成功,则通过 TCP 发送消息并记录日志。

  • event_udp_send(lv_event_t * e)

获取输入框文本,将消息封装成 UDP 数据包,发送给目标 Host IP 和 UDP 端口,并记录发送日志。


【操作流程】

  • 打开SSCOM并且切换至udp通信

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-12.png
1.选择UDP协议
2.选择esp32的ip地址(可以通过上位机显示,或者在设备热点设置中查看)
3.选择主机地址(可以通过CMD命令行输入ipconfig查找)
4.设置主机和ESP32的端口(和代码中的一致)
5.开启通讯协议
6.打开时间戳和分包显示
7.输入信息栏
8.信息发送

  • 打开SSCOM并且切换至tcp通信

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-11.png
1.选择TCP协议
2.选择主机地址(可以通过CMD命令行输入ipconfig查找)
3.设置主机的端口(和代码中的一致),并建立TCP连接
4.打开时间戳和分包显示
5.输入信息栏
6.信息发送
7.消息传输日志

【运行效果】


  • 烧录成功后,显示主界面,可通过串口助手利用TCP/UDP与ESP32进行通信

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-10.png

ESP-IDF开发

本章介绍 ESP-IDF 环境搭建,包括 Visual Studio、Espressif IDF插件的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。

环境搭建

下载和安装 Visual Studio

  • 打开VScode官网的下载页面,选择对应系统和系统位数进行下载
    ESP32-S3-AMOLED-1.91-VScode-01.png
  • 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项
    ESP32-S3-AMOLED-1.91-VScode-02.png
    • 第一二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
    • 第三项开启后,选择打开方式时,可以直接选择VSCode
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问ESP-IDF环境搭建参考

安装Espressif IDF插件

  • 国内部分区域安装,一般推荐“在线安装”, 若因网络因素无法在线安装,则使用“离线安装”。
  • 安装Espressif IDF插件教程,详见:安装Espressif IDF插件教程

运行第一个 ESP-IDF 程序

如果你刚入门学习ESP32和ESP-IDF,还不知道如何创建、编译、烧录和运行ESP-IDF程序,那么请展开看看,希望可以帮助到你!

新建项目

ESP32-S3-AMOLED-1.91-study-01.png

ESP32-S3-AMOLED-1.91-study-02.png

创建例程

  • 使用快捷键 F1 ,输入esp-idf:show examples projects

ESP32-S3-AMOLED-1.91-study-03.png

  • 选择你当前的IDF版本

ESP32-S3-AMOLED-1.91-study-04.png

  • 以Hello world例程为例

①选择对应例程
②其readme会说明该例程适用于什么芯片(下文有介绍例程怎么使用与文件结构,这里略)
③点击创建例程
ESP32-S3-AMOLED-1.91-study-05.png

  • 选择放置例程的路径,要求无例程同名文件夹

ESP32-S3-AMOLED-1.91-study-06.png

修改COM口

  • 此处显示使用对应的COM口,点击可以修改对应COM口
  • 请根据设备对应COM口进行选择(可通过设备管理器查看)
  • 若出现下载失败的情况请点击复位按键1秒以上或进入下载模式,等待 PC 端重新识别到设备后再次下载

ESP32-S3-AMOLED-1.91-study-07.png

修改驱动对象

  • 选择我们需要驱动的对象,也就是我们的主芯片为ESP32S3

ESP32-S3-AMOLED-1.91-study-08.png

  • 选择openocd的路径,这里对我们没有影响,所以我们随便选择一个即可

ESP32-S3-AMOLED-1.91-study-09.png


其余状态栏简介

①.ESP-IDF开发环境版本管理器,当我们的工程需要区分开发环境版本时,可以通过安装不同版本的ESP-IDF来分别管理,当工程使用特定版本时,可以通过使用它来切换
②.设备烧录COM口,选择以将编译好的程序烧录进芯片上
③.set-target 芯片型号选择,选择对应的芯片型号,如:ESP32-P4-Nano需要选择 esp32p4 为目标芯片
④.menuconfig,点击修改sdkconfig配置文件内容,项目配置详细资料
⑤.fullclean 清理按钮,当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容
⑥. Build 构建工程,当一个工程满足构建时,通过此按钮进行编译
⑦.当前下载方式,默认为UART
⑧.flash烧录按钮,当一个工程Build构建通过时,选择对应开发板COM口,点击此按钮可以将编译好的固件烧录至芯片
⑨.monitor开启烧录口监控,当一个工程Build-->flash后,可通过点击此按钮查看烧录、调试口输出的l0g,以便观察应用程序是否正常工作
⑩.Debug调试
⑪.Build Flash Monitor 一键按钮,用于连续执行Build-->Flash-->Monitor,常被称作小火苗

ESP32-S3-AMOLED-1.91-study-10.png

编译、烧录、串口监视

  • 点击我们之前介绍的 编译,烧录,打开串口监视器按键

ESP32-S3-AMOLED-1.91-study-11.png

  • 编译可能需要较长时间才能完成,尤其是在第一次编译时

ESP32-S3-AMOLED-1.91-study-12.png

  • 在此过程中,ESP-IDF可能会占用大量CPU资源,因此可能会导致系统卡顿
  • 若是新工程首次烧录程序,将需要选择下载方式,选择 UART

ESP32-S3-AMOLED-1.91-study-13.png

  • 后续也可在 下载方式 处进行修改(点击即可弹出选项)

ESP32-S3-AMOLED-1.91-study-14.png

  • 因为板载自动下载电路,无需手动操作即可自动下载
  • 下载成功后,自动进入串口监视器,可以看到芯片输出对应的信息并提示10S后重启

ESP32-S3-AMOLED-1.91-study-15.png


使用IDF 示例程序

下文以使用“ESP32-S3-LCD-1.47-Demo”为例介绍工程的两种打开方式及使用的一般步骤、ESP-IDF工程项目详解,若使用其他工程,操作步骤类推。

软件内部打开

  • 打开 VScode 软件,选择文件夹打开示例

ESP32-S3-AMOLED-1.91-study-16.png

  • 选择提供的 ESP-IDF 下的示例,点击选择文件(位于 示例程序/Demo/ESP-IDF 路径下)

ESP32-S3-AMOLED-1.91-study-17.png


软件外部打开

  • 正确选择工程目录,打开工程,否则会影响后续程序编译烧录

ESP32-S3-AMOLED-1.91-study-18.png

  • 连接设备后,选择好COM口和型号,点击下方编译并烧录即可实现程序控制

ESP32-S3-AMOLED-1.91-study-19.png

ESP-IDF工程项目详解

  • 组件(Component):ESP-IDF中的组件是构建应用的基本模块,每个组件通常是相对独立的代码库或库,能实现特定的功能或服务,可以被应用程序或是其他组件重复使用,类似于Python开发中的库的定义。
    • 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语言基础,引入库是通过CMakeLists.txt进行配置和定义的。
    • CmakeLists.txt的作用:ESP-IDF编译时编译工具CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。编译过程如:

ESP32-P4 VSCode ESP-IDF GettingStart 240906 02.png

修改COM口

  • 此处显示使用对应的COM口,点击可以修改对应COM口
  • 请根据设备对应COM口进行选择(可通过设备管理器查看)
  • 若出现下载失败的情况请点击复位按键1秒以上或进入下载模式,等待 PC 端重新识别到设备后再次下载

ESP32-S3-AMOLED-1.91-study-07.png

修改驱动对象

  • 选择我们需要驱动的对象,下图以主芯片为ESP32S3 以例(用户根据手头实物板子的主控芯片对应设置)

ESP32-S3-AMOLED-1.91-study-08.png

  • 选择openocd的路径,这里对我们没有影响,所以我们随便选择一个即可

ESP32-S3-AMOLED-1.91-study-09.png

其余状态栏简介

①.ESP-IDF开发环境版本管理器,当我们的工程需要区分开发环境版本时,可以通过安装不同版本的ESP-IDF来分别管理,当工程使用特定版本时,可以通过使用它来切换
②.设备烧录COM口,选择以将编译好的程序烧录进芯片上
③.set-target 芯片型号选择,选择对应的芯片型号,如:ESP32-P4-Nano需要选择 esp32p4 为目标芯片
④.menuconfig,点击修改sdkconfig配置文件内容,项目配置详细资料
⑤.fullclean 清理按钮,当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容
⑥. Build 构建工程,当一个工程满足构建时,通过此按钮进行编译
⑦.当前下载方式,默认为UART
⑧.flash烧录按钮,当一个工程Build构建通过时,选择对应开发板COM口,点击此按钮可以将编译好的固件烧录至芯片
⑨.monitor开启烧录口监控,当一个工程Build-->flash后,可通过点击此按钮查看烧录、调试口输出的l0g,以便观察应用程序是否正常工作
⑩.Debug调试
⑪.Build Flash Monitor 一键按钮,用于连续执行Build-->Flash-->Monitor,常被称作小火苗

ESP32-S3-AMOLED-1.91-study-10.png

编译、烧录、串口监视

  • 点击我们之前介绍的 编译,烧录,打开串口监视器按键

ESP32-S3-AMOLED-1.91-study-11.png

  • 编译可能需要较长时间才能完成,尤其是在第一次编译时

ESP32-S3-AMOLED-1.91-study-12.png

  • 在此过程中,ESP-IDF可能会占用大量CPU资源,因此可能会导致系统卡顿
  • 若是新工程首次烧录程序,将需要选择下载方式,选择 UART

ESP32-S3-AMOLED-1.91-study-13.png

  • 后续也可在 下载方式 处进行修改(点击即可弹出选项)

ESP32-S3-AMOLED-1.91-study-14.png

  • 因为板载自动下载电路,无需手动操作即可自动下载
  • 下载成功后,自动进入串口监视器,可以看到芯片输出对应的信息并提示10S后重启

ESP32-S3-AMOLED-1.91-study-15.png


使用IDF 示例程序

下文以使用“ESP32-S3-LCD-1.47-Demo”为例介绍工程的两种打开方式及使用的一般步骤、ESP-IDF工程项目详解,若使用其他工程,操作步骤类推。

软件内部打开

  • 打开 VScode 软件,选择文件夹打开示例

ESP32-S3-AMOLED-1.91-study-16.png

  • 选择提供的 ESP-IDF 下的示例,点击选择文件(位于 示例程序/Demo/ESP-IDF 路径下)

ESP32-S3-AMOLED-1.91-study-17.png


软件外部打开

  • 正确选择工程目录,打开工程,否则会影响后续程序编译烧录

ESP32-S3-AMOLED-1.91-study-18.png

  • 连接设备后,选择好COM口和型号,点击下方编译并烧录即可实现程序控制

ESP32-S3-AMOLED-1.91-study-19.png

ESP-IDF工程项目详解

  • 组件(Component):ESP-IDF中的组件是构建应用的基本模块,每个组件通常是相对独立的代码库或库,能实现特定的功能或服务,可以被应用程序或是其他组件重复使用,类似于Python开发中的库的定义。
    • 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语言基础,引入库是通过CMakeLists.txt进行配置和定义的。
    • CmakeLists.txt的作用:ESP-IDF编译时编译工具CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。编译过程如:

ESP32-P4 VSCode ESP-IDF GettingStart 240906 02.png

示例程序

  • ESP32-S3-Touch-LCD-4.3C 示例程序
示例程序 基础例程说明 依赖库
01_I2C 测试I2C功能 -
02_RTC 测试RTC功能 -
03_LCD 测试LCD功能 -
04_ISOLATION_IO 测试ISOLATION_IO -
05_SD 测试SD卡 -
06_TOUCH 测试触控功能 -
07_DISPLAY_BMP 测试SD卡中的bmp图片显示到屏幕上 -
08_WIFI_SCAN 扫描附近WIFI,并显示WIFI名 -
09_WIFI_STA 测试STA功能 -
10_WIFI_AP 测试AP功能 -
11_SPEAKER_MICROPHONE 测试麦克风拾音和喇叭播放 -
12_LVGL_TRANSPLANT 测试LVGL demo LVGL
13_LVGL_CODEC 测试音频文件播放 LVGL

01_I2C

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • app_main()

首先初始化 I2C 通信接口,然后初始化 IO 扩展芯片。初始化完成后,该函数进入一个无限 while(1) 循环。在这个循环中,它持续调用 IO_EXTENSION_Output() 函数以500 毫秒的间隔交替,实现背光闪烁效果。

  • DEV_I2C_Init()

初始化 I2C 总线接口,这是与 IO 扩展芯片通信的基础。

  • IO_EXTENSION_Init()

初始化并配置 IO 扩展芯片,使其准备好接收控制命令。

  • IO_EXTENSION_Output(IO_EXTENSION_IO_2, value)

硬件控制:通过I2C接口向IO扩展芯片发送命令,将指定的引脚IO_EXTENSION_IO_2设置为高电平或低电平。

【运行效果】


  • 烧录成功后,​​LCD 背光以 1 秒周期闪烁

02_RTC

【硬件连接】


  • 使用USB线连接板子的UART口,接入电脑

【代码分析】


  • app_main()

它执行系统初始化:该函数初始化 I2C 通信接口DEV_I2C_Init()、外部 IO 扩展芯片 IO_EXTENSION_Init(),以及 PCF85063A RTC 模块 PCF85063A_Init()。

  • PCF85063A_Init()

初始化 PCF85063A RTC 驱动程序。

  • PCF85063A_Set_All(Set_Time)

将 RTC 的当前时间设置为预设的 Set_Time。

  • PCF85063A_Set_Alarm(Set_Alarm_Time)

将 RTC 的闹钟时间设置为预设的 Set_Alarm_Time。

  • PCF85063A_Enable_Alarm()

启用 RTC 的闹钟功能,使其在达到设定时间时触发。

【运行效果】


  • 烧录成功后,打开串口调试助手向 Touch-LCD-4.3C 发送消息,该设备会将收到的消息返回给串口调试助手

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-13.png
1.选择对应串口 2.添加回车换行 3.选择对应的波特率 4.勾选DTR 5.开启串口 6.消息日志打印(正常触发闹钟功能)

03_LCD

【硬件连接】


  • 使用USB线连接板子后接入电脑

【代码分析】


  • app_main()

它初始化硬件(I2C, IO 扩展)和 Waveshare RGB LCD 屏幕,分配并创建 帧缓冲区(画布)。图形测试执行:程序顺序执行一个完整的图形测试套件。

  • Paint_NewImage()

画布创建:设置内存作为绘图帧缓冲区。

  • Paint_DrawRectangle()

矩形绘制:用于绘制颜色条纹等。

  • Paint_DrawString_EN()

文本渲染:用于绘制英文字符串。都绘制不同的元素,然后调用 wavesahre_rgb_lcd_display() 刷新屏幕。

【运行效果】


屏幕先显示彩色渐变条,然后依次展示点、线、矩形、圆、文字、数字,最后全屏显示两张图片。

04_ISOLATION_IO

【硬件连接】


  • 使用USB线把板子接入电脑
  • 在开发板背部将DO0->DO连接,如图

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-4.png

【代码分析】


  • app_main()

初始化 I2C 通信、IO 扩展芯片,并将 DI0 和 DI5 设置为输入模式。同时,初始化 LCD 屏幕并分配。主循环执行一个数字 I/O 回环测试。通过交替设置 DO0 和 DO1 的状态,并读取 DI0 和 DI1 的状态来验证 I/O 扩展芯片的输入/输出功能。

  • IO_EXTENSION_IO_Mode()

模式配置:设置扩展芯片的 IO 引脚(如 DI0/DI5)为输入模式。

  • IO_EXTENSION_Output() / IO_EXTENSION_Input()

I/O操作:用于设置数字输出引脚的状态和读取数字输入引脚的状态。

【运行效果】


  • 烧录成功后,屏幕会根据背部接线情况显示红色还是绿色
  • 当正确接线,屏幕显示绿色
  • 当错误接线,屏幕显示红色

05_SD

【硬件连接】


  • 使用USB线把板子接入电脑
  • 将Micro SD卡接入ESP32-S3-Touch-LCD-4.3C中,如图

ESP32-S3-Touch-LCD-4.3C-PlatformIO-ex-05-1.png

【代码分析】


  • app_main()

通过 sd_mmc_init() 挂载 SD 卡。 信息读取与显示:如果挂载成功,它使用 read_sd_capacity() 读取总容量和可用空间,将这些值格式化为 MB/GB 格式,并将结果以及测试状态(成功或失败)绘制在 LCD 画布上。 资源释放:测试和显示信息后,它调用 sd_mmc_unmount() 解挂载 SD 卡。

  • sd_mmc_init()

SD 卡操作:初始化并挂载 SD 卡文件系统。

  • read_sd_capacity()

容量读取:从 SD 卡中读取总容量和可用空间数据。

  • sd_mmc_unmount()

解挂载:清理并释放 SD 卡文件系统的资源。

【运行效果】


  • 烧录成功后,屏幕显示SD卡容量 ,若没插上SD卡则显示* SD Card Fail!

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-8.png

06_TOUCH

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • app_main()

主循环持续读取 GT911 的多达 5 个触摸点数据。在新的触摸坐标上用预设颜色绘制一个直径 30 像素的实心圆。

  • waveshare_get_frame_buffer()

检索 Waveshare LCD 驱动中用于双缓冲的两个帧缓冲区指针。

  • Paint_DrawCircle()

在触摸点的位置绘制或清除跟踪圆。

【运行效果】


  • 烧录成功后,可以实现五点触摸功能。

07_DISPLAY_BMP

【硬件连接】


  • 使用USB线把板子接入电脑
  • 将Micro SD卡接入ESP32-S3-Touch-LCD-4.3C中

ESP32-S3-Touch-LCD-4.3C-PlatformIO-ex-05-1.png

【代码分析】


  • app_main()

检测触摸点是否位于预先定义的 左/右箭头区域。 根据触摸区域,递增或递减图片索引,并在到达列表边界时循环切换。 使用 GUI_ReadBmp() 从 SD 卡加载下一张 BMP 图片到帧缓冲区。

  • GUI_ReadBmp()

负责从 SD 卡读取指定的 BMP 文件,并将其绘制到当前的帧缓冲区

  • Paint_DrawLine()

用于在 LCD 上绘制下一张/上一张图片切换的导航箭头。

【运行效果】


  • 烧录成功后,左/右导航箭头区域可以切换显示上一张或下一张BMP图片并更新导航箭头绘制。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-9.png

08_WIFI_SCAN

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • app_main()

调用 wifi_scan() 扫描周围网络。程序遍历扫描结果,使用 contains_chinese() 过滤包含中文的 SSID,只将符合条件的网络名称绘制到屏幕的右侧区域。

  • wifi_init() / wifi_scan()

初始化 Wi-Fi 栈并执行网络扫描。

【运行效果】


  • 烧录成功后,触屏屏幕时会在屏幕上显示扫描到的wifi名称。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-1.png

09_WIFI_STA

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • app_main()

调用wifi_sta_init()尝试以Station (STA) 模式连接到预定义的网络 "SSID" 和 "PASSWORD"。如果连接成功(逻辑在 wifi.c 中处理),程序会显示获取到的 IP 地址、SSID 和密码。如果连接失败,程序会显示连接失败信息。

  • wifi_sta_init()

负责启动连接到指定 AP 的过程。

【运行效果】


  • 烧录成功后,连接成功或失败后更新屏幕右侧显示IP地址、Wi-Fi名称等信息或连接失败消息。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-2.png

10_WIFI_AP

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • app_main()

程序进入无限循环,周期性调用 esp_wifi_ap_get_sta_list() 获取当前连接到该 AP 的客户端列表。如果连接的客户端数量发生变化,程序会清空右侧显示区域,更新连接总数,并列出每个连接设备的 MAC 地址。

  • esp_wifi_ap_get_sta_list()

获取当前连接到 AP 的所有 Station (STA) 客户端的列表(包括 MAC 地址)。

  • Paint_ClearWindows()

清除 LCD 屏幕右侧区域的内容,以便更新客户端列表。

【运行效果】


  • 烧录成功后,会显示wifi设备的连接数量和MAC地址。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-3.png

11_SPEAKER_MICROPHONE

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • app_main()

进入无限循环,读取触摸屏输入。检测用户是否点击了屏幕底部的图标区域。如果检测到有效点击,切换 is_playing 状态,并调用 play_or_pause() 函数执行录音或播放。

  • mic_i2s_read() / speaker_i2s_write()

I2S 数据流:用于从麦克风读取原始音频数据或将数据写入扬声器。

  • play_or_pause(bool play)

根据传入的 play 布尔值执行录音或播放操作。

【运行效果】


  • 烧录成功后,当点击指定区域时切换录音/播放相应操作,实现录音和播放功能。

12_LVGL_TRANSPLANT

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • app_main()

成功锁定 LVGL 互斥锁(lvgl_port_lock())后,程序调用 lv_demo_widgets()运行LVGL官方的Widgets示例界面。

  • lvgl_port_lock() / lvgl_port_unlock()

用于确保在调用LVGL API时对LVGL资源的安全访问。

【运行效果】


  • 烧录成功后,显示lvgl的示例程序

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-4.png

【其他说明】

13_LVGL_CODEC

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • app_main()

挂载SD卡sd_mmc_init()。如果成功,调用 list_files() 扫描 /music 目录下的 MP3 文件,并使用 mp3_num 计数。
如果 SD 卡失败或未找到 MP3 文件,程序退出。
初始化音频编解码器speaker_codec_init()和扬声器播放器speaker_player_init(),并设置音量。
锁定互斥锁后,调用 user_lv_demo_music() 启动自定义的 LVGL 音乐播放器界面。

  • sd_mmc_init() / list_files()

初始化 SD 卡并扫描指定的 MP3 音乐文件。

  • speaker_codec_init() / speaker_player_init()

配置音频硬件和播放软件栈。

【运行效果】


  • 烧录成功后,会运行lv_demo_widgets,可以进行交互操作。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-7.png



PlatformIO开发

本章介绍 PlatformIO 环境搭建,包括 Visual Studio、PlatformIO插件的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。

环境搭建

下载和安装 Visual Studio

  • 打开VScode官网的下载页面,选择对应系统和系统位数进行下载
    ESP32-S3-AMOLED-1.91-VScode-01.png
  • 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项
    ESP32-S3-AMOLED-1.91-VScode-02.png
    • 第一二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
    • 第三项开启后,选择打开方式时,可以直接选择VSCode

安装PlatformIO插件

  • 国内部分区域安装,一般推荐“在线安装”, 若因网络因素无法在线安装,则使用“离线安装”。

安装PlatformIO插件教程,详见:安装PlatformIO插件教程

运行第一个 PlatformIO 程序

如果你刚入门学习ESP32和PlatformIO,还不知道如何创建、编译、烧录和运行PlatformIO ESP32程序,那么请展开看看,希望可以帮助到你!

新建工程

  • 打开VS Code,如果已经安装好 PlatformIO IDE插件,请点击PlatformIO图标,选择 Create New Project -> New Projject -> 设置好工程名跟开发板型号,如 Hello_World
ESP32-S3-Touch-LCD-4.3C-PlatformIO-01.png 
ESP32-S3-Touch-LCD-4.3C-PlatformIO-02.png 
  • 第一次运行需要等待PlatformIO下载相关工具包,时间会比较长,请耐心等待
ESP32-S3-Touch-LCD-4.3C-PlatformIO-03.png 
  • 输入代码:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello, World!");
  delay(2000);
}
  • 保存代码文件,连接开发板到电脑上,选择 端口 -> 编译与烧录;在显示第五项的时候,表示烧录成功,再点击第6项,则可以观察程序的运行情况
ESP32-S3-Touch-LCD-4.3C-PlatformIO-04.png 

编译和烧录程序

  • 按照下面步骤进行编译跟烧录:

①. 点击打开main.cpp文件;
②. 输入上面给出的代码,并保存;
③. 选择COM口
④. 编译与烧录程序
⑤. 出现SUCCESS则表示烧录成功。
⑥. 点击串口助手,周期性输出Hello, World!,则成功。

ESP32-S3-Touch-LCD-4.3C-PlatformIO-05.png 
ESP32-S3-Touch-LCD-4.3C-PlatformIO-06.png 

示例程序

  • ESP32-S3-Touch-LCD-4.3C 示例程序
示例程序 基础例程说明 依赖库
01_I2C 测试I2C功能 -
02_RTC 测试RTC功能 -
03_LCD 测试LCD功能 -
04_ISOLATION_IO功能 测试ISOLATION_IO功能 -
05_SD 测试SD卡 -
06_TOUCH 测试显示屏触控功能 -
07_DISPLAY_BMP 测试SD卡图片显示 -
08_WIFI_SCAN 扫描附近WIFI,并显示WIFI名 -
09_WIFI_STA 测试STA功能 -
10_WIFI_AP 测试AP功能 -
11_SPEAKER_MICROPHONE 测试麦克风拾音功能和喇叭播放功能 -
12_LVGL_TRANSPLANT LVGL demo测试 LVGL
13_LVGL_BTN 画一个按钮,控制GPIO工作 LVGL
14_LVGL_SLIDER 画一个滑动条,控制背光跟GPIO输出,并同时显示电池电压 LVGL
15_UDP_TCP_NTP 实现UDP/TCP通信,实现NTP时间同步 LVGL


01_I2C

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

函数是初始化I2C通信和IO扩展芯片,设置IO_EXTENSION_IO_2引脚为输出模式。

  • loop()

函数是程序的主要循环部分,其核心功能是通过IO_EXTENSION_Output函数控制IO_EXTENSION_IO_2引脚的电平状态,在高电平(1)和低电平(0)之间切换,实现LCD背光的开启与关闭,形成每秒一次的周期性闪烁效果。

【代码烧录】


  • 烧录代码

【运行效果】


  • 屏幕无显示,连接的LED灯会以1Hz的频率亮灭

02_RTC

【硬件连接】


  • 使用USB线连接板子的UART口,接入电脑

【代码分析】


  • setup()

初始化串口、I2C、RTC芯片并设置初始时间和闹钟,为程序运行做准备。

  • loop()

不断读取当前时间并打印,同时检测闹钟是否触发,实现实时时钟与闹钟提醒功能。

【运行效果】


  • 打开串口调试助手向 ESP32-S3-Touch-LCD-4.3C 发送消息,该设备会将收到的消息返回给串口调试助手

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-13.png
1.选择对应串口 2.添加回车换行 3.选择对应的波特率 4.勾选DTR 5.开启串口 6.消息日志打印(正常触发闹钟功能)

03_LCD

【硬件连接】


  • 使用USB线连接板子的UART口,接入电脑

【代码分析】


  • setup():

完成LCD初始化、显存分配,并依次演示颜色渐变、点线图形、矩形圆形、文字数字及图片的显示效果。

  • Paint_NewImage()

画布创建:设置内存作为绘图帧缓冲区。

  • Paint_DrawRectangle()

矩形绘制:用于绘制颜色条纹等。

  • Paint_DrawString_EN()

文本渲染:用于绘制英文字符串。都绘制不同的元素,然后调用 wavesahre_rgb_lcd_display() 刷新屏幕。

【运行效果】


屏幕先显示彩色渐变条,然后依次展示点、线、矩形、圆、文字、数字,最后全屏显示两张图片。

04_ISOLATION_IO

【硬件连接】


  • 使用USB线把板子接入电脑
  • 在开发板背部将DO0->DI0 DO1->DI1连接,如图

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-4.png

【代码分析】


  • setup()

函数初始化串口、I2C、IO扩展、LCD屏幕,然后通过控制DO引脚并检测DI引脚的状态,测试DI/DO功能是否正常,并根据测试结果在RGB LCD屏幕上显示绿色(测试通过)或红色(测试失败)。

  • Serial.begin(115200)

初始化串口通信(用于打印调试信息,波特率115200)。

  • DEV_I2C_Init()

初始化I2C总线(通常用于连接传感器、显示屏等)。

  • O_EXTENSION_Init()

初始化IO扩展芯片(扩展更多的GPIO,比如DI/DO)。

【运行效果】


  • 烧录成功后,屏幕会根据背部接线情况显示红色还是绿色
  • 当正确接线,屏幕显示绿色
  • 当错误接线,屏幕显示红色

05_SD

【硬件连接】


  • 使用USB线把板子接入电脑
  • 将Micro SD卡接入ESP32-S3-Touch-LCD-4.3C中,如图

ESP32-S3-Touch-LCD-4.3C-PlatformIO-ex-05-1.png

【代码分析】


  • setup()

负责初始化所有必要的硬件和通信接口,包括串口、I2C、IO 扩展芯片和 LCD 屏幕。执行 SD 卡测试:尝试挂载 SD 卡,如果成功,则读取、计算并显示其总容量可用容量信息到 LCD 屏幕和串口,随后立即卸载 SD 卡。

  • sd_mmc_init():

尝试挂载 SD 卡文件系统。

  • read_sd_capacity():

从已挂载的 SD 卡读取总存储空间和可用存储空间。

  • sd_mmc_unmount():

卸载 SD 卡文件系统,释放相关资源。


【运行效果】


  • 烧录成功后,屏幕显示SD卡容量 ,若没插上SD卡则显示* SD Card Fail!

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-8.png

06_TOUCH

【硬件连接】


使用USB线把板子接入电脑

【代码分析】


  • setup()

初始化串口、I2C、IO扩展,设置触摸屏和LCD屏幕,配置双缓冲区。

  • touch_gt911_read_point()

触摸读取:获取当前屏幕上所有有效的触摸点坐标和数量。

  • DEV_I2C_Init()

初始化I2C接口。

  • waveshare_rgb_lcd_display()

显示屏幕内容。

【运行效果】


  • 烧录成功后,可以实现五点触摸功能。

07_DISPLAY_BMP

【硬件连接】


  • 使用USB线把板子接入电脑
  • 将Micro SD卡接入ESP32-S3-Touch-LCD-4.3C中

ESP32-S3-Touch-LCD-4.3C-PlatformIO-ex-05-1.png

【代码分析】


  • setup()

负责初始化所有硬件和通信接口,挂载 SD 卡,扫描 BMP 文件路径,并包含一个无限循环用于持续读取触摸操作和切换显示 SD 卡中的图像文件。

  • list_files(const char *base_path)

遍历SD卡根目录,查找所有 .bmp 文件,并将它们的完整路径存储起来。

  • sd_mmc_init()

尝试初始化 SD 卡文件系统。

  • touch_gt911_init()

初始化 GT911 触摸屏控制器。

  • GUI_ReadBmp()

从 SD 卡读取指定的 BMP 文件并将其绘制到 LCD 屏幕上。

【运行效果】


  • 烧录成功后,左/右导航箭头区域可以切换显示上一张或下一张BMP图片并更新导航箭头绘制。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-9.png

08_WIFI_SCAN

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

初始化所有通信接口和 LCD/Wi-Fi 硬件。准备图形环境,分配内存作为帧缓冲区。
绘制静态 UI 并执行一次 Wi-Fi 扫描 (wifi_scan),将所有找到的网络 SSID 列表直接显示在 LCD 屏幕的右侧区域。

  • wifi_scan_init()

初始化 Wi-Fi 硬件和配置。

  • wifi_scan()

执行实际的 Wi-Fi 扫描,并将结果直接绘制到 LCD 屏幕上。

【运行效果】


  • 烧录成功后,触屏屏幕时会在屏幕上显示扫描到的wifi名称。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-1.png

09_WIFI_STA

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

负责初始化所有通信接口(串口、I2C、IO 扩展)和 LCD 硬件,并检查 PSRAM 状态。
分配帧缓冲区,初始化绘图画布,并绘制静态 UI(标题、分隔线和连接中提示)。
调用 wifi_sta_init(USER_SSID, USER_PASS) 尝试连接到预定义的无线接入点。

  • wifi_sta_init(USER_SSID, USER_PASS):

初始化 Wi-Fi 模块并尝试以 Station 模式连接到指定的 SSID 和密码。其副作用是更新 LCD 上的连接状态。

【运行效果】


  • 烧录成功后,连接成功或失败后更新屏幕右侧显示IP地址、Wi-Fi名称等信息或连接失败消息。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-2.png

10_WIFI_AP

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

初始化所有硬件和图形环境,并将设备配置为无线接入点 (AP),使用预设的 SSID 和密码对外广播网络。
该函数包含一个无限循环:它持续检查连接到 AP 的设备数量。一旦检测到设备连接或断开,它会清空 屏幕区域,并更新显示当前连接数以及每个已连接设备的 MAC 地址列表。

  • play_or_pause(bool play)

根据布尔参数切换程序状态:若为 true 则从麦克风读取 5 秒音频数据并存储到缓冲区(录音) 若为 false 则从缓冲区读取数据并输出到扬声器(播放),并更新屏幕上的状态和图标。

  • wifi_ap_init(USER_SSID, USER_PASS)

初始化Wi-Fi模块并将其配置为接入点AP模式,使用指定的网络名称和密码。

  • wifi_ap_StationNum()

动态更新LCD屏幕右侧显示已连接设备数量

  • wifi_ap_StationMac(station_mac, i)

显示每个连接设备的MAC地址

【运行效果】


  • 烧录成功后,会显示wifi设备的连接数量和MAC地址。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-3.png

11_SPEAKER_MICROPHONE

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

该函数初始化所有硬件、触摸屏、LCD 和音频编解码器,分配音频缓冲区,然后进入一个无限循环,持续监测触摸操作,以在录音和播放录制的 5 秒音频之间切换。

  • play_or_pause(bool play)

根据布尔参数切换程序状态:若为 true 则从麦克风读取 5 秒音频数据并存储到缓冲区(录音),若为 false 则从缓冲区读取数据并输出到扬声器(播放),并更新屏幕上的状态和图标。

  • codec_init()

初始化音频编解码器 (codec_init) 并设置扬声器音量和麦克风增益,配置音频路径。

  • mic_i2s_read() / speaker_i2s_write()

在 play_or_pause 函数内部调用,分别用于从麦克风读取音频数据和向扬声器写入音频数据。

【运行效果】


  • 烧录成功后,当点击指定区域时切换录音/播放相应操作,实现录音和播放功能。

12_LVGL_TRANSPLANT

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup():

它初始化所有硬件(I2C 总线、IO 扩展芯片)和 GT911 触摸屏,然后初始化 Waveshare RGB LCD 屏幕并开启背光。 核心功能:它将 LCD 和触摸屏句柄集成到 LVGL 图形库中 (lvgl_port_init),锁定 LVGL 互斥锁,然后启动 LVGL 官方的 Widgets 演示界面 (lv_demo_widgets)。

  • lv_demo_widgets():

启动 LVGL 演示:加载并运行 LVGL 官方提供的 Widgets 示例界面。

【运行效果】


  • 烧录成功后,显示lvgl的示例程序

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-4.png

【其他说明】

13_LVGL_BTN

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup():

初始化所有硬件(串口、I2C、IO 扩展、GT911 触摸屏)和 Waveshare RGB LCD 屏幕。 核心功能:它将 LCD 和触摸屏驱动集成到 LVGL 图形库中 (lvgl_port_init),然后锁定 LVGL 互斥锁,并调用 lvgl_btn() 在屏幕上创建并显示一个交互式按钮。

  • lvgl_btn():

在 LVGL 当前活动屏幕的中心位置创建一个按钮对象。 将 btn_event_cb 回调函数绑定到按钮上,以响应用户的交互。

  • btn_event_cb(lv_event_t * e):

按钮回调:当按钮被点击 (LV_EVENT_CLICKED) 时触发。 输出信息:通过串口打印 "Button Pressed." 消息。

【运行效果】


  • 烧录成功后,会运行lv_demo_widgets,可以进行交互操作。

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-5.png


14_LVGL_SLIDER

【硬件连接】


  • 使用USB线把板子接入电脑

【代码分析】


  • setup()

它初始化所有硬件和 Waveshare RGB LCD 屏幕。 将 LCD 和触摸屏驱动集成到 LVGL 图形库中 (lvgl_port_init),然后锁定 LVGL 互斥锁,并调用 lvgl_slider() 创建并显示包含滑块和电压标签的用户界面。

  • loop()

核心功能:它将 LCD 和触摸屏驱动集成到 LVGL 图形库中 (lvgl_port_init),然后锁定 LVGL 互斥锁,并调用 lvgl_slider() 创建并显示包含滑块和电压标签的用户界面。

  • lvgl_slider()

创建 UI:在 LVGL 屏幕上创建主要的 滑块、显示滑块值的 数值标签,以及显示电池电压的 BAT 标签。同时,它将 IO 扩展的 PWM 输出初始化为 0 亮度,并将 slider_event_cb 绑定到滑块事件。

  • slider_event_cb(lv_event_t * e)

滑块回调:当用户拖动滑块时触发。它更新滑块上方的数值标签,并根据滑块的当前值设置 IO 扩展芯片的 PWM 占空比 (IO_EXTENSION_Pwm_Output),从而控制 LED 亮度。

  • bat_cb(lv_timer_t * timer)

定时器回调:由 loop() 函数创建的定时器触发。它的唯一任务是安全地使用 lv_label_set_text 更新屏幕上的电池电压标签 (BAT_Label)。

【运行效果】


  • 烧录成功后,显示滑动空间和电量显示,可以通过滑动组件控制图片亮度

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-6.png

15_UDP_TCP_NTP

【硬件连接】

  • 使用USB线把板子接入电脑

【代码分析】

  • setup()

初始化所有硬件(串口、I2C、IO 扩展、触摸屏和 LCD)并集成 LVGL 图形库。
创建 UI:锁定LVGL访问权限,调用ui_init()创建完整的用户界面。
Wi-Fi 连接:尝试连接到预设的 Wi-Fi 网络,并在连接成功后,在 UI 上更新 ESP32 的本地 IP 地址。
启动后台任务:创建一个 FreeRTOS 任务(ntpSyncTask)在后台与 NTP 服务器同步时间,并初始化 UDP 端口监听。

  • loop()

主监控循环:它持续检查是否有新的传入数据,处理来自 TCP 客户端和 UDP 端口的接收消息,并将所有接收到的消息通过 ui_log() 实时显示到屏幕的日志框中。 时间更新:它周期性地获取本地同步时间 (getLocalTime),并锁定 LVGL 访问权限,实时更新屏幕顶部的时间标签。

  • ntpSyncTask(void pvParameters)

后台任务:这是一个在独立 FreeRTOS 任务中运行的函数,它等待 Wi-Fi 连接成功后,配置 NTP 服务并同步网络时间,然后将同步结果打印到日志框中。

  • event_tcp_send(lv_event_t * e)

TCP 发送逻辑:获取输入框文本,检查 TCP 连接状态。如果未连接,则尝试连接到目标 Host IP;如果已连接或连接成功,则通过 TCP 发送消息并记录日志。

  • event_udp_send(lv_event_t * e)

UDP 发送逻辑:获取输入框文本,将消息封装成 UDP 数据包,发送给目标 Host IP 和 UDP 端口,并记录发送日志。


【操作流程】

  • 打开SSCOM并且切换至udp通信

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-12.png
1.选择UDP协议
2.选择esp32的ip地址(可以通过上位机显示,或者在设备热点设置中查看)
3.选择主机地址(可以通过CMD命令行输入ipconfig查找)
4.设置主机和ESP32的端口(和代码中的一致)
5.开启通讯协议
6.打开时间戳和分包显示
7.输入信息栏
8.信息发送

  • 打开SSCOM并且切换至tcp通信

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-11.png
1.选择TCP协议
2.选择主机地址(可以通过CMD命令行输入ipconfig查找)
3.设置主机的端口(和代码中的一致),并建立TCP连接
4.打开时间戳和分包显示
5.输入信息栏
6.信息发送
7.消息传输日志

  • 通过触控面板与上位机通信

ESP32-S3-Touch-LCD-4.3C-Arduino-image-1-5.png
1.显示主机ip
2.显示esp的ip
3.wifi连接成功则进行时间同步
4.用户输入框
5.日志打印框(包含通信连接事件的日志打印,设备之间通信的打印)
6.TCP消息发送按钮(若TCP未连接,则该按钮为TCP连接请求按钮)
7.UDP消息发送按钮
8.清除日志按钮
9.用户输入键盘

【运行效果】


  • 烧录成功后,显示主界面,可通过串口助手利用TCP/UDP与ESP32进行通信

ESP32-S3-Touch-LCD-4.3C-Arduino-image-2-10.png

小智AI应用

为顺利操作,请仔细阅读FAQ,提前了解可能的问题。声音问题,可通过对话将声音设置为最大,如:“将声音调至最大”。

Flash固件的烧录与擦除


  • 当前示例程序有提供测试固件,可通过直接烧录测试固件来测试板载设备功能正常与否
  • bin文件路径:
    ...\ESP32-S3-Touch-LCD-4.3C-Demo\Firmware

资料

原理图

工程图纸

示例程序

数据手册

ESP32-S3

其他器件

软件工具

Arduino

VScode

调试工具

其他资料链接

FAQ

若烧录代码后,屏幕无反应,可查看是否有在Arduino IDE -> Tools正确配置:选择对应 Flash(16MB) 和使能 PSRAM(8MB OPI))



安装库的路径出现中文导致检索不到库文件


可以参考以下步骤运行例程对比下:

  1. 运行程序前,进行库安装
  2. 安装库视频参考
  3. 运行和烧录示例程序



  1. 可将开发板设置为下载模式解决。先完全断电,长按 Boot 按键并重新上电后松开,进入下载模式,重新烧录程序,复位后运行。
  2. 请尝试按下状态栏内fullclean 清理按钮并重新编译烧录,此功能为当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容


部分AppData文件夹是默认隐藏的,可以设置为显示

  • 英文系统:资源管理器->View->勾选“Hidden items”
  • 中文系统:文件资源管理器->查看->显示->勾选“隐藏的项目”


按下Windows + R键打开“运行”对话框,输入devmgmt.msc并按回车键打开设备管理器 展开“Ports(COM&LPT)”部分,这里会列出所有的COM端口及其当前状态。


首次编译很慢属于正常情况,耐心等待即可


若开发板有复位键则按下复位键;若没有复位键,请重新上电




是新旧版本的IDF导致异常,同步成最新IDF版本。


技术支持

联系人:周工
EMAIL:2850151197@qq.com
QQ:2850151197
微信:扫下方二维码添加
Zgy-vx.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证