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

产品介绍

产品简介

ESP32-S3-Touch-LCD-4.3B 是一款微雪 (Waveshare) 设计的低成本,高性能的微控制器开发板。其支持 2.4GHz WiFi 和 BLE 5,集成大容量 Flash 和 PSRAM,板载 4.3 英寸宽电容触摸LCD屏,可流畅运行 LVGL 等 GUI 界面程序;结合多种外设接口(如:CAN、I2C和RS485等接口),快速开发 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 点触控,支持中断
  • 板载 CAN、RS485、I2C 接口和 Micro SD 卡座等,集成全速 USB
  • 支持灵活时钟,模块电源单独设置等精准控制,实现多场景低功耗模式

资源简介


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 英寸屏幕接线端子
   连接液晶显示排线

9、CAN 和 RS485 终端电阻开关
   总线的平衡电阻开关,默认关闭

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、CAN 接口
   CAN兼容2.0规范

16、RS485 接线端子
    支持485总线通信

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

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

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

接口说明

  • LCD 接口:连接液晶排线的接口
ESP32-S3LCD简介
GPIO0G3绿色数据第三位
GPIO1R3红色数据第三位
GPIO2R4红色数据第四位
GPIO3VSYNC竖向同步信号
GPIO5DE数据使能信号
GPIO7PCLK时钟信号
GPIO10B7蓝色第七位
GPIO14B3蓝色第三位
GPIO17B6蓝色第六位
GPIO18B5蓝色第五位
GPIO21G7绿色第七位
GPIO38B4蓝色第四位
GPIO39G2绿色第二位
GPIO40R7红色第七位
GPIO41R6红色第六位
GPIO42R5红色第五位
GPIO45G4绿色第四位
GPIO46HSYNC横向同步信号
GPIO47G6绿色第六位
GPIO48G5绿色第五位
CH422GLCD-
EXIO2DISP背光使能引脚


  • 触摸屏接口:用于连接触摸排线的接口
ESP32-S3Touch简介
GPIO4TP_IRQ触摸中断引脚
GPIO8TP_SDA触摸数据引脚
GPIO9TP_SCL触摸时钟引脚
CH422GTouch-
EXIO1TP_RST触摸复位引脚


  • USB 接口:用于供电跟烧录使用
ESP32-S3USB简介
GPIO19USB_DN数据线D-
GPIO20USB_DP数据线D+


  • TF卡接口:用于连接TF卡的接口,引脚连接见下表。
ESP32-S3TF简介
GPIO11MOSITF卡输入引脚
GPIO12SCKTF卡时钟引脚
GPIO13MISOTF卡输出引脚
CH422GTF-
EXIO4SD_CSTF卡使能引脚,低电平有效


  • RS485 接口:开发板板载 RS485 接口,可直连设备通信,电路收发模式自动切换
ESP32-S3RS485简介
GPIO43RS485_RXD数据输入
GPIO44RS485_TXD数据输出


  • CAN 接口:实现 CAN 总线网络的收发控制、数据分析、采集和监控
ESP32-S3CAN简介
GPIO15CANTX数据输出
GPIO16CANRX数据输入


  • RTC 接口:板载PCF85063芯片,可以提供时钟跟日历信息
ESP32-S3RTC简介
GPIO8RTC_SDARTC数据引脚
GPIO9RTC_SCLRTC时钟引脚


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


  • 隔离IO 接口:隔离IO是由数字输出、数字输入跟输入信号公共端组成,IO电平可达5~36V
CH422GDI/DO简介
EXIO0DI0数字输入0
EXIO5DI1数字输入1
OD0DO0数字输出0
OD1DO1数字输出1


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

产品尺寸


产品参数

基础参数
处理器高性能 Xtensa 32 位 LX7 双核处理器,主频高达 240MHz
Wifi/蓝牙支持 2.4 GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth 5 (LE),板载天线
Flash16MB Flash
PSRAM8MB PSRAM
供电范围TypeC 5V / DC 7-36V
屏幕参数
分辨率800 x 480
显示接口RGB
显示面板IPS
可视角度160°
屏幕亮度550 Cd/m²
触摸类型电容
触摸面板钢化玻璃
外设接口
通信接口CAN、RS485、I2C、USB
数字输入5~36V,双向光耦隔离,支持无源和有源开关量输入
数字输出5~36V,光耦隔离,输出采用大电流三极管,灌电流可达 450mA
其它
功耗5V 450mA
操作温度0℃ ~ 65℃
产品尺寸 (L×W)常规版:112.4×75.1mm
带外壳版:116.3×79mm


