跳到主要内容

ESP-IDF 开发

本章节包含以下内容,请按需阅读:

ESP-IDF 入门教程

初次接触 ESP32 ESP-IDF 开发,想要快速上手?我们为您准备了一套通用的 入门教程

请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。

配置开发环境

信息

对于 ESP32-S3-Touch-LCD-4 开发板,需要使用 ESP-IDF V5.2.5 及以上版本。

备注

以下内容以 Windows 系统为例,使用 VS Code + ESP-IDF 扩展 的方式进行开发。Mac/Linux 用户请参考 官方说明

版本选择

此部分图示以安装 ESP-IDF V5.5.2 为例示范,安装时请选用与您开发板示例匹配的 ESP-IDF 版本。

安装 ESP-IDF 开发环境

  1. 前往 ESP-IDF Installation Manager 下载 ESP-IDF 安装管理器。这是乐鑫最新推出的跨平台安装工具,下文将演示如何使用其离线安装功能。

    在页面中点击 Offline Installer 标签,然后在筛选栏中选择 Windows 操作系统和你需要的 ESP-IDF 版本(图示仅为参考,请以实际为准)。

    下载 EIM 和整合包

    确认选择无误后,点击下载按钮。浏览器将自动同时下载两个文件:一个是 ESP-IDF 离线整合包(.zst),另一个是 ESP-IDF 安装器(.exe)

    下载 EIM 和整合包2

    请耐心等待两个文件下载完成。

  2. 下载完成后,双击运行 ESP-IDF 安装器(eim-gui-windows-x64.exe)

    启动后,可在右上角将界面语言切换为中文。

    切换 EIM 语言

    安装工具会自动检测同一目录下是否存在离线整合包。点击 从存档安装

    自动检测整合包

    接下来,选择安装路径。建议使用默认路径;若需自定义,请确保路径中不包含中文或空格。确认无误后,点击 开始安装

    选择安装路径
  3. 当看到如下界面时,表示 ESP-IDF 已安装成功。

    安装成功
  4. 建议同时安装驱动程序。点击 完成安装,然后点击 安装驱动程序

    用 ESP-IDF 安装管理器安装驱动

安装 Visual Studio Code 与 ESP-IDF 扩展

  1. 下载并安装 Visual Studio Code

  2. 安装时建议勾选 通过 Code 打开操作添加到 Windows 资源管理器文件上下文菜单,以便快速打开项目文件夹。

  3. 在 VS Code 中,点击侧边活动栏中的 扩展图标 扩展图标(或使用快捷键 Ctrl + Shift + X)打开 扩展 视图。

  4. 在搜索框中输入 ESP-IDF,找到 ESP-IDF 扩展并点击安装。

    在 VS Code 中搜索并安装 ESP-IDF 扩展

  5. ESP-IDF 扩展版本 ≥ 2.0 时,扩展会自动检测并识别上述步骤中安装的 ESP-IDF 环境,无需手动配置。

示例程序

Demo-flow-01

ESP32-S3-Touch-LCD-4 示例程序

示例程序基础例程说明
01_RS485_Test测试 RS-485 座子
02_SD_Test测试 SD 卡座
03_RTC_TestRTC 时钟跟 RTC 中断
04_TWAIreceive测试 CAN 卡座
05_TWAItransmit测试 CAN 卡座
06_LVGL_Proting测试 RGB 触摸屏幕

01_RS485_Test

【硬件连接】

ESP32-S3-Touch-LCD-4-demo-04

【代码分析】

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

【运行效果】

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

ESP32-Arduino-32

02_SD_Test

【硬件连接】

  • 使用 USB 线把板子接入电脑
  • 将 SD 卡装入开发板

ESP32-S3-Touch-LCD-4-demo-03

【代码分析】

  • waveshare_sd_card_init()

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

  • waveshare_sd_card_test()

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

【运行效果】

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

ESP32-S3-Touch-LCD-7-demo-20

  • 也可直接使用 ESP-IDF 的串口监视器

03_RTC_Test

【硬件连接】

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

【代码分析】

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

【运行效果】

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

ESP32-IDF-17

04_TWAIreceive

【硬件连接】

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

ESP32-S3-Touch-LCD-4-demo-05

【代码分析】

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

【运行效果】

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

ESP32-Arduino-CN-2

ESP32-Arduino-23

  • 打开串口调试助手,可以看到 Esp32-s3-touch-lcd-7 已经开始接收 CAN 消息(若接收报错,可多进行几次复位与软件重新开启设备,耐心等待)

ESP32-S3-Touch-LCD-7-demo-15

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

ESP32-IDF-22

05_TWAItransmit

【硬件连接】

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

ESP32-S3-Touch-LCD-4-demo-05

【代码分析】

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

【运行效果】

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

ESP32-S3-Touch-LCD-7-demo-14

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

ESP32-S3-Touch-LCD-7-demo-16

06_LVGL_Proting

【硬件连接】

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

ESP32-S3-Touch-LCD-4-demo-02

【代码分析】

  • app_main()
    • 初始化 Waveshare ESP32-S3 RGB LCD,使用 TCA9554 IO 拓展芯片的 2 号脚控制输出高低电平来控制屏幕背光。
    • 接着打印一条信息表示要显示 LVGL 的演示内容,由于 LVGL 的 API 不是线程安全的,所以先锁定互斥锁。
    • 然后可以选择运行不同的 LVGL 演示程序,如lv_demo_stresslv_demo_benchmarklv_demo_musiclv_demo_widgetsexample_lvgl_demo_ui等。
    • 最后释放互斥锁。

【运行效果】

  • 烧录代码后,可进行一系列触屏操作,提供 LVGL 移植的例程,本示例添加了 lvgl 防撕裂功能,体验感超过 Arduino IDE 方式

ESP32-S3-Touch-LCD-4-demo-06