ESP32-S3-Touch-LCD-4.3C 使用教程

ESP32-S3-Touch-LCD-4.3C

ESP32-S3-Touch-LCD-4.3C 是微雪 (Waveshare) 低成本高性能开发板,集成 2.4GHz WiFi、BLE5、大容量 Flash 与 PSRAM,板载 4.3 英寸电容触摸 LCD,可流畅运行 LVGL GUI,搭载 ES8311 音频编解码器与 ES7210 四通道 ADC,支持语音采集与播放,并提供丰富 I2C、宽电压 IO 等接口,适用于 IoT、移动设备与智能家居等应用。

产品特性

  • 搭载 ESP32-S3R8 高性能 Xtensa® 32 位 LX7 双核处理器,主频达 240 MHz
  • 支持 2.4 GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth® 5 (LE),并集成板载天线
  • 内置 512KB 的 SRAM 和 384KB ROM,叠封 8MB PSRAM 和外接 16MB Flash 存储
  • 板载 4.3 英寸宽电容触摸屏,800 × 480 分辨率,65K 彩色
  • 支持 I2C 接口控制电容触摸,5 点触控,支持中断

板载资源

ESP32-S3-Touch-LCD-4.3C 板载资源示例 1
  • 板载 PCF85063 RTC 实时时钟芯片,可实现掉电保持时间和闹钟功能。
  • 板载 4.3 英寸 800×480 电容触摸 LCD 屏,支持 LVGL 图形界面显示。
  • 板载隔离 IO 接口,提供 2 路数字输入(DI0、DI1)和 2 路数字输出(DO0、DO1),可通过 IO_EXTENSION 与外部开关量设备安全隔离交互。
  • 板载 TF 卡座,采用 SD_MMC 接口访问 SD 卡,用于存储图片、音乐等资源。
  • 板载 ES8311 音频功放编解码器与 ES7210 四通道音频 ADC,配合扬声器和麦克风接口。
  • 板载 USB Type-C 接口,用于固件下载、串口日志打印及 USB 相关功能调试,是 Arduino 和 ESP-IDF 示例的主要通信与下载通道。
  • 板载 BOOT、RST 功能按钮,可快捷进入下载模式并复位运行不同固件。

产品尺寸

不带外壳

ESP32-S3-Touch-LCD-4.3C 板载资源示例2

带外壳

ESP32-S3-Touch-LCD-4.3C 板载资源示例2

开发方式

ESP32-S3-Touch-LCD-4.3C 支持 Arduino IDE 和 ESP-IDF 两种开发框架,为开发者提供灵活的选择,您可以根据项目需求和个人偏好选择合适的开发工具。