使用说明

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

开发工具介绍


Arduino IDE

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


ESP-IDF

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


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

器件准备

  • ESP32-S3-Touch-LCD-4.3B x1
  • SD卡 x1
  • USB线 type A公口 转 Type C公口 x1
  • USB转RS485双向转换器 x1
  • USB 转 CAN 适配器分析仪 x1


注意事项

  • 使用时注意 PCB 天线区域,避免其它金属,塑料件贴合 PCB 天线
  • TF 卡使用 SPI 通信,注意 SD_CS 引脚需要由 CH422G 的 EXIO4 驱动
  • 开发板使用 3.5mm的接线端子引出 CAN,I2C,RS485和隔离IO等外设引脚
  • CAN 和 RS485 外设默认不使用开关连接 120 欧姆电阻,可选 ON 打开终端电阻连接
  • 4.3inch 屏幕占用绝大多数 GPIO,开发板使用 CH422G 芯片扩展 IO,用于复位,关闭打开背光等
  • 隔离io是通过CH422G去控制的,具体使用可以参考IO_Test示例,了解驱动原理,可以参考ESP32-S3-Touch-LCD-4.3B示例程序或者CH422G数据手册
  • 开发板使用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 以下
  • 板子的CH422G跟触摸占用了如下的从机地址,请勿使用相同地址的I2C设备:
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
10: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
20: 20 21 22 23 24 25 26 27 -  -  -  -  -  -  -  -
30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
40: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
50: -  51 -  -  -  -  -  -  -  -  -  -  -  -  5d -
60: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
70: -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
在操作前,建议先浏览目录,快速了解文档结构。为顺利操作,请仔细阅读FAQ,提前了解可能的问题。文档中所有资料均提供超链接,方便下载。

Arduino开发

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

环境搭建

下载和安装 Arduino IDE

  • 点击访问Arduino官网,选择对应的系统和系统位数下载。Arduino IDE的版本需要≥1.8,安装的路径不能出现中文,否则编译时会出现错误。

  • 运行安装程序,全部默认安装即可。
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问Arduino-esp32环境搭建参考

安装 Arduino-ESP32

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

安装库

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

运行第一个 Arduino 程序

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

新建工程

  • 运行Arduino IDE,选择 File -> New Sketch

  • 输入代码:
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,点击保存

编译和烧录程序

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

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

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


  • 编译并上传程序:

①. 编译程序;②. 编译并下载程序;③. 下载成功。

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


示例程序

  • ESP32-S3-Touch-LCD-4.3B 示例程序
示例程序基础例程说明依赖库
01_I2C_Test测试I2C座子-
02_RS485_Test测试RS485座子-
03_SD_Test测试SD卡座-
04_RTC_TestRTC时钟跟RTC中断-
05_IO_Test测试隔离IOESP32_IO_Expander,ESP32_Display_Panel
06_TWAItransmit测试CAN卡座-
07_TWAIreceive测试CAN卡座-
08_DrawColorBar测试RGB屏幕ESP32_Display_Panel
09_lvgl_Porting测试RGB触摸屏幕LVGL,ESP32_Display_Panel
  • esp32版本号为3.0.6以上时,ESP32-S3-Touch-LCD-4.3B 支持直接选择型号,直接选择型号后,部分参数默认不用修改
    • 以ESP32-S3-LCD-1.69为例


折叠

01_I2C_Test

【硬件连接】


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

【代码分析】


  • loop() :

loop()函数是程序的主要循环部分,其核心功能是扫描 I2C 总线上的设备。
首先定义了用于存储错误代码、设备地址和记录找到设备数量的变量。
然后通过一个循环从地址 0x01  0x7f 遍历可能的 I2C 设备地址。对于每个地址,先使用 Wire.beginTransmission(address) 开始向特定地址的设备发起传输,再使用 Wire.endTransmission() 结束传输并获取错误代码。
如果错误代码为 0 ,表示在该地址上找到了一个 I2C 设备,打印设备地址并增加设备数量的计数。如果错误代码不是 2 (表示设备未响应),则打印错误代码和对应的地址。
最后,如果没有找到任何 I2C 设备,打印相应的消息,并使用 delay(5000) 使程序暂停 5 秒后再次进行扫描。

