跳到主要内容

ESP-IDF 开发

本章节包含以下两部分,请按需阅读:

配置开发环境

备注

以下环境设置适用于 Windows 10/11 系统,Mac/Linux 用户请参考 官方说明

  1. 下载并安装 Visual Studio Code

  2. 在 VSCode 中,通过点击 VSCode 侧边活动栏中的 扩展图标 或使用快捷键(Ctrl+Shift+X)来打开 扩展 视图。然后,搜索 ESP-IDF 扩展并安装。

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

  3. 安装扩展后,VS Code 左侧活动栏中会出现 Espressif 图标 图标,点击该图标可查看 ESP-IDF 扩展的基本命令列表,在 Advanced 中选择 配置 ESP-IDF 扩展

    选择“配置 ESP-IDF 拓展”

  4. 选择 Express 进入快速配置模式:

    选择快速配置模式

  5. 根据需要修改以下选项。

    • 选择下载服务器
      • Espressif:使用乐鑫中国服务器,下载速度更快。
      • Github:使用 GitHub 官方发布链接。
    • ESP-IDF 版本:通常根据开发板要求选择对应版本,如无特殊要求建议使用最新的正式版本。对于 ESP32-S3-Touch-LCD-1.69 ,建议 Espressif IDF 版本 ≥ v5.3.1。
    • ESP-IDF 容器安装地址:建议使用默认地址,或使用纯英文路径且路径中不包含空格。
    • ESP-IDF 所需的工具安装地址:建议使用默认地址,或使用纯英文路径且路径中不包含空格。

    ESP-IDF 拓展快速配置模式选项

  6. 点击 Install 开始安装。你将看到一个显示安装进度的页面,包括 ESP-IDF 下载、ESP-IDF 工具下载安装以及 Python 虚拟环境创建的进度状态。

    安装进度

  7. 如果安装正确,你会看到所有设置已配置完成的提示,即可开始使用该扩展程序。

    安装成功

注意

注意:如果 ESP-IDF 安装失败或需要重新安装,可以尝试删除 C:\Users\%Username%\espC:\Users\%Username%\.espressif 文件夹后重试。

示例程序

ESP-IDF 示例程序位于 示例程序包ESP-IDF 目录中。

01_ESP_IDF_ST7789

本示例在 ESP32-S3-Touch-LCD-1.69 开发板上演示了如何使用 ST7789 显示驱动实现多种图形和图像测试。程序通过 SPIFFS 文件系统加载字体和图像,并进行屏幕填充、彩色条纹、形状绘制以及 BMP、JPEG、PNG 图像展示。

ESP32-S3-Touch-LCD-1.69 ESP-IDF 示例1 图1
ESP32-S3-Touch-LCD-1.69 ESP-IDF 示例1 图2
ESP32-S3-Touch-LCD-1.69 ESP-IDF 示例1 图3
ESP32-S3-Touch-LCD-1.69 ESP-IDF 示例1 图4
ESP32-S3-Touch-LCD-1.69 ESP-IDF 示例1 图5

02_ESP_IDF_ST7789_LVGL

本示例演示了 LVGL Widgets 示例。

ESP32-S3-Touch-LCD-1.69 ESP-IDF 示例2 图1
ESP32-S3-Touch-LCD-1.69 ESP-IDF 示例2 图2

代码解释

app_lcd_init() : 配置和初始化 LCD 的背光引脚; 初始化 SPI 总线,用于与 LCD 进行通信; 创建 LCD 的面板输入输出(Panel IO)对象,配置 SPI 相关的参数; 安装 LCD 驱动,创建 LCD 面板对象,并进行一些初始化操作,如复位、开启显示、设置镜像等; 打开 LCD 背光。

app_lcd_init() : 初始化 LVGL,设置任务优先级、栈大小、定时器周期等参数; 配置 LCD 显示屏的参数,并将其添加到 LVGL 中作为一个显示设备。这样,LVGL 就可以在这个显示屏上绘制图形界面。

03_PCF85063

本示例展示如何在 ESP32-S3-Touch-LCD-1.69 开发板上使用板载 PCF85063 实时时钟 (RTC)。代码利用 I2C 协议初始化与 RTC 的通信,设定 SCL 和 SDA 引脚,并定义 I2C 通信频率及超时时间。通过实现的读写寄存器功能,可获取及设置时间信息,辅以 BCD 格式的数据转换功能。应用程序启动后将 RTC 设置为预定时间,然后在 FreeRTOS 任务循环中每秒读取并输出当前时间,确保不断更新和显示时间信息。

03_PCF85063 示例输出

代码解释

rtc_get_time() : 这个函数用于从 RTC(实时时钟芯片,这里假设是 PCF85063)读取当前时间。它通过调用 rtc_read_reg 函数从特定的寄存器地址开始读取 7 个字节的数据,分别代表秒、分钟、小时、日、星期几、月和年。 将读取到的 BCD 格式数据转换为十进制格式,并打印出当前时间。如果读取失败,打印错误信息并返回错误码。

rtc_set_time() : 这个函数用于设置 RTC 的时间。它接受小时、分钟、秒、日、月和年作为参数,将这些十进制数据转换为 BCD 格式,并组成一个数组。 通过调用 rtc_write_reg 函数将这个数组写入到 RTC 的特定寄存器地址开始的位置,从而设置 RTC 的时间。如果写入成功,返回 ESP_OK;否则,返回相应的错误码。

04_QMI8658

本示例展示如何在 ESP32-S3-Touch-LCD-1.69 开发板上使用板载 QMI8658 传感器。代码通过 I2C 初始化传感器,并配置加速度计和陀螺仪参数。接着,使用 FreeRTOS 任务持续读取传感器数据,输出加速度、角速度、时间戳及温度信息。

04_QMI8658 示例输出

代码解释

  • read_sensor_data()
    • 使用 qmi.getAccelerometer 函数读取加速度计数据,如果读取成功,打印加速度计的三个轴的数据。如果读取失败,打印错误信息;
    • 使用 qmi.getGyroscope 函数读取陀螺仪数据,如果读取成功,打印陀螺仪的三个轴的数据。如果读取失败,打印错误信息;
    • 使用 qmi.getTimestampqmi.getTemperature_C 函数分别获取传感器的时间戳和温度,并打印出来;
    • 如果没有数据准备好,打印一个警告信息。然后等待一段时间后再次循环检查数据是否准备好。