ESP32-Touch-LCD-3.5
|
| ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||
产品介绍
产品简介
本产品是一款微雪 (Waveshare) 设计的高性能、高集成的微控制器开发板。板载了 3.5 英寸电容高清 IPS 屏、高度集成的电源管理芯片、RTC、低功耗音频编解码芯片等外设,方便开发并嵌入应用到产品中。无需组装接线,轻松畅玩小智 AI。
产品特性
- 搭载 ESP32-D0WDR2-V3 高性能 Xtensa 32 位 LX6 双核处理器,主频高达 240MHz
- 支持 2.4 GHz Wi-Fi (802.11 b/g/n)速度高达 150 Mbps
- 蓝牙 v4.2 完整标准,包含传统蓝牙 (BR/EDR) 和低功耗蓝牙 (Bluetooth LE)
- 内置 520 KB 的 SRAM 和 448 KB ROM,叠封 2 MB PSRAM 和外接 16 MB Flash
- 采用 Type-C 接口,提高了用户的使用便捷性和设备的兼容性
- 板载 3.5 英寸电容触摸高清 IPS 屏,320 × 480 分辨率,262K 彩色,能清晰地显示彩色图片
- 内置 ST7796 驱动芯片和 FT6336 电容触控芯片,分别使用 SPI 和 I2C 接口通信,不占用过多接口引脚资源
- 板载 PCF85063 RTC 芯片,接入电池后,关机走时。
- 板载 PWR、BOOT 两个可自定义功能的侧边按钮,方便使用按钮进行自定义功能开发
- 板载 3.7V MX1.25 锂电池充放电接口
- 引出I2C、 UART 和多个 GPIO,可供外接设备和调试使用,灵活配置外设功能
- 板载 Micro SD 卡槽,提供扩展存储、快速数据传输和灵活性,适用于数据记录和媒体播放,简化了电路设计
- 使用 AXP2101 的好处包括高效的电源管理、支持多种输出电压、充电和电池管理功能以及对电池寿命的优化
硬件说明
|
1、ESP32-D0WDR2-V3 2、板载贴片天线 3、W25Q128JVSIQ 4、Micro SD 卡槽 5、IPEX 1 代座子 6、MX1.25 喇叭接口 7、BOOT 按键 8、RESET 按键 9、PWR 按键 10、AXP2101 |
11、充电指示灯 12、Type-C 接口 13、ES8311 14、电源指示灯 15、麦克风 16、MX1.25 锂电池接口 17、2.54mm 排座接口 18、PCF85063 19、NS4150B 20、TCA9554 21、CH343P
|
引脚定义
产品尺寸
使用说明
ESP32-Touch-LCD-3.5 目前提供 Arduino IDE 和 ESP-IDF 两种开发工具和框架,提供了灵活的开发选择,你可以根据项目需求和个人习惯选择适合的开发工具。
开发工具介绍
这两种开发方式各有其优势,开发者可以根据自身需求和技能水平进行选择。Arduino 适合初学者和非专业人士,因其简单易学、上手快。而对于有专业背景或对性能要求较高的开发者,ESP-IDF 是更好的选择,它提供了更高级的开发工具和更强的控制能力,适用于复杂项目的开发。
器件准备
- ESP32-Touch-LCD-3.5 x1
- SD卡 x1
- USB线 type A公口 转 Type C公口 x1
Arduino开发
本章介绍 Arduino 环境搭建,包括 Arduino IDE、ESP32板管理、相关库的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。
环境搭建
下载和安装 Arduino IDE
- 点击访问Arduino官网,选择对应的系统和系统位数下载。

- 运行安装程序,全部默认安装即可。
安装 ESP32 开发板
- ESP32相关主板在Arduino IDE使用,须先安装“esp32 by Espressif Systems”开发板的软件包
- 根据板安装要求进行安装,一般推荐“在线安装”, 若在线安装失败,则使用“离线安装”
- 安装教程,详见:Arduino 板管理教程
| 板名称 | 板安装要求 | 版本号要求 |
|---|---|---|
| esp32 by Espressif Systems | “离线”安装/“在线”安装 | ≥3.2.0 |
安装库
- 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装。若库安装要求离线安装,则必须使用提供的库文件
对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。 - ESP32-Touch-LCD-3.5 库文件存放于示例程序中,点击此处跳转:ESP32-Touch-LCD-3.5示例程序
- 库安装教程,详见:Arduino 库管理教程
| 库名称 | 说明 | 版本 | 库安装要求 |
|---|---|---|---|
| lvgl | LVGL图形化库 | v8.4.0 或 v9.3.0 | “在线”安装 |
| GFX_Library_for_Arduino | GFX图形化库 | v1.6.0 | “在线”安装 |
| XPowersLib | 电源管理库 | v0.2.9 | “在线”安装 |
| SensorLib | 传感器驱动库 | v0.3.1 | “在线”安装 |
| ESP32-audioI2S-master | 音频处理库 | v3.4.0 | “在线”安装 |
| TCA9554 | 扩展IO库 | v0.1.2 | “在线”安装 |
| OneButton | 按键库 | v2.6.1 | “在线”安装 |
运行第一个 Arduino 程序
示例程序
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_i2s_audio | 读取SD卡的音频文件,并播放 | ESP32-audioI2S-master |
| 02_axp2101_example | 打印电源管理芯片的数据 | XPowersLib |
| 03_button_example | 按键测试 | OneButton |
| 04_es8311_example | 录音一段时间,并播放 | es8311 |
| 05_pcf85063_example | 打印RTC获取的数据 | SensorLib |
| 06_tca9554_example | 扩展io测试 | TCA9554 |
| 07_sd_card_test | 测试SD卡的读写 | --- |
| 08_gfx_helloworld | 屏幕上显示HelloWorld | GFX_Library_for_Arduino、TCA9554 |
| 09_lvgl_arduino_v8 | lvgl v8.4.0 示例程序 | GFX_Library_for_Arduino、TCA9554、lvgl、SensorLib |
| 10_lvgl_arduino_v9 | lvgl v9.3.0 示例程序 | GFX_Library_for_Arduino、TCA9554、lvgl、SensorLib |
| 11_bt_music_receiver_arduino_i2s | 蓝牙音乐播放示例 | ESP32-A2DP、GFX_Library_for_Arduino、TCA9554、OneButton |
- ESP32-Touch-LCD-3.5 Arduino 工程参数设置
01_i2s_audio
【程序说明】
本示例演示ESP32-Touch-LCD-3.5读取SD卡的音频文件并使用喇叭播放,支持MP3、AAC、WAV等格式。
【准备工作】
- 将SD卡插入电脑
- 在SD卡根目录新建文件夹 music
- 把本工程下data文件夹里面的1.mp3拷贝到SD卡的music文件夹里
- 将SD卡插入 ESP32-Touch-LCD-3.5
【代码分析】
- 初始化
es8311_codec_init();
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI, SD_CS);
if (!SD.begin(SD_CS)) {
esp_rom_printf("Card Mount Failed\n");
while (1) {
};
}
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
audio.setVolume(21); // 0...21
- 设置播放的音频文件
audio.connecttoFS(SD, "music/1.mp3");
【运行效果】
- 播放音频文件,屏幕无现象
02_axp2101_example
【程序说明】
03_button_example
【程序说明】
本示例演示如何使用 OneButton 库读取 BOOT、PWM、PLUS按键的单击、双击和长按等状态,并通过串口打印。
【代码分析】
- 绑定回调函数
button1.attachClick(click1); button1.attachDoubleClick(doubleclick1); button1.attachLongPressStart(longPressStart1); button1.attachLongPressStop(longPressStop1); button1.attachDuringLongPress(longPress1);
04_es8311_example
【程序说明】
本示例演示使用ESP32-Touch-LCD-3.5驱动ES8311音频编解码器,实现音频录制及回放功能。
【代码分析】
- 初始化
Wire.begin(I2C_SDA, I2C_SCL); es8311_codec_init(); setupI2S();
- 音频录制5s,并播放录制的内容
wav_buffer = i2s.recordWAV(5, &wav_size);
delay(1000);
Serial.println("I2S playWAV");
i2s.playWAV(wav_buffer, wav_size);
【运行效果】
- 屏幕无现象
- 按下ESP32-Touch-LCD-3.5的RST按键进入音频录制状态,5s后播放录制的内容。
05_pcf85063_example
【程序说明】
本实例演示ESP32-Touch-LCD-3.5驱动PCF85063,时间和日期的设置与获取。
【代码分析】
- 初始化
// Try to initialize the RTC module using I2C with specified SDA and SCL pins
if (!rtc.begin(Wire, SENSOR_SDA, SENSOR_SCL)) {
Serial.println("Failed to find PCF85063 - check your wiring!");
// Enter an infinite loop to halt the program
while (1) {
delay(1000);
}
}
- 设置时间、日期
rtc.setDateTime(year, month, day, hour, minute, second);
- 获取时间、日期
RTC_DateTime datetime = rtc.getDateTime();
06_tca9554_example
【程序说明】
07_sd_card_test
【程序说明】
08_gfx_helloworld
【程序说明】
本示例演示 ESP32-Touch-LCD-3.5 使用GFX_Library_for_Arduino库驱动屏幕并在屏幕上显示HelloWorld
【代码分析】
- 配置屏幕接口以及屏幕的分辨率等
Arduino_DataBus *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 23 /* MOSI */, 19 /* MISO */); Arduino_GFX *gfx = new Arduino_ST7796(bus, GFX_NOT_DEFINED /* RST */, 0 /* rotation */, true /* IPS */);
09_lvgl_example_v8
【程序说明】
10_lvgl_example_v9
【程序说明】
11_bt_music_receiver_arduino_i2s
【程序说明】
ESP-IDF开发
本章介绍 ESP-IDF 环境搭建,包括 Visual Studio、Espressif IDF插件的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。
环境搭建
下载和安装 Visual Studio
- 打开VScode官网的下载页面,选择对应系统和系统位数进行下载