【代码烧录】


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


  • 烧录代码

【运行效果】


  • 串口监视器打印I2C总线上的设备地址


折叠

02_RS485_Test

【硬件连接】



【代码分析】


  • setup() :

setup 函数主要用于初始化串口通信
使用 RS485.begin 函数初始化串口 Serial1 ,设置波特率、数据格式以及指定接收和发送引脚,然后通过循环检查确保串口初始化成功。

  • loop()

loop 函数是程序主循环部分,主要功能是实现简单的 485 通信数据回传
通过检查串口是否有数据可用,若有数据则读取一个字节并立即发送回去,实现将接收到的 485 数据原封不动地回传的功能。

【代码烧录】


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

  • 烧录代码

【运行效果】


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


03_SD_Test

【硬件连接】


  • 使用USB线把板子接入电脑
  • 将SD卡插入板子

【代码分析】


  • setup() :
  • setup 函数主要进行了一系列的初始化操作和对 SD 卡的测试
    • 首先,它初始化串口通信,设置波特率为 115200。然后创建一个 ESP_IOExpander_CH422G 对象来管理扩展的 IO 引脚,初始化并设置多个引脚为输出模式,控制诸如触摸屏复位(TP_RST)、LCD 背光(LCD_BL)、LCD 复位(LCD_RST)、SD 卡片选(SD_CS)和 USB 选择(USB_SEL)等引脚的状态。
    • 接着,使用扩展的 GPIO 引脚来处理 SD 卡,初始化 SPI 通信并尝试挂载 SD 卡。如果挂载失败,会输出错误信息并返回;如果成功挂载,会检测 SD 卡的类型并输出,还会输出 SD 卡的大小信息。
    • 之后,进行一系列文件系统操作的测试,包括列出目录内容、创建目录、删除目录、写入文件、追加内容到文件、读取文件、删除文件、重命名文件以及测试文件输入输出等操作,并输出 SD 卡的总空间和已使用空间大小。

【代码烧录】


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

  • 烧录代码

【运行效果】


  • ESP32-S3-Touch-LCD-4.3B会识别SD卡的类型和大小,再对进行文件的增删改查


折叠

04_RTC_Test

【硬件连接】


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

【代码分析】


  • setup() :

setup 函数首先初始化串口通信,然后初始化 PCF85063A 实时时钟模块,设置当前时间和闹钟时间并启用闹钟,同时将闹钟中断引脚设置为上拉输入模式并附加中断处理函数。

  • loop()

loop 函数不断读取当前时间并打印,当闹钟触发时(通过中断检测),重置闹钟标志并可选择重新启用闹钟,同时打印闹钟响起的消息,最后延迟 1 秒钟以不断循环检测时间和闹钟状态。

【代码烧录】


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

  • 烧录代码

【运行效果】


  • 运行效果:ESP32-S3-Touch-LCD-4.3B会设置时间,启动闹钟,然后读取当前时间,等待进入闹钟
    • 触发闹钟:The alram clock goes off.


折叠

05_IO_Test

【硬件连接】


  • 使用USB线把板子接入电脑
  • DO0跟DI0相接,DO1跟DI1相接,如图


【代码分析】


  • waveshare_io_test() :

首先,它打印出 “Initialize IO expander” 表示开始初始化 IO 扩展器。接着创建一个 ESP_IOExpander_CH422G 实例来代表 IO 扩展器,初始化并开始其操作。然后将 OC 引脚设置为推挽输出模式,将 IO0 - IO7 引脚设置为输入模式。同时设置输出引脚 DO0 和 DO1 的初始状态为高电平。
在一个无限循环中,交替设置 DO0 和 DO1 的状态。每次设置后,通过读取输入引脚 DI0 和 DI1 的状态来判断是否满足特定条件,如果满足条件(即 expander->multiDigitalRead(DI0_mask | DI1_mask) 的值与预期相符)则增加变量 num 的值。当 num 达到 2 时退出循环,否则将 num 重置为 3 并再次循环尝试。整个过程旨在测试 IO 扩展器的输入输出功能以及它们之间的交互。

【代码烧录】


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

  • 烧录代码

【运行效果】


  • 串口打印屏幕刷新率,屏幕亮起。
    • 测试通过亮绿屏,测试不通过亮红屏
    • 如果接线正确,依然亮红屏,可能是USB供电不足,可以尝试更换一个大电流的电源,比如5V/1A


折叠

06_TWAItransmit

【硬件连接】


  • 使用USB线把板子接入电脑
  • 开发板连接USB-CAN-A,如图


【代码分析】


  • waveshare_twai_transmit() :
  • waveshare_twai_transmit()函数主要主要负责处理 TWAI(类似于 CAN 总线的接口)的传输和警报处理
    • 首先,它检查是否有警报发生。通过调用 twai_read_alerts 读取触发的警报,并获取 TWAI 的状态信息到 twai_status_info_t 结构体中。然后根据触发的不同警报进行相应的处理,例如如果触发了错误被动警报、总线错误警报、传输失败警报或传输成功警报,分别打印相应的消息并输出一些状态信息,如总线错误计数、待发送消息数量、传输错误计数器和传输失败计数等。
    • 接着,它获取当前时间(以毫秒为单位),并检查是否到了发送消息的时间。如果当前时间与上一次发送消息的时间之差大于等于设定的传输时间间隔 TRANSMIT_RATE_MS ,则更新上一次发送时间为当前时间,并调用 send_message 函数发送一条消息。 send_message 函数配置并排队一个包含特定标识符、数据长度和数据内容的消息进行传输,如果排队成功则打印成功消息,否则打印失败消息,并在发送后清空消息数据数组。

【代码烧录】


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

  • 烧录代码

【运行效果】


  • 串口打印CAN消息发送成功,配置USB-CAN-A_TOOL后启动可看到ESP32-S3-Touch-LCD-4.3B发送的CAN消息。


折叠

07_TWAIreceive

【硬件连接】


  • 使用USB线把板子接入电脑
  • 开发板连接USB-CAN-A,如图


【代码分析】


  • waveshare_twai_receive() :
    • 首先读取触发的警报并获取状态信息,根据不同警报情况进行相应处理,如打印错误被动、总线错误、接收队列已满等警报信息及相关计数。
    • 当接收数据警报触发时,循环接收消息并调用handle_rx_message函数处理,该函数判断消息格式并打印消息标识符和数据内容(非远程传输请求时),实现了对 TWAI 总线上接收消息的有效处理和警报响应。

【代码烧录】


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

  • 烧录代码

【运行效果】


  • ESP32-S3-Touch-LCD-4.3B等待USB-CAN-A_TOOL发送消息,如果接收成功,会将其打印到串口上。


折叠

08_DrawColorBar

【硬件连接】


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

【代码分析】


  • waveshare_lcd_init() :
    • 首先,打印 “Initialize IO expander” 表示开始初始化 IO 扩展器。创建一个 ESP_IOExpander_CH422G 实例,初始化并开始其操作。将 IO0 - IO7 引脚设置为输出模式,并将触摸屏复位引脚(TP_RST)和 LCD 复位引脚(LCD_RST)设置为高电平,同时关闭 LCD 背光(LCD_BL),等待 100 毫秒。
    • 接着,打印 “Create RGB LCD bus”,创建一个 RGB 面板总线对象 ESP_PanelBus_RGB ,配置其引脚、宽度、高度、RGB 时序频率和时序参数等,设置反弹缓冲区大小和显示活动低电平标志,然后开始面板总线操作。
    • 然后,打印 “Create LCD device”,创建一个 LCD 对象 ESP_PanelLcd ,传入面板总线对象、颜色位数和复位引脚等参数,进行初始化、复位和开始操作。如果定义了 EXAMPLE_ENABLE_PRINT_LCD_FPS ,则将 VSync 结束的回调函数附加到 LCD 对象上。
    • 最后,打印 “Draw color bar from top left to bottom right, the order is B - G - R”,调用 colorBarTest 函数在 LCD 上绘制颜色条,并打开 LCD 背光。

【代码烧录】


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

  • 烧录代码

【运行效果】


  • 串口打印log,屏幕亮起



折叠

09_lvgl_Porting

【硬件连接】


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

【代码分析】


  • setup() :

以 115200 的波特率初始化串口通信。接着创建并初始化 IO 扩展器,设置引脚模式和状态,进行 GT911 触摸屏初始化。然后创建并初始化面板设备,根据需要对 RGB 总线进行配置。之后初始化 LVGL,创建一个简单标签或可选择调用 LVGL 的示例或演示函数,并在最后释放互斥锁

  • loop()

仅打印 “IDLE loop” 并等待 1 秒钟,没有其他实质性操作。总体目的是搭建一个基于 LVGL 的用户界面环境。

【代码烧录】


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

  • 烧录代码

【运行效果】


  • 串口打印屏幕刷新率,屏幕亮起


【其他说明】


  • 在使用时出现屏幕漂移,请参考ESP官方FAQ
  • 在使用自己的ui程序时,出现内存不足,可以点击Tools选择更大的分区表

  • lvgl使用的版本是8.4,可以通过以下文档进行对LVGL的API查询跟使用

ESP-IDF开发

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

环境搭建

下载和安装 Visual Studio

  • 打开VScode官网的下载页面,选择对应系统和系统位数进行下载

  • 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项

    • 第一二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
    • 第三项开启后,选择打开方式时,可以直接选择VSCode
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问ESP-IDF环境搭建参考

安装Espressif IDF插件

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

运行第一个 ESP-IDF 程序

折叠
如果你刚入门学习ESP32和ESP-IDF,还不知道如何创建、编译、烧录和运行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 示例程序

下文以使用“ESP32-S3-LCD-1.47-Demo”为例介绍工程的两种打开方式及使用的一般步骤、ESP-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会根据索引导入每个所需要编译的内容。编译过程如:


修改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 示例程序

下文以使用“ESP32-S3-LCD-1.47-Demo”为例介绍工程的两种打开方式及使用的一般步骤、ESP-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会根据索引导入每个所需要编译的内容。编译过程如:


示例程序

  • ESP32-S3-Touch-LCD-4.3B 示例程序
示例程序基础例程说明
01_I2C_Test测试I2C座子
02_RS485_Test测试RS485座子
03_SD_Test测试SD卡座
04_RTC_TestRTC时钟跟RTC中断
05_IO_Test测试隔离IO
06_TWAItransmit测试CAN卡座
07_TWAIreceive测试CAN卡座
08_lvgl_Porting测试RGB触摸屏幕
  • 依赖库通过 idf component.yml 在编译时自动下载
折叠

01_I2C_Test

【硬件连接】


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

【代码分析】


  • app_main() :
    • 首先定义了与 I2C 相关的常量和变量,如日志标签、I2C 的 SDA 和 SCL 引脚以及端口号。
    • 接着,根据不同配置选项安装控制台 REPL 环境,用于用户交互。随后配置 I2C 总线,包括时钟源、端口、引脚和启用内部上拉电阻等,并初始化 I2C 主总线。
    • 之后注册一系列 I2C 工具命令,如设备检测、寄存器读写等操作的命令。还打印了使用说明,指导用户如何使用这些命令。
    • 最后启动控制台 REPL,允许用户通过命令行与应用程序交互,执行各种 I2C 操作,为用户提供了一种方便的方式通过命令行操作 I2C 总线。

【运行效果】


  • 烧录成功后,打开串口终端,输入命令后,摁回车即可运行:


  • 使用步骤如下:
  1. 使用` help `,检查所有支持的命令
  2. 使用` i2cconfig `配置你的I2C总线
  3. 使用` i2cdetect `来扫描总线上的设备
  4. 使用` i2cget `获取特定寄存器的内容
  5. 使用` i2cset `设置特定寄存器的值
  6. 使用` i2cdump `转储所有寄存器(实验)
折叠

02_RS485_Test

【硬件连接】



