ESP32-S3-Touch-LCD-5
| ||||||||||||||||||||
| ||||||||||||||||||||
产品介绍
产品简介
ESP32-S3-Touch-LCD-5 是一款微雪 (Waveshare) 设计的低成本,高性能的微控制器开发板。其支持 2.4GHz WiFi 和 BLE 5,集成大容量 Flash 和 PSRAM,板载 5 英寸宽电容触摸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
- 板载 5 英寸宽电容触摸屏,800 × 480 分辨率 或 1024 × 600 分辨率,65K 彩色
- 支持 I2C 接口控制电容触摸,5 点触控,支持中断
- 板载 CAN、RS485、I2C 接口和 Micro SD 卡座等,集成全速 USB
- 支持灵活时钟,模块电源单独设置等精准控制,实现多场景低功耗模式
版本选择
资源简介
1、 ESP32-S3-WROOM-1-N16R8 2、Micro SD 卡座 3、USB Type-C 接口 4、BOOT 按键 5、RESET 按键 6、光耦隔离 7、5英寸屏幕触摸接线端子 8、5英寸屏幕接线端子 9、CAN 和 RS485 终端电阻开关 10、电池连接开关 11、3.7V 单节锂电池 1.25 接口 |
12、指示灯 13、7-36V DC 供电 14、I2C 接口 15、CAN 接口 16、RS485 接线端子 17、数字输出 18、输入信号公共端 19、数字输入 20、VOUT 输出电压 |
21、 CS8501 22、PCF85063 23、AP3032KTR-G1 24、CH422G |
25、SP3485 26、TJA1051T/3/1J 27、SGM2212-3.3 28、可充放电电池 |
接口说明
- LCD 接口:连接液晶排线的接口
ESP32-S3 | LCD |
GPIO0 | G3 |
GPIO1 | R3 |
GPIO2 | R4 |
GPIO3 | VSYNC |
GPIO4 | TP_IRQ |
GPIO5 | DE |
GPIO7 | PCLK |
GPIO8 | TP_SDA |
GPIO9 | TP_SCL |
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 |
CH422G | LCD |
EXIO1 | TP_RST |
EXIO2 | DISP |
EXIO3 | LCD_RST |
- USB 接口:用于供电跟烧录使用
ESP32-S3 | USB |
GPIO19 | USB_DN |
GPIO20 | USB_DP |
- SD卡接口:用于连接SD卡的接口
ESP32-S3 | SD |
GPIO11 | MOSI |
GPIO12 | SCK |
GPIO13 | MISO |
CH422G | TF |
EXIO4 | SD_CS |
- RS485 接口:开发板板载 RS485 接口,可直连设备通信,电路收发模式自动切换
ESP32-S3 | RS485 |
GPIO43 | RS485_RXD |
GPIO44 | RS485_TXD |
- CAN 接口:实现 CAN 总线网络的收发控制、数据分析、采集和监控
ESP32-S3 | CAN |
GPIO15 | CANTX |
GPIO16 | CANRX |
- 隔离IO 接口:隔离IO是由数字输出、数字输入跟输入信号公共端组成,IO电平可达5~36V
CH422G | DI/DO |
EXIO0 | DI0 |
EXIO5 | DI1 |
OD0 | DO0 |
OD1 | DO1 |
- MX1.25 电池接口:开发板使用高效充放电管理芯片 CS8501 ,可将单节锂电池升压到 5V ,
目前充电电流为 580mA,用户可更换 R45 电阻更改充电电流,详情请查阅ESP32-S3-Touch-LCD-5 原理图
产品尺寸
使用说明
ESP32-S3-Touch-LCD-5 目前提供 Arduino IDE 和 ESP-IDF 两种开发工具和框架,提供了灵活的开发选择,你可以根据项目需求和个人习惯选择适合的开发工具。
开发工具介绍
这两种开发方式各有其优势,开发者可以根据自身需求和技能水平进行选择。Arduino 适合初学者和非专业人士,因其简单易学、上手快。而对于有专业背景或对性能要求较高的开发者,ESP-IDF 是更好的选择,它提供了更高级的开发工具和更强的控制能力,适用于复杂项目的开发。
器件准备
- ESP32-S3-Touch-LCD-5 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和隔离I/O等外设引脚
- CAN 和 RS485 外设默认不使用开关连接 120 欧姆电阻,可选 ON 打开终端电阻连接
- 5inch 屏幕占用绝大多数 GPIO,开发板使用 CH422G 芯片扩展 I/O,用于复位,关闭打开背光等
- 隔离i/o是通过CH422G去控制的,具体使用可以参考IO_Test示例,了解驱动原理,可以参考ESP32-S3-Touch-LCD-5示例程序或者数据手册
- 开发板使用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 性能说明,请参考文档。
- PH2.0 锂电池座子只支持单节 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: - - - - - - - - - - - - - - - -
Arduino开发
本章介绍 Arduino 环境搭建,包括 Arduino IDE、ESP32板管理、相关库的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。
环境搭建
下载和安装 Arduino IDE
- 点击访问Arduino官网,选择对应的系统和系统位数下载。Arduino IDE的版本需要≥1.8,安装的路径不能出现中文,否则编译时会出现错误。
- 运行安装程序,全部默认安装即可。
安装 Arduino-ESP32
- ESP32相关主板在Arduino IDE使用,须先安装“esp32 by Espressif Systems”库。
- 国内部分区域安装,一般推荐“在线安装”, 若在线安装失败,则使用“离线安装”。
- 安装 Arduino-ESP32教程,详见:Arduino 板管理教程
- ESP32-S3-Touch-LCD-5 开发板离线包,点击此处下载:esp32_package_3.0.2_arduino离线包
板名称 | 板安装要求 | 版本号要求 |
---|---|---|
ESP32-S3-Touch-LCD-5 | “离线”安装/“在线”安装 | 3.0.0 以上 |
安装库
- 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装。若库安装要求离线安装,则必须使用提供的库文件
对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。 - 库安装教程,详见:Arduino 库管理教程
- ESP32-S3-Touch-LCD-5 库文件存放于示例程序中,点击此处跳转: ESP32-S3-Touch-LCD-5示例程序
库名称 | 说明 | 版本 | 库安装要求 |
---|---|---|---|
ESP32_Display_Panel | ESP32 微控制器的特定显示面板控制库 | v0.1.4以上 | 可“在线”或“离线”安装 |
ESP32_IO_Expander | ESP32 的 I/O 扩展库 | v0.0.4以上 | 可“在线”或“离线”安装 |
lvgl | LVGL图形化库 | v8.4.0 | “离线”安装 |
lv_conf.h | LVGL配置文件 | —— | “离线”安装 |
运行第一个 Arduino 程序
新建工程
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,点击保存
示例程序
示例程序 | 基础例程说明 | 依赖库 |
---|---|---|
01_I2C_Test | 测试I2C座子 | - |
02_RS485_Test | 测试RS485座子 | - |
03_SD_Test | 测试SD卡座 | - |
04_RTC_Test | RTC时钟跟RTC中断 | - |
05_IO_Test | 测试隔离IO | ESP32_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-5 支持直接选择型号,直接选择型号后,部分参数默认不用修改
- 以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 秒后再次进行扫描。
02_RS485_Test
【代码分析】
setup()
:
setup
函数主要用于初始化串口通信
使用 RS485.begin
函数初始化串口 Serial1
,设置波特率、数据格式以及指定接收和发送引脚,然后通过循环检查确保串口初始化成功。
loop()
:
loop
函数是程序主循环部分,主要功能是实现简单的 485 通信数据回传
通过检查串口是否有数据可用,若有数据则读取一个字节并立即发送回去,实现将接收到的 485 数据原封不动地回传的功能。
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 卡的总空间和已使用空间大小。
- 首先,它初始化串口通信,设置波特率为 115200。然后创建一个
04_RTC_Test
【硬件连接】
- 使用USB线把板子接入电脑
【代码分析】
setup()
:
setup
函数首先初始化串口通信,然后初始化 PCF85063A 实时时钟模块,设置当前时间和闹钟时间并启用闹钟,同时将闹钟中断引脚设置为上拉输入模式并附加中断处理函数。
loop()
:
loop
函数不断读取当前时间并打印,当闹钟触发时(通过中断检测),重置闹钟标志并可选择重新启用闹钟,同时打印闹钟响起的消息,最后延迟 1 秒钟以不断循环检测时间和闹钟状态。
05_IO_Test
【代码分析】
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 扩展器的输入输出功能以及它们之间的交互。
【代码修改】
- 在 waveshare_io_port.h 中有一宏定义用于选择分辨率,值为 0 对应 800x480,值为 1 对应 1024x600,可依购买型号选择。
#define ESP_PANEL_USE_1024_600_LCD (0) // 0: 800x480, 1: 1024x600
06_TWAItransmit
【代码分析】
waveshare_twai_transmit()
:waveshare_twai_transmit()
函数主要主要负责处理 TWAI(类似于 CAN 总线的接口)的传输和警报处理
- 首先,它检查是否有警报发生。通过调用
twai_read_alerts
读取触发的警报,并获取 TWAI 的状态信息到twai_status_info_t
结构体中。然后根据触发的不同警报进行相应的处理,例如如果触发了错误被动警报、总线错误警报、传输失败警报或传输成功警报,分别打印相应的消息并输出一些状态信息,如总线错误计数、待发送消息数量、传输错误计数器和传输失败计数等。 - 接着,它获取当前时间(以毫秒为单位),并检查是否到了发送消息的时间。如果当前时间与上一次发送消息的时间之差大于等于设定的传输时间间隔
TRANSMIT_RATE_MS
,则更新上一次发送时间为当前时间,并调用send_message
函数发送一条消息。send_message
函数配置并排队一个包含特定标识符、数据长度和数据内容的消息进行传输,如果排队成功则打印成功消息,否则打印失败消息,并在发送后清空消息数据数组。
- 首先,它检查是否有警报发生。通过调用
07_TWAIreceive
【代码分析】
waveshare_twai_receive()
:- 首先读取触发的警报并获取状态信息,根据不同警报情况进行相应处理,如打印错误被动、总线错误、接收队列已满等警报信息及相关计数。
- 当接收数据警报触发时,循环接收消息并调用handle_rx_message函数处理,该函数判断消息格式并打印消息标识符和数据内容(非远程传输请求时),实现了对 TWAI 总线上接收消息的有效处理和警报响应。
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 背光。
- 首先,打印 “Initialize IO expander” 表示开始初始化 IO 扩展器。创建一个
【代码修改】
- 在 waveshare_lcd_port.h 中有一宏定义用于选择分辨率,值为 0 对应 800x480,值为 1 对应 1024x600,可依购买型号选择。
#define ESP_PANEL_USE_1024_600_LCD (0) // 0: 800x480, 1: 1024x600
09_lvgl_Porting
【硬件连接】
- 使用USB线把板子接入电脑
【代码分析】
setup()
:
以 115200 的波特率初始化串口通信。接着创建并初始化 IO 扩展器,设置引脚模式和状态,进行 GT911 触摸屏初始化。然后创建并初始化面板设备,根据需要对 RGB 总线进行配置。之后初始化 LVGL,创建一个简单标签或可选择调用 LVGL 的示例或演示函数,并在最后释放互斥锁
loop()
:
仅打印 “IDLE loop” 并等待 1 秒钟,没有其他实质性操作。总体目的是搭建一个基于 LVGL 的用户界面环境。
【代码修改】
- 在 ESP_Panel_Board_Custom.h 中有一宏定义用于选择分辨率,值为 0 对应 800x480,值为 1 对应 1024x600,可依购买型号选择。
#define ESP_PANEL_USE_1024_600_LCD (0) // 0: 800x480, 1: 1024x600
ESP-IDF开发
本章介绍 ESP-IDF 环境搭建,包括 Visual Studio、Espressif IDF插件的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。
环境搭建
下载和安装 Visual Studio
- 打开VScode官网的下载页面,选择对应系统和系统位数进行下载
- 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项
- 第一二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
- 第三项开启后,选择打开方式时,可以直接选择VSCode
安装Espressif IDF插件
- 国内部分区域安装,一般推荐“在线安装”, 若因网络因素无法在线安装,则使用“离线安装”。
- 安装Espressif IDF插件教程,详见:安装Espressif 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 示例程序
软件内部打开
- 打开 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_I2C_Test | 测试I2C座子 |
02_RS485_Test | 测试RS485座子 |
03_SD_Test | 测试SD卡座 |
04_RTC_Test | RTC时钟跟RTC中断 |
05_IO_Test | 测试隔离IO |
06_TWAItransmit | 测试CAN卡座 |
07_TWAIreceive | 测试CAN卡座 |
08_lvgl_Porting | 测试RGB触摸屏幕 |
- 依赖库通过 idf component.yml 在编译时自动下载
- IDF组件管理器更多学习链接
01_I2C_Test
【硬件连接】
- 使用USB线把板子接入电脑
【代码分析】
app_main()
:
- 首先定义了与 I2C 相关的常量和变量,如日志标签、I2C 的 SDA 和 SCL 引脚以及端口号。
- 接着,根据不同配置选项安装控制台 REPL 环境,用于用户交互。随后配置 I2C 总线,包括时钟源、端口、引脚和启用内部上拉电阻等,并初始化 I2C 主总线。
- 之后注册一系列 I2C 工具命令,如设备检测、寄存器读写等操作的命令。还打印了使用说明,指导用户如何使用这些命令。
- 最后启动控制台 REPL,允许用户通过命令行与应用程序交互,执行各种 I2C 操作,为用户提供了一种方便的方式通过命令行操作 I2C 总线。
02_RS485_Test
【代码分析】
echo_task()
:
- 首先配置了 UART 参数,包括波特率、数据位、奇偶校验位、停止位和硬件流控制等。
- 然后安装 UART 驱动,设置 UART 引脚,并分配一个临时缓冲区用于接收数据。
- 在一个无限循环中,从 UART 读取数据,将读取到的数据回写到 UART,并在有数据接收时记录日志信息。
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
【代码分析】
app_main()
:- 首先定义了一些变量用于 IO 测试和标志。
- 在一个循环中对 CH422G 芯片进行 IO 测试,通过向芯片的 GPIO 输出不同的值,然后读取特定的两个 IO 引脚状态,判断是否符合预期。如果两次测试都成功,则表示 DI(输入)和 DO(输出)正常工作,输出相应信息并重置标志变量,跳出循环;如果测试失败次数达到 3 次,则输出失败信息并跳出循环。
- 初始化 LCD 并获取显示对象
- 调用函数运行自定义的 LVGL UI 演示
- 进入一个无限循环,在循环中不断调用lv_timer_handler处理 LVGL 的任务,并延迟 10 毫秒以防止 CPU 过载。
【代码修改】
- 在 LCD.h 中有一宏定义用于选择分辨率,值为 0 对应 800x480,值为 1 对应 1024x600,可依购买型号选择。
#define ESP_PANEL_USE_1024_600_LCD (0) // 0: 800x480, 1: 1024x600
06_TWAItransmit
【代码分析】
waveshare_twai_transmit()
:- 若驱动未安装,等待一段时间后返回失败状态
- 读取触发的警报并获取 TWAI 状态信息
- 根据不同警报类型打印相应日志信息,包括错误被动警报、总线错误警报、传输失败警报和传输成功警报,并打印相关状态信息
- 判断是否到了发送消息的时间,如果是则发送消息并更新上一次发送时间
【运行效果】
- 串口打印CAN消息发送成功,配置USB-CAN-A_TOOL后启动可看到ESP32-S3-Touch-LCD-5发送的CAN消息。
- 再观察USB-CAN-A_TOOL,即可看到ESP32-S3-Touch-LCD-5发送的CAN消息
07_TWAIreceive
【代码分析】
waveshare_twai_receive()
:- 如果驱动未安装,则等待一段时间后返回失败状态
- 读取触发的警报并获取 TWAI 的状态信息
- 根据触发的不同警报类型打印相应的日志信息,包括错误被动警报、总线错误警报和接收队列满警报,并打印相关的状态信息
- 如果接收数据警报被触发,则循环接收消息并调用handle_rx_message函数处理每个接收到的消息。最后返回成功状态
【运行效果】
- ESP32-S3-Touch-LCD-5等待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
等。 - 最后释放互斥锁。
【代码修改】
- 在 lvgl_port.h 中有一宏定义用于选择分辨率,值为 0 对应 800x480,值为 1 对应 1024x600,可依购买型号选择。
#define ESP_PANEL_USE_1024_600_LCD (0) // 0: 800x480, 1: 1024x600
Flash固件的烧录与擦除
- 当前示例程序有提供测试固件,可通过直接烧录测试固件来测试板载设备功能正常与否
- bin文件在示例程序同级
build
文件夹下
资料
原理图
工程图纸
示例程序
数据手册
ESP32-S3
- ESP32-S3 数据手册(中文)
- ESP32-S3 技术参考手册(中文)
- ESP32-S3 数据手册(英文)
- ESP32-S3 技术参考手册(英文)
- ESP32-S3-WROOM-1数据手册(中文)
- ESP32-S3-WROOM-1数据手册(英文)
其他器件
软件工具
Arduino
VScode
调试工具
固件烧录工具
其他资料链接
FAQ
①重新启动UCANV2.0.exe中COM口,多按几次ESP32-S3-Touch-LCD-5 复位键
②将串口调试助手上的“DTR”的勾选去掉
若烧录代码后,屏幕无反应,可查看是否有在Arduino IDE -> Tools正确配置:选择对应 Flash(16MB) 和使能 PSRAM(8MB OPI))
安装库的路径出现中文导致检索不到库文件
可以参考以下步骤运行例程对比下:
- 运行程序前,进行库安装
- 安装库视频参考
- 运行和烧录ESP32-S3-Touch-LCD-5示例程序
请安装≥v3.0.2的Arduino esp32,可以解决此问题
可以的,还可以自定义连续帧的频率,当过高的频率使得电脑卡顿时,可能会导致总线错误
- 可将开发板设置为下载模式解决。先完全断电,长按 Boot 按键并重新上电后松开,进入下载模式,重新烧录程序,复位后运行。
- 请尝试按下状态栏内fullclean 清理按钮并重新编译烧录,此功能为当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容
部分AppData文件夹是默认隐藏的,可以设置为显示
- 英文系统:资源管理器->View->勾选“Hidden items”
- 中文系统:文件资源管理器->查看->显示->勾选“隐藏的项目”
按下Windows + R键打开“运行”对话框,输入devmgmt.msc并按回车键打开设备管理器 展开“Ports(COM&LPT)”部分,这里会列出所有的COM端口及其当前状态。
首次编译很慢属于正常情况,耐心等待即可
若开发板有复位键则按下复位键;若没有复位键,请重新上电
安装MAC 驱动程序后重新烧录。
技术支持
联系人:黄工
QQ:2850151199
EMAIL:2850151199@qq.com
电话:0755-83040712
微信:扫下方二维码添加