- 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项
- 第一二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
- 第三项开启后,选择打开方式时,可以直接选择VSCode
安装Espressif IDF插件
- 国内部分区域安装,一般推荐“在线安装”, 若因网络因素无法在线安装,则使用“离线安装”。
- 安装Espressif IDF插件教程,详见:安装Espressif IDF插件教程
- 需要安装 ESP-IDF V5.4.0 或更高版本。
运行第一个 ESP-IDF 程序
新建项目
创建例程
- 使用快捷键 F1 ,输入esp-idf:show examples projects
- 选择你当前的IDF版本
- 以Hello world例程为例
①选择对应例程
②其readme会说明该例程适用于什么芯片(下文有介绍例程怎么使用与文件结构,这里略)
③点击创建例程
- 选择放置例程的路径,要求无例程同名文件夹
修改COM口
- 此处显示使用对应的COM口,点击可以修改对应COM口
- 请根据设备对应COM口进行选择(可通过设备管理器查看)
- 若出现下载失败的情况请点击复位按键1秒以上或进入下载模式,等待 PC 端重新识别到设备后再次下载
修改驱动对象
- 选择我们需要驱动的对象,也就是我们的主芯片为ESP32S3
- 选择openocd的路径,这里对我们没有影响,所以我们随便选择一个即可
其余状态栏简介
①.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,常被称作小火苗
编译、烧录、串口监视
- 点击我们之前介绍的 编译,烧录,打开串口监视器按键
- 编译可能需要较长时间才能完成,尤其是在第一次编译时
- 在此过程中,ESP-IDF可能会占用大量CPU资源,因此可能会导致系统卡顿
- 若是新工程首次烧录程序,将需要选择下载方式,选择 UART
- 后续也可在 下载方式 处进行修改(点击即可弹出选项)
- 因为板载自动下载电路,无需手动操作即可自动下载
- 下载成功后,自动进入串口监视器,可以看到芯片输出对应的信息并提示10S后重启
使用IDF 示例程序
软件内部打开
- 打开 VScode 软件,选择文件夹打开示例
- 选择提供的 ESP-IDF 下的示例,点击选择文件(位于 示例程序/Demo/ESP-IDF 路径下)
软件外部打开
- 正确选择工程目录,打开工程,否则会影响后续程序编译烧录
- 连接设备后,选择好COM口和型号,点击下方编译并烧录即可实现程序控制
ESP-IDF工程项目详解
- 组件(Component):ESP-IDF中的组件是构建应用的基本模块,每个组件通常是相对独立的代码库或库,能实现特定的功能或服务,可以被应用程序或是其他组件重复使用,类似于Python开发中的库的定义。
- 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语言基础,引入库是通过
CMakeLists.txt进行配置和定义的。 - CmakeLists.txt的作用:ESP-IDF编译时编译工具
CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。编译过程如:
- 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语言基础,引入库是通过
修改COM口
- 此处显示使用对应的COM口,点击可以修改对应COM口
- 请根据设备对应COM口进行选择(可通过设备管理器查看)
- 若出现下载失败的情况请点击复位按键1秒以上或进入下载模式,等待 PC 端重新识别到设备后再次下载
修改驱动对象
- 选择我们需要驱动的对象,下图以主芯片为ESP32S3 以例(用户根据手头实物板子的主控芯片对应设置)
- 选择openocd的路径,这里对我们没有影响,所以我们随便选择一个即可
其余状态栏简介
①.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,常被称作小火苗
编译、烧录、串口监视
- 点击我们之前介绍的 编译,烧录,打开串口监视器按键
- 编译可能需要较长时间才能完成,尤其是在第一次编译时
- 在此过程中,ESP-IDF可能会占用大量CPU资源,因此可能会导致系统卡顿
- 若是新工程首次烧录程序,将需要选择下载方式,选择 UART
- 后续也可在 下载方式 处进行修改(点击即可弹出选项)
- 因为板载自动下载电路,无需手动操作即可自动下载
- 下载成功后,自动进入串口监视器,可以看到芯片输出对应的信息并提示10S后重启
使用IDF 示例程序
软件内部打开
- 打开 VScode 软件,选择文件夹打开示例
- 选择提供的 ESP-IDF 下的示例,点击选择文件(位于 示例程序/Demo/ESP-IDF 路径下)
软件外部打开
- 正确选择工程目录,打开工程,否则会影响后续程序编译烧录
- 连接设备后,选择好COM口和型号,点击下方编译并烧录即可实现程序控制
ESP-IDF工程项目详解
- 组件(Component):ESP-IDF中的组件是构建应用的基本模块,每个组件通常是相对独立的代码库或库,能实现特定的功能或服务,可以被应用程序或是其他组件重复使用,类似于Python开发中的库的定义。
- 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语言基础,引入库是通过
CMakeLists.txt进行配置和定义的。 - CmakeLists.txt的作用:ESP-IDF编译时编译工具
CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。编译过程如:
- 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语言基础,引入库是通过
示例程序
| 示例程序 | 基础例程说明 |
|---|---|
| 01_factory | 综合示例程序 |
| 02_axp2101_example | 打印电源管理芯片的数据 |
| 03_button_power_save | 按键和低功耗模式测试 |
| 04_pcf85063_example | 打印RTC获取的数据 |
| 05_tca9554_example | 拓展IO测试 |
| 06_sd_card_test | SD Card 读写测试 |
| 07_lvgl_example | lvgl 示例 |
01_factory
【程序说明】
本示例演示是ESP32-Touch-LCD-3.5的综合示例,也是出厂默认烧录的示例。
【代码分析】
- 初始化
esp_i2c_port_init(&i2c_bus_handle);
esp_spi_port_init(LCD_BUFFER_SIZE);
esp_sdcard_port_init();
io_expander_init();
esp_3inch5_display_port_init(&io_handle, &panel_handle, LCD_BUFFER_SIZE);
esp_3inch5_touch_port_init(&touch_handle, i2c_bus_handle, EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES, EXAMPLE_DISPLAY_ROTATION);
esp_axp2101_port_init(i2c_bus_handle);
vTaskDelay(pdMS_TO_TICKS(200));
esp_es8311_port_init(i2c_bus_handle);
esp_pcf85063_port_init(i2c_bus_handle);
esp_wifi_port_init("WSTEST", "waveshare0755");
esp_3inch5_brightness_port_init();
esp_3inch5_brightness_port_set(80);
lv_port_init();
02_axp2101_example
03_button_power_save
【程序说明】
04_pcf85063_example
05_tca9554_example
【程序说明】
06_sd_card_test
【程序说明】
本示例演示了 ESP32-Touch-LCD-3.5 测试SD卡的读写功能
【硬件连接】
- 将板子接入电脑
- 将Micro SD卡插入卡槽(SD卡需要格式化为FAT32)
【代码分析】
- SPI初始化
spi_bus_config_t bus_cfg = {
.mosi_io_num = PIN_NUM_MOSI,
.miso_io_num = PIN_NUM_MISO,
.sclk_io_num = PIN_NUM_CLK,
.quadwp_io_num = -1,
.quadhd_io_num = -1,
.max_transfer_sz = 4000,
};
ret = spi_bus_initialize(host.slot, &bus_cfg, SDSPI_DEFAULT_DMA);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to initialize bus.");
return;
}
- SD卡初始化,并挂载
sdspi_device_config_t slot_config = SDSPI_DEVICE_CONFIG_DEFAULT();
slot_config.gpio_cs = PIN_NUM_CS;
slot_config.host_id = host.slot;
ESP_LOGI(TAG, "Mounting filesystem");
ret = esp_vfs_fat_sdspi_mount(mount_point, &host, &slot_config, &mount_config, &card);
07_lvgl_example
【程序说明】
本示例演示了 ESP32-Touch-LCD-3.5 运行lvgl示例程序(支持lvgl v8 和 lvgl v9)
【准备工作】
- 默认使用的 LVGL 版本为 v9.3.0。如需更换版本,请修改 main/idf_component.yml 文件中的 LVGL 配置,例如将其改为 lvgl/lvgl:^8.4.0。
【代码分析】
- 初始化
app_i2c_init();
app_io_expander_init();
/* LCD HW initialization */
ESP_ERROR_CHECK(app_lcd_init());
/* Touch initialization */
ESP_ERROR_CHECK(app_touch_init());
/* LVGL initialization */
ESP_ERROR_CHECK(app_lvgl_init());
小智AI应用
- 参考此教程:小智AI应用参考教程
Flash固件的烧录与擦除
- 当前示例程序有提供测试固件,可通过直接烧录测试固件来测试板载设备功能正常与否
- bin文件路径:
..\ESP32-Touch-LCD-3.5-Demo\Firmware
资料
原理图
示例程序
数据手册
ESP32
其他器件
- PCF85063 datasheet(英文)
- AXP2101 datasheet(英文)
- ES8311 datasheet(英文)
- ES8311 UserGuide(英文)
- ST7796S datasheet(英文)
- FT6336U datasheet(英文)
软件
其他资料链接
FAQ
最大支持702530大小的电池: 70 表示电池厚度约为 7.0 mm , 25 表示电池宽度约为 25 mm , 30 表示电池长度约为 30 mm
该产品板载ES8311音频编解码芯片,板载扬声器、贴片麦克风。可实现语音对话功能;
目前已经接入小智ai
这种情况由于程序崩溃,导致USB无法正常工作,可按住BOOT按键再按RST按键,此时模块可进入下载模式烧录固件(程序)即可解决该情况。
Arduino IDE中,首次编译程序是将所有的依赖包都加载编译,所以首次编译任务多,慢属于正常情况,耐心等待即可
此款产品板载AXP2101,可以测量各类电池数据,如:芯片温度、是否充电、是否接入电源、充电状态、电池电压、充电电压、电池电量等
此款产品核心芯片为ESP32-D0WDR2-V3,支持低功耗蓝牙和经典蓝牙,可作为蓝牙音响或连接蓝牙耳机,板载贴片天线,天线增益已调节至最优。
屏幕显示芯片:ST7796
屏幕触摸芯片:FT6336

