【代码分析】


  • echo_task() :
    • 首先配置了 UART 参数,包括波特率、数据位、奇偶校验位、停止位和硬件流控制等。
    • 然后安装 UART 驱动,设置 UART 引脚,并分配一个临时缓冲区用于接收数据。
    • 在一个无限循环中,从 UART 读取数据,将读取到的数据回写到 UART,并在有数据接收时记录日志信息。

【运行效果】


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


折叠

03_SD_Test

【硬件连接】


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

【代码分析】


  • waveshare_sd_card_init() :

这个函数主要用于初始化 SD 卡。首先初始化 I2C,然后通过 I2C 控制芯片拉低 SD 卡的 CS 引脚。接着配置 SD 卡的挂载选项,包括是否在挂载失败时格式化、最大文件数和分配单元大小等。之后初始化 SPI 总线,并使用配置好的 SPI 总线和挂载选项来挂载 SD 卡文件系统。如果挂载成功则返回ESP_OK,表示 SD 卡初始化完成。

  • waveshare_sd_card_test() :

这个函数用于测试 SD 卡的功能。首先打印已初始化的 SD 卡的信息。然后创建一个文件并写入数据,重命名该文件并读取重命名后的文件内容。接着格式化文件系统,检查文件在格式化后是否被删除。最后创建一个新文件并读取其内容,完成测试后卸载 SD 卡并释放 SPI 总线资源。

【运行效果】


  • 烧录成功后,串口会打印有关存储卡的信息,例如名称、类型、容量和支持的最大频率,再创建文件,写入文件,重命名文件,读取重命名文件:


折叠

04_RTC_Test

【硬件连接】


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

【代码分析】


  • app_main() :
    • 首先定义了用于存储当前时间的结构体和一些变量,包括闹钟中断标志等。
    • 接着初始化芯片,设置初始时间和闹钟时间,启用闹钟功能并初始化中断输入引脚及中断处理函数。在无限循环中,读取当前时间并转换为字符串后打印,当闹钟中断发生时,重置中断标志并可选择再次启用闹钟,同时打印闹钟响起的消息,循环中还进行了 1 秒钟的延迟。
    • 总体实现了简单的闹钟功能,通过对 PCF85063A 芯片的操作和中断处理来实现时间读取和闹钟响应。

【运行效果】


  • 烧录成功后会设置时间,启动闹钟,然后读取当前时间,等待进入闹钟
  • 串口终端会打印有关相关的信息


折叠

05_IO_Test

【硬件连接】


  • 使用USB线把板子接入电脑
  • DO0跟DI0相接,DO1跟DI1相接,如图


【代码分析】


  • app_main() :
    • 首先定义了一些变量用于 IO 测试和标志。
    • 在一个循环中对 CH422G 芯片进行 IO 测试,通过向芯片的 GPIO 输出不同的值,然后读取特定的两个 IO 引脚状态,判断是否符合预期。如果两次测试都成功,则表示 DI(输入)和 DO(输出)正常工作,输出相应信息并重置标志变量,跳出循环;如果测试失败次数达到 3 次,则输出失败信息并跳出循环。
    • 初始化 LCD 并获取显示对象
    • 调用函数运行自定义的 LVGL UI 演示
    • 进入一个无限循环,在循环中不断调用lv_timer_handler处理 LVGL 的任务,并延迟 10 毫秒以防止 CPU 过载。

【运行效果】


  • 测试通过亮绿屏,测试不通过亮红屏,串口助手也会显示对应的log:


  • 如果接线正确,依然亮红屏,可能是USB供电不足,可以尝试更换一个大电流的电源,比如5V/1A
折叠

06_TWAItransmit

【硬件连接】


  • 使用USB线把板子接入电脑
  • 开发板连接USB-CAN-A,如图


【代码分析】


  • waveshare_twai_transmit() :
    • 若驱动未安装,等待一段时间后返回失败状态
    • 读取触发的警报并获取 TWAI 状态信息
    • 根据不同警报类型打印相应日志信息,包括错误被动警报、总线错误警报、传输失败警报和传输成功警报,并打印相关状态信息
    • 判断是否到了发送消息的时间,如果是则发送消息并更新上一次发送时间

【运行效果】


  • 串口打印CAN消息发送成功,配置USB-CAN-A_TOOL后启动可看到ESP32-S3-Touch-LCD-4.3B发送的CAN消息。


  • 再观察USB-CAN-A_TOOL,即可看到ESP32-S3-Touch-LCD-4.3B发送的CAN消息


