跳到主要内容

ESP-IDF 开发

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

ESP-IDF 入门教程

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

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

配置开发环境

备注

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

  1. 下载并安装 Visual Studio Code

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

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

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

    选择“配置 ESP-IDF 拓展”

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

    选择快速配置模式

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

    • 选择下载服务器
      • Espressif:使用乐鑫中国服务器,下载速度更快。
      • Github:使用 GitHub 官方发布链接。
    • ESP-IDF 版本:通常根据开发板要求选择对应版本,如无特殊要求建议使用最新的正式版本。对于 ESP32-C6-Touch-LCD-1.83 ,建议 Espressif IDF 版本 ≥ v5.5.0。
    • 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_AXP2101通过移植后的 XPowersLib 驱动 AXP2101 获取电源相关数据
02_PCF85063驱动 pcf85063 进行时间存储读取功能
03_esp-brookesia展示完整手机风格 UI 系统,包含状态栏、导航栏、应用启动器和手势交互等组件
03_QMI8658通过移植后的 SensorLib 驱动 qmi8658 获取陀螺仪相关数据
05_LVGL_WITH_RAM通过开启双缓存、开启 DMA 加速防撕裂等方式运行 LVGL 的 demo

01_AXP2101

程序说明

  • 本示例演示了在使用 ESP-IDF 移植 XPowersLib,通过移植后的 XPowersLib 驱动 AXP2101 获取电源相关数据

硬件连接

  • 将开发板接入电脑

代码分析

  • i2c_init:初始化 I2C 主设备,为与其他设备(如 PMU)进行通信做准备
    • 配置 I2C 参数,包括设置主设备模式、指定 SDA 和 SCL 引脚、启用上拉电阻以及确定时钟频率
    • 安装 I2C 驱动,将配置应用到实际的硬件上
  • pmu_register_read:从 PMU 的特定寄存器读取一系列字节数据
    • 进行参数检查,确保传入的参数有效,避免无效的读取操作
    • 分两步进行 I2C 操作,先发送要读取的寄存器地址,然后读取数据。在读取过程中,根据要读取的字节长度进行不同的处理,确保数据的准确读取。同时,处理 I2C 通信过程中的错误情况,返回相应的状态码以便上层代码判断读取是否成功

运行效果

  • 此示例不会点亮屏幕
  • 串口监视器显示参数:芯片温度,是否正在充电,是否放电,是否待机状态,Vbus 是否连接,Vbus 是否良好,充电器状态,电池电压,Vbus 电压,系统电压,电池百分比

02_PCF85063

程序说明

  • 本示例使用简单的方式驱动 pcf85063 进行时间存储读取功能

硬件连接

  • 将开发板接入电脑

代码分析

  • i2c_master_init
    • 定义 I2C 配置结构体 conf,设置主设备模式、SDA 和 SCL 引脚、上拉电阻以及时钟频率
    • 使用 i2c_param_config 函数配置 I2C 参数。如果配置失败,记录错误日志并返回错误码
    • 使用 i2c_driver_install 函数安装 I2C 驱动,将配置应用到实际硬件上,并返回结果
  • rtc_get_time
    • 定义一个长度为 7 的字节数组 data 用于存储读取的时间数据
    • 调用 rtc_read_reg 函数从 RTC 芯片的特定寄存器地址(0x04)开始读取 7 个字节的时间数据。如果读取失败,记录错误日志并返回错误码
    • 对读取到的时间数据进行处理,分别提取秒、分、时、日、星期、月和年的信息,并进行 BCD 到十进制的转换
    • 使用 ESP_LOGI 输出格式化的当前时间

运行效果

  • 此示例不会点亮屏幕
  • 串口监视器打印时间信息

03_esp-brookesia

程序说明

  • 本示例展示完整手机风格 UI 系统,包含状态栏、导航栏、应用启动器和手势交互等组件。

硬件连接

  • 将开发板接入电脑

运行效果

04_QMI8658

程序说明

  • 本示例演示了在使用 ESP-IDF 移植 SensorLib,通过移植后的 SensorLib 驱动 qmi8658 获取陀螺仪相关数据

硬件连接

  • 将开发板接入电脑

代码分析

  • setup_sensor:设置和初始化与 QMI8658 传感器通信所需的环境和参数
    • 初始化 I2C 通信,确保与传感器的连接通道建立
    • 初始化传感器,检查传感器是否正常连接
    • 配置传感器的加速度计和陀螺仪参数,以满足特定的应用需求
    • 启用传感器,使其开始采集数据
  • read_sensor_data:在一个持续的循环中读取 QMI8658 传感器的数据并进行处理和输出
    • 在循环中不断检查传感器数据是否准备好
    • 当数据准备好时,读取加速度计、陀螺仪、时间戳和温度数据,并进行日志输出
    • 处理数据读取失败的情况,记录错误日志以便进行故障排查
    • 通过延迟控制循环的执行速度,避免过度占用系统资源

运行效果

  • 此示例不会点亮屏幕
  • 串口监视器打印传感器数据

05_LVGL_WITH_RAM

程序说明

  • 本示例展示 LVGLdemo,通过开启双缓存、开启 DMA 加速防撕裂等方式运行 LVGL 的 demo,可流畅运行动态图文,帧率可达 200~300 帧

硬件连接

  • 将开发板接入电脑

代码分析

  • app_main:整个应用的初始化和启动流程
    • 硬件初始化:配置和初始化与 LCD 显示和触摸输入(如果有)相关的硬件设备,如 GPIO 引脚、SPI 总线、I2C 总线、LCD 面板驱动和触摸控制器驱动等
    • LVGL 初始化:初始化 LVGL 库,分配绘图缓冲区,注册显示驱动和触摸输入设备驱动(如果有),安装定时器,并创建互斥锁和启动 LVGL 任务
    • 示例展示:最后展示 LVGL 的示例,如小部件示例等
  • example_lvgl_port_task:LVGL 的任务函数,负责处理 LVGL 的定时更新和任务延迟控制,确保 LVGL 界面的流畅运行
    • 定时更新:在任务循环中,通过获取互斥锁,调用 lv_timer_handler 处理 LVGL 的定时器事件,以更新界面状态
    • 延迟控制:根据定时器处理结果确定任务的延迟时间,避免过度占用 CPU 资源,同时确保及时响应 LVGL 的事件

运行效果