两种开发方式各有优势,开发者可根据自身需求和技能水平选择。Arduino 简单易学、上手快,适合初学者和非专业人士;ESP-IDF 则提供更高级的开发工具和更强的控制能力,适合有专业背景或对性能要求较高的开发者,更适用于复杂项目开发。

  • Arduino IDE 是一款便捷灵活、易于上手的开源电子原型平台。无需太多基础知识,简单学习后即可快速开发。Arduino 拥有庞大的全球用户社区,提供海量开源代码、项目示例和教程,以及丰富的库资源,封装了复杂功能,让开发者能够快速实现各种功能。您可以参考 Arduino IDE 开发环境搭建教程 完成初始设置,教程中同时提供了相关示例程序供参考。

  • ESP-IDF 全称 Espressif IoT Development Framework,是乐鑫科技为 ESP 系列芯片推出的专业开发框架。它基于 C 语言开发,包含编译器、调试器、烧录工具等,支持命令行或集成开发环境(如 Visual Studio Code 配合 Espressif IDF 插件)开发,插件提供代码导航、项目管理、调试等功能。我们推荐使用 VS Code 进行开发,具体配置过程可参考 ESP-IDF (VS Code) 开发环境搭建教程,教程中同时提供了相关示例程序供参考。

    Arduino 开发

    配置开发环境

    1. 安装和配置 Arduino IDE

    请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。

    2. 安装库

    要运行示例,需要安装对应的库。

    可从 此链接 下载 ESP32-S3-Touch-LCD-4.3C 开发板的示例程序包。包内的 arduino\libraries 目录已包含本教程所需的全部库文件。

    库或文件名称说明版本安装方式
    lvglLVGL 图形库v8.4.0通过库管理器或手动安装
    lv_conf.hLVGL 配置文件——手动安装
    版本兼容性说明

    LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。

    安装步骤:

    1. 进入已下载的 示例程序包

    2. 将其 arduino\libraries 目录下的所有文件夹(lvgl 和 lv_conf.h 等)复制到 Arduino 的库文件夹中。

      信息

      Arduino 库文件夹的路径通常是:c:\Users\<用户名>\Documents\Arduino\libraries

      也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的 libraries 文件夹。

    3. 其他安装方式请参考:Arduino 库管理教程

    3. Arduino 工程参数设置

    示例程序

    Arduino 示例程序位于 示例程序包 的 arduino/examples 目录中。

    示例程序基础例程说明依赖库
    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_transplantLVGL demo 测试LVGL
    13_lvgl_btn画一个按钮,控制 GPIO 工作LVGL
    14_lvgl_slider画一个滑动条,控制背光和 GPIO 输出,并显示电池电压LVGL
    15_udp_tcp_ntp实现 UDP/TCP 通信,并实现 NTP 时间同步LVGL

    01_i2c

    本示例演示如何通过 I2C 控制 IO 扩展芯片,从而周期性控制 LCD 背光的开关,形成闪烁效果。

    硬件连接

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

    代码

    01_i2c.ino

    代码解释

    • setup()

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

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

    运行效果

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

    02_rtc

    本示例演示如何使用板载 PCF85063 RTC 芯片,实现实时时钟显示与闹钟提醒功能。

    硬件连接

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

    代码

    02_rtc.ino

    代码解释

    • setup()

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

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

    运行效果

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

    03_lcd

    本示例演示如何初始化 LCD 并显示各种图形、文本和图片。

    硬件连接

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

    代码

    03_lcd.ino

    代码解释

    • setup() :

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

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

      • 矩形绘制:用于绘制颜色条纹等。
    • Paint_DrawString_EN() :

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

    运行效果

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

    04_isolation_io

    本示例通过显示器验证隔离 IO 功能是否正常。

    硬件连接

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

    代码

    04_isolation_io.ino

    代码解释

    • setup() :

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

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

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

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

    运行效果

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

    05_sd

    本示例通过显示器输出 SD 卡的挂载情况

    硬件连接

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

    代码

    05_sd.ino

    代码解释

    • 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!

    06_touch

    本示例演示了如何使用 5 点触摸。

    硬件连接

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

    代码

    06_touch.ino

    代码解释

    • setup() :

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

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

      • 将缓存区内容显示到屏幕上。

    运行效果

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

      07_display_bmp

    本示例展示了如何从 SD 卡读取并显示 BMP 图片。

    硬件连接

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

    代码

    07_display_bmp.ino

    代码解释

    • setup() :

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

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

      • 挂载 SD 卡文件系统。
    • touch_gt911_init() :

      • 初始化 GT911 触摸屏控制器。
    • GUI_ReadBmp() :

      • 从 SD 卡读取指定的 BMP 文件并将其绘制到缓存区中。

    运行效果

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

    08_wifi_scan

    本示例演示了在屏幕上显示扫描到的 WiFi 名称(无法显示中文 WiFi 名)。

    硬件连接

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

    代码

    08_wifi_scan.ino

    代码解释

    • setup() :

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

      • 初始化 Wi-Fi 硬件和配置。
    • wifi_scan() :

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

    运行效果

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

    09_wifi_sta

    本示例展示了如何使用屏幕显示连接热点的 IP 信息

    硬件连接

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

    代码

    09_wifi_sta.ino

    代码解释

    • 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 名称等信息或连接失败消息。

    10_wifi_ap

    本示例展示了如何使用屏幕显示热点的连接情况,会在屏幕上显示连接设备的 MAC 地址

    硬件连接

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

    代码

    10_wifi_ap.ino

    代码解释

    • setup() :

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

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

      • 动态更新 LCD 屏幕右侧显示已连接设备数量
    • wifi_ap_StationMac(station_mac, i) :

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

    运行效果

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

    11_speaker_microphone

    本示例演示了通过触摸屏实现实现录音和播放功能。

    硬件连接

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

    代码

    11_speaker_microphone.ino

    代码解释

    • 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

    本示例演示了 LVGL 移植。

    硬件连接

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

    代码

    12_lvgl_transplant.ino

    代码解释

    • 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 的示例程序

    其他说明

    • 在使用时出现屏幕漂移,请参考 ESP 官方 FAQ
    • LVGL 使用的版本是 8.4.0,可以通过以下文档查询和使用 LVGL 的 API

    13_lvgl_btn

    硬件连接

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

    代码

    13_lvgl_btn.ino

    代码解释

    • 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." 消息。

    运行效果

    • 烧录成功后,会在屏幕中间显示一个按钮,打开串口监视器,进行交互操作时,监视器会输出“Button Pressed.”。

    14_lvgl_slider

    硬件连接

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

    代码

    14_lvgl_slider.ino

    代码解释

    • 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)。

    运行效果

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

    15_udp_tcp_ntp

    硬件连接

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

    代码

    15_udp_tcp_ntp.ino

    代码解释

    • setup() :

      • 初始化串口、I2C、IO 扩展、触摸屏和 LCD 硬件,并初始化 LVGL 图形库。接着调用 ui_init() 加载界面,并创建 wifi_connect_task 任务进行后台联网与对时。
    • loop() :

      • 定时获取系统本地时间,并使用 lvgl_port_lock 确保线程安全地更新屏幕上的时间显示标签。
    • wifi_connect_task() :

      • 负责连接 WiFi 网络,并在联网成功后通过 NTP 服务器同步系统时钟。

    运行效果

    • 烧录成功后,屏幕显示系统初始化信息,联网成功后将通过 NTP 获取并实时刷新显示当前日期与时间。


    ESP-IDF 开发

    配置开发环境

    备注

    以下说明以 Windows 10/11 为主。macOS / Linux 请参阅 Espressif 官方指南: https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html

    1. 安装 Visual Studio Code: https://code.visualstudio.com/

    2. 在 VS Code 中安装 ESP-IDF 扩展(扩展视图 Ctrl+Shift+X,搜索 ESP-IDF 并安装)。

      安装完成后,侧栏会出现 Espressif 图标,打开后选择 Configure ESP-IDF Extension,进入配置向导。

    3. 建议使用快速(Express)配置,按需选择:

      • 下载服务器:Espressif(国内镜像)或 GitHub
      • ESP-IDF 版本:按项目要求选择;若无特殊需求,选用最新稳定版本。注意:部分示例在较旧/特定 IDF 版本上测试通过。
      • 安装路径:尽量使用无空格且仅含 ASCII 字符的路径(例如 C:\Users<用户名>\esp),以避免路径相关问题。
    4. 点击 Install 开始自动下载与安装 ESP-IDF、工具链和创建 Python 虚拟环境,等待安装完成提示即可。

    注意

    若安装失败或需重装,可尝试删除 C:\Users\%Username%\esp 与 C:\Users\%Username%\.espressif 后重试。

    示例程序

    ESP-IDF 示例程序包 位于 examples/esp-idf 中

    下面给出每个示例的目的、要点说明与运行效果(以便快速上手)。

    示例程序基础例程说明依赖库
    01_i2c使用 I2C 控制 IO 扩展芯片,从而周期性控制 LCD 背光的开关,形成闪烁效果。-
    02_rtc使用板载 RTC 芯片,实现实时时钟显示与闹钟提醒功能。-
    03_lcd初始化 LCD 并显示各种图形、文本和图片。-
    04_isolation_io通过显示器验证隔离 IO 功能是否正常。-
    05_sd通过显示器输出 SD 卡的挂载情况。-
    06_touch演示了如何使用 5 点触摸。-
    07_display_bmp展示了如何从 SD 卡读取并显示 BMP 图片。-
    08_wifi_scan扫描附近 Wi-Fi 并在屏幕显示 SSID 列表。-
    09_wifi_sta以 STA 模式连接 AP 并显示 IP 信息。-
    10_wifi_ap使用屏幕显示热点的连接情况,显示连接设备的 MAC 地址。-
    11_speaker_microphone录音与播放示例(codec、I2S)。-
    12_lvgl_transplantLVGL 移植并运行官方 demo。LVGL
    13_lvgl_codecLVGL 与音频结合示例。LVGL
    14_tcp_udp_ntp展示 TCP/UDP 通信与 NTP 时间同步示例。LVGL

    01_i2c

    本示例演示如何通过 I2C 控制 IO 扩展芯片,从而周期性控制 LCD 背光的开关,形成闪烁效果。

    硬件连接

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

    代码

    Details

    代码解释

    • DEV_I2C_Init():初始化 I2C 驱动,通过 i2c_config_t 结构体定义 SDA/SCL 引脚及频率,并调用 i2c_driver_install 注册驱动。
    • IO_EXTENSION_Init():初始化 IO 扩展芯片,内部通过 I2C 接口设置芯片的默认寄存器状态与引脚模式。
    • IO_EXTENSION_Output():通过 i2c_master_write_to_device 向扩展芯片发送控制指令,利用位运算修改特定引脚的电平状态。

    运行效果

    • 背光按固定周期亮灭切换;串口可输出当前背光状态或 I2C 读写结果。

    02_rtc

    本示例演示板载 PCF85063 的时间读写与闹钟功能。

    硬件连接

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

    代码

    Details

    代码解释

    • PCF85063A_Init():初始化 PCF85063A 实时时钟,配置 I2C 地址、使能 oscillator 并设置为 24-hour 模式。
    • PCF85063A_Set_All():设置 PCF85063A 所有寄存器值,包括时间、闹钟时间、控制寄存器等。
    • PCF85063A_Read_now():从 PCF85063A 读取当前时间,将 BCD 编码转换为十进制格式。

    运行效果

    • 串口或屏幕显示当前时间;闹钟触发时输出提示信息。

    03_lcd

    本示例演示 LCD 初始化与基础绘制流程,验证 RGB LCD 显示链路与帧缓冲刷新。

    硬件连接

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

    代码

    Details

    代码解释

    • waveshare_esp32_s3_rgb_lcd_init():调用 esp_lcd_new_rgb_panel 创建面板句柄,配置 RGB 接口时序参数以适配 4.3 寸屏幕的分辨率。
    • malloc():使用 MALLOC_CAP_SPIRAM 标志在外部 PSRAM 中分配 Framebuffer,解决高分辨率显示对 SRAM 占用过大的问题。
    • Paint_NewImage():将分配的显示坐标与绘图上下文绑定。

    运行效果

    • 屏幕依次显示颜色渐变、基础图形与文字内容。

    04_isolation_io

    本示例验证隔离 IO 功能。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 根据示例连接 DO/DI 引脚测试隔离功能。

    代码

    Details

    代码解释

    • IO_EXTENSION_IO_Mode():配置扩展芯片的引脚工作模式,如将特定引脚设置为输入模式以读取隔离 DI 信号。
    • IO_EXTENSION_Output():控制扩展芯片的输出引脚电平,例如驱动隔离 DO 端口输出高/低电平以控制外部继电器或负载。
    • IO_EXTENSION_Read():实时读取扩展芯片输入引脚的状态,用于获取隔离 DI 端口的外部传感器或开关量反馈。

    运行效果

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

    05_sd

    本示例演示 SD 卡 挂载与文件系统访问,并在屏幕上显示挂载状态与基础信息。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 插入 TF/SD 卡.

    代码

    Details

    代码解释

    • esp_vfs_fat_sdmmc_mount():将 SD 卡挂载到虚拟文件系统(VFS),允许使用标准 POSIX 接口(如 fopen)访问 FATFS 分区。
    • sd_mmc_init():初始化 SDMMC 主机控制器,配置 1-bit 或 4-bit 总线模式,并根据硬件设计设置工作频率。
    • esp_vfs_fat_sdcard_unmount():将 SD 卡从虚拟文件系统中卸载,释放资源并允许重新挂载。

    运行效果

    • 屏幕提示挂载成功/失败,并显示卡容量、文件列表或测试文件读写结果。

    06_touch

    本示例演示触摸控制器驱动与 5 点触摸 读取,验证触摸坐标与屏幕坐标映射。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 手指在屏幕上触摸。

    代码

    Details

    代码解释

    • touch_gt911_init():初始化触摸控制器,配置 I2C 从机地址,并通过复位引脚触发芯片自检。
    • touch_gt911_read_point():读取状态寄存器获取当前触点数量,并依次提取 5 组触点的 X/Y 坐标数据。
    • Paint_DrawCircle():在指定坐标绘制一个指定半径和颜色的圆。

    运行效果

    烧录成功后,显示 5 点触摸读取,并根据触点坐标实时绘制圆形。

    07_display_bmp

    本示例从 SD 卡读取 BMP 文件并显示到屏幕,验证文件读取、解码与显示刷新链路。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 插入含 BMP 文件的 TF/SD 卡。

    代码

    Details

    代码解释

    • GUI_ReadBmp():从 SD 卡读取 BMP 文件,解析文件头获取图像尺寸与像素数据偏移。
    • Paint_Clear():清除画布,填充为指定颜色。
    • Paint_DrawLine():在指定坐标绘制一条线,可设置颜色、线宽、样式。

    运行效果

    • 屏幕显示 SD 卡中的 BMP 图片;串口输出图片信息与加载耗时。

    08_wifi_scan

    本示例扫描周围 Wi‑Fi 热点并在屏幕上展示 SSID/RSSI/加密方式 等信息。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 确保周围存在可扫描到的 Wi‑Fi。

    代码

    Details

    代码解释

    • wifi_init(): 初始化 Wi-Fi 驱动程序,分配资源并启动低功耗无线射频管理任务。
    • wifi_scan():启动周围接入点的扫描流程,支持全频道轮询或特定频道扫描,并配置最大返回结果数量。
    • contains_chinese():检查字符串是否包含中文字符,返回 true 或 false

    运行效果

    • 屏幕列出周围热点信息;串口输出扫描数量与每个 AP 的简要数据。

    09_wifi_sta

    本示例以 STA 模式连接指定 AP,并在屏幕上显示连接状态与 IP 信息。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 准备可连接的 Wi‑Fi(SSID/密码)。

    代码

    Details

    代码解释

    • nvs_flash_init():初始化非易失性存储(NVS),用于持久化保存 Wi-Fi 连接配置(如 SSID 和密码)。
    • wifi_sta_init():配置 Wi-Fi 为 Station 模式,并设置认证加密方式(如 WPA2_PSK),发起连接请求。
    • wifi_init():初始化 Wi-Fi 驱动程序,分配资源并启动低功耗无线射频管理任务。

    运行效果

    • 屏幕显示连接成功与分配到的 IP;断开时提示重连状态。

    10_wifi_ap

    本示例启用 SoftAP 热点,并在屏幕上显示连接设备信息(如 MAC、连接数量)。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 手机/电脑连接到开发板热点。

    代码

    Details

    代码解释

    • wifi_ap_init():初始化软热点(SoftAP)模式,设置 SSID、密码及工作信道,并配置最大接入客户端数量。
    • esp_wifi_ap_get_sta_list():定期查询已连接的站点列表,获取当前连接设备的数量及其硬件 MAC 地址。
    • MACSTR/MAC2STR():使用格式化宏将 6 字节的原始 MAC 地址转换为易读的字符串格式,以便在 UI 上展示。

    运行效果

    • 屏幕显示热点状态与已连接设备信息;串口同步输出连接/断开日志。

    11_speaker_microphone

    本示例演示音频采集与播放链路,包含 麦克风录音 与 扬声器播放Codec + I2S)。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 通过板载麦克风录音并从扬声器回放。

    代码

    Details

    代码解释

    • codec_init():初始化音频编解码芯片,配置采样频率、位宽以及输入输出路由(如开启麦克风增益和扬声器功放)。
    • heap_caps_malloc():在 PSRAM 中分配大容量录音缓冲区,支持长时间音频采集而不会耗尽内部 SRAM。

    运行效果

    • 可听到回放音频;串口输出录音/播放状态与音频参数。12_lvgl_transplant

    本示例完成 LVGL 基础移植,验证显示驱动、触摸输入与 LVGL 刷新流程,并运行官方 demo。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 可触摸屏幕交互。

    代码

    Details

    代码解释

    • lvgl_port_init():封装 LVGL 核心组件的初始化,包括内存池分配、计时器注册以及显示/输入设备的抽象绑定。
    • lvgl_port_lock():由于 LVGL 核心 API 非线程安全,在跨任务调用 UI 更新时必须通过互斥锁确保原子操作。
    • lv_timer_handler():UI 主循环处理函数,负责计算动画、刷新脏区域像素以及处理用户输入事件。

    运行效果

    • 屏幕显示 LVGL demo 界面,可触摸交互;串口输出 LVGL 初始化与刷新信息。

    13_lvgl_codec

    本示例将 LVGL UI 与音频功能结合,演示 UI 控制音量/播放状态等交互。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 扬声器与麦克风可用。

    代码

    Details

    代码解释

    • sd_mmc_init():初始化 SDMMC 控制器并挂载 FATFS 分区,用于从 SD 卡检索和加载 MP3 音乐文件。
    • speaker_player_init():创建音频播放后台任务,通过生产者-消费者模型实现音频文件的流式解码与播放。
    • lv_obj_add_event_cb():为 UI 控件绑定交互回调,当用户操作滑块或按钮时,通过消息机制动态调整播放器状态。

    运行效果

    • 屏幕显示音频控制界面并可操作;播放状态与音量变化实时生效。

    14_tcp_udp_ntp

    本示例演示基础网络通信(TCP/UDP)与 NTP 对时流程,验证网络栈与时间同步功能。

    硬件连接

    • 使用 USB 线把板子接入电脑;
    • 需先确保 Wi‑Fi 已连接。

    代码

    Details

    代码解释

    • peripheral_init():作为系统外设初始化总入口,依次完成 NVS、事件循环、I2C 扩展、LCD/触摸、LVGL UI、Wi‑Fi 和 NTP 初始化,为后续网络通信和时间同步打好基础。
    • wifi_init_sta():将 Wi‑Fi 配置为 STA 模式并发起连接,为 TCP/UDP 通信和 NTP 对时提供稳定的网络通道。
    • initialize_sntp():在确认 Wi‑Fi 已联网后启动 SNTP 客户端,从上游 NTP 服务器同步系统时间,为 localtime 等时间相关接口提供正确的基础时间。

    运行效果

    • 串口输出连接信息;使用网络调试助手设置对应 IP 地址和端口号,可以进行基本数据交互;并且屏幕显示网络状态与当前时间。


    出厂固件使用

    程序说明

    应用程序包括:squareline 示例、手写测试、图片显示、音乐播放、AI 对话、设置(WLAN、声音调节、背光调节、电池电压跟 CPU 温度获取和隔离 IO 测试)和麦克风测试。

    程序使用

    简单说明一下每个程序的使用跟功能。

    准备事项

    图片显示、音乐播放测试需要将 .\firmware\sdcard 中的两个文件夹复制到 SD 卡中,SD 卡的文件系统必须为 FAT32 格式,否则点击图标会重启系统。

    squareline

    此示例直接跑一下 squareline 的 demo

    运行效果

    DrawPanel

    此示例测试触摸屏是否正常

    运行效果

    Gallery

    此示例是读取 SD 卡中的图片文件进行显示

    运行效果

    MusicPlayer

    此示例是播放 SD 卡中的音乐,可以通过右边的喇叭按键调节声音大小

    运行效果

    AIChats

    此示例运行小智 AI,配置好小智后,对他说:“返回应用界面”,就可以回到桌面

    运行效果

    Settings

    此示例中有一些小部件,简单介绍一下

    WLAN

    此部件演示 WIFI 功能,具体操作如下:

    1. 点击开关,会扫描附近的 wifi,并显示在列表中(无法显示中文的 wifi)
    2. 选择需要连接的 wifi,并输入密码点击勾,就会连接 wifi(如果需要退出密码输入,先点击密码框,再点击空白处即可)
    3. 等待连接成功,连接成功会出现勾 ✅,失败会出现 ❎
    4. 连接成功后会自动同步北京时间
    运行效果

    Sound 与 Display

    此部件演示声音调节跟亮度调节功能

    运行效果

    Battery

    此部件展示 CPU 温度跟当前电池电压

    运行效果

    Isolationio

    此部件展示隔离 IO 的测试,需要将 DI0 连接 DO0,DI1 连接 DO1

    运行效果

    SpecAnalyzer

    此示例测试麦克风是否正常,拾音并通过动画显示出来

    运行效果

    恢复出厂

    如果刷了其他程序无法测试,可以通过下面的方法恢复出厂设置

    1. 需要会使用 Flash Tool,不会可以点击此链接学习

    2. 将 .\firmware\ESP32-S3-Touch-LCD-4.3C-Test.bin 添加到 Flash Tool 中,烧录地址为 0x00

    3. 将开发板连接到电脑,通过设备管理器查看 COM 口,然后在 Flash Tool 选择对应的 COM,点击开始即可,等待烧录成功后,摁下 RESET 按键即可

      ①. 添加固件文件

      ②. 输入烧录地址

      ③. 选择开发板的 COM

      ④. 开始烧录

      ⑤. 烧录完成

    相关资料

    1. 硬件资料

    开发板设计文件

    2. 技术手册

    3. 示例程序


    技术支持

    周一-周五(9:30-6:30)周六(9:30-5:30)

    手机:13434470212

    邮箱:services04@spotpear.cn

    QQ:202004841




[教程导航]