折叠

07_TWAIreceive

【硬件连接】


  • 使用USB线把板子接入电脑
  • 开发板连接USB-CAN-A,如图


【代码分析】


  • waveshare_twai_receive() :
    • 如果驱动未安装,则等待一段时间后返回失败状态
    • 读取触发的警报并获取 TWAI 的状态信息
    • 根据触发的不同警报类型打印相应的日志信息,包括错误被动警报、总线错误警报和接收队列满警报,并打印相关的状态信息
    • 如果接收数据警报被触发,则循环接收消息并调用handle_rx_message函数处理每个接收到的消息。最后返回成功状态

【运行效果】


  • ESP32-S3-Touch-LCD-4.3B等待USB-CAN-A_TOOL发送消息,如果接收成功,会将其打印到串口上


  • 如果出现以下错误,单击串口监视器并使用调试工具重新发送数据。(若按下复位, 有时也需要再单击串口监视器):


折叠

08_lvgl_Porting

【硬件连接】


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

【代码分析】


  • app_main() :
    • 初始化 Waveshare ESP32-S3 RGB LCD,然后可以选择开启或关闭屏幕背光。
    • 接着打印一条信息表示要显示 LVGL 的演示内容,由于 LVGL 的 API 不是线程安全的,所以先锁定互斥锁。
    • 然后可以选择运行不同的 LVGL 演示程序,如 lv_demo_stress  lv_demo_benchmark  lv_demo_music  lv_demo_widgets  example_lvgl_demo_ui 等。
    • 最后释放互斥锁。

【运行效果】


  • 烧录成功后,摁下复位按键,即可运行示例
  • 如果还是进一步提升帧率,可以参考此链接进行配置
  • RGB LCD驱动可以参考此链接
  • GT911驱动可以参考此链接
  • lvgl使用的版本是8.3,可以通过以下文档进行对LVGL的API查询跟使用

Flash固件的烧录与擦除


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

资料

原理图

工程图纸

示例程序

数据手册

ESP32-S3

其他器件

软件工具

Arduino

VScode

调试工具

其他资料链接

FAQ

问题:示例程序 RS485_Test 仅能发送数据无法接收,该如何解决?

RS485因为IDF版本问题会导致通信异常
ESP-IDF 环境:建议升级至 v5.5.2;
Arduino 环境:建议将esp32 package版本降低至 v3.0.7


问题:仅用宽电压(7-36V)供电时,是否还支持给接入 BAT 接口的锂电池充电?

支持


问题:ESP32-S3-Touch-LCD-4.3B CAN接收失败?

  • 重新启动UCANV2.0.exe中COM口,多按几次ESP32-S3-Touch-LCD-4.3B 复位键
  • 将串口调试助手上的“DTR”的勾选去掉


问题:ESP32-S3-Touch-LCD-4.3B 烧录RGB屏幕显示的Arduino程序后无反应?

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


问题:ESP32-S3-Touch-LCD-4.3B 烧录Arduino的RGB屏幕程序编译不通过、报错?

检查是否有安装库,请参考库安装步骤


问题:为什么库都是安装好的,烧录lvgl程序报错缺少lv_cong.h?

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


问题:为什么Arduino 成功烧录后,屏幕没显示

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

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


问题:为什么用Arduino IDE进行编译示例时,出现fatal error:esp_ memory_ utils.h:No such file or directory

请安装≥v3.0.2的Arduino esp32,可以解决此问题


问题:CAN通信可以使用调试工具发送连续帧吗?

可以的,还可以自定义连续帧的频率,当过高的频率使得电脑卡顿时,可能会导致总线错误


问题:ESP-IDF烧录失败怎么办?

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


问题:找不到AppData文件夹怎么处理?

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

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


问题:怎么查看com口?

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


问题:程序首次编译超级慢怎么办?

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


问题:程序烧录成功但是LCD无现象怎么解决?

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


问题:在使用 MAC 设备时,程序烧录失败?

安装MAC 驱动程序后重新烧录。


问题:如何使用SquareLine Studio设计界面


技术支持

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

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841


[教程导航]