跳到主要内容

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-S3-ePaper-3.97 ,建议 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_E-Paper_Example3.97inch e-Paper 墨水屏幕示例程序
02_Mic_test扬声器播放麦克风录到的声音
03_Music挂载 SD 卡,读取播放 SD 卡中的音乐
04_SD_Test挂载 SD 卡,读取 SD 卡中的图片并刷新显示
05_QMI8658A六轴陀螺仪例程
06_I2C_PCF85063RTC 例程
07_I2C_SHTC3温湿度传感器例程
08_ESP32-S3_e-Paper-3.97集成了文件浏览、时钟、日历、闹钟、天气、网络配置、音频播放、电子阅读器功能

01_E-Paper_Example

程序说明

  • 本示例演示了 3.97 寸墨水屏 ESP-IDF 本地例程,实现墨水屏初始化清屏,显示图片,绘制基础图形、文字,局部刷新动态显示时间。

硬件连接

  • 将开发板接入电脑

代码解释

  • 显示预设图片 :

      #if 1
    ESP_LOGI(TAG,"2.show BMP");
    EPD_Init_Fast();
    EPD_Display(gImage_image);
    vTaskDelay(pdMS_TO_TICKS(2000));
    #endif
  • 绘制基础图形、中英文文字、数字,并刷新显示 :

      #if 1
    ESP_LOGI(TAG,"3.Paint_NewImage");
    EPD_Init();
    Paint_NewImage(Image_Mono, EPD_WIDTH, EPD_HEIGHT, 0, WHITE);
    Paint_SelectImage(Image_Mono);
    Paint_Clear(WHITE);
    // Drawing on the image
    Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
    Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
    Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
    Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT);

    Paint_DrawLine(20, 10, 70, 60, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
    Paint_DrawLine(70, 10, 20, 60, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
    Paint_DrawLine(170, 15, 170, 55, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
    Paint_DrawLine(150, 35, 190, 35, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);

    Paint_DrawRectangle(20, 10, 70, 60, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
    Paint_DrawRectangle(85, 10, 130, 60, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);

    Paint_DrawCircle(170, 35, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
    Paint_DrawCircle(170, 85, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);

    Paint_DrawNum(5, 180, 123456789, &Font24, BLACK, WHITE);
    Paint_DrawString_CN(5, 100,"你好 abc", &Font16_UTF8, BLACK, WHITE);
    Paint_DrawString_CN(5, 130, "微雪电子", &Font24_UTF8, WHITE, BLACK);

    EPD_Display_Base(Image_Mono);
    vTaskDelay(pdMS_TO_TICKS(2000));
    #endif

运行效果

  • 墨水屏刷新显示

02_Mic_test

程序说明

  • 演示如何获取麦克风的数据,然后再通过扬声器播放。

硬件连接

  • 将开发板接入电脑

代码分析

  • i2c_master_Init(); :初始化 I2C 总线。
  • user_ui_init();:初始化全局 ui。
  • user_button_init();:初始化 audio 接口。

运行效果

  • 屏幕无显示效果

  • 长按 BOOT 按键即可进入录音模式,对着 MIC 说话,3 秒后自动结束

  • 单击 BOOT 按键,播放刚刚录的声音,(如果没有录音的情况下,播放的声音会很刺耳)

  • 串口打印:

03_Music

程序说明

  • 挂载 SD 卡,读取播放 SD 卡中的音频

硬件连接

  • 将开发板接入电脑
  • 喇叭接入 SPK 接口

代码分析

  • _sdcard_init(); :初始化 SD 卡并读取 SD 卡音频文件。
  • i2c_master_init();:初始化 I2C 总线,为 ES8311 音频编解码器的配置指令传输提供通信链路。
  • audio_player_play(audio_fp);:启动音频播放器,读取打开的 MP3 文件并通过 ES8311 驱动扬声器播放。

运行效果

  • 屏幕无显示效果
  • 喇叭播放音频

04_SD_Test

程序说明

  • 该例程通过读取 SD 卡中的 BMP 图片并在墨水屏上刷新显示

硬件连接

  • 将开发板接入电脑
  • 将当前程序 bmp 文件夹放入 SD 卡根目录,插入 SD 卡模块

代码分析

  • _sdcard_init(); :初始化 SD 卡并读取 SD 卡音频文件。
  • epaper_port_init();:初始化墨水屏底层硬件端口(引脚、通信总线等)
  • EPD_Init();/EPD_Clear();:初始化墨水屏驱动参数,清屏显示白色背景
  • GUI_ReadBmp("/sdcard/bmp/100x100.bmp", 50, 50);/EPD_Display_Fast(BlackImage);:读取 SD 卡中 BMP 图片,快速刷新显示图片
  • GUI_ReadBmp_4Gray("/sdcard/bmp/3in97_4Gray.bmp", 0, 0);/EPD_Display_4Gray(BlackImage);:读取并显示 SD 卡中 4 灰度 BMP 图片

运行效果

  • 读取显示 sd 卡图片

05_QMI8658A

程序说明

  • 该例程通过读取 SD 卡中的 BMP 图片并在墨水屏上刷新显示

硬件连接

  • 将开发板接入电脑
  • 将当前程序 bmp 文件夹放入 SD 卡根目录,插入 SD 卡模块

代码分析

  • epaper_port_init();/EPD_Init();/EPD_Clear();绘制数值后调用 EPD_Display_Partial 局部刷新墨水屏:初始化墨水屏底层硬件端口、驱动参数,清屏显示白色背景
  • i2c_master_init();:初始化 I2C 总线,为 QMI8658 传感器的配置和数据读取提供通信链路
  • xTaskCreate(qmi8658_test_task, "qmi8658_test_task", 4096, i2c_bus_handle, 5, NULL);:创建 FreeRTOS 任务执行 QMI8658 传感器数据读取逻辑
  • qmi8658_is_data_ready(&dev, &ready);:检测传感器数据是否就绪,仅当数据就绪时读取数据。
  • qmi8658_read_sensor_data(&dev, &data);:读取传感器的加速度、陀螺仪、温度、时间戳数据,串口打印数据
  • draw_qmi8658_data_to_epaper(&data);:绘制数值后调用EPD_Display_Partial局部刷新显示数据

运行效果

  • 墨水屏局部刷新显示六轴陀螺仪传感器数据

06_I2C_PCF85063

程序说明

  • 该示例使用板载 PCF85063 RTC 芯片,实现 3.97 寸墨水屏结合 I2C 接口 RTC 实时时钟模块动态显示功能

硬件连接

  • 将开发板接入电脑

代码分析

  • epaper_port_init();/EPD_Init();/EPD_Clear();绘制数值后调用 EPD_Display_Partial 局部刷新墨水屏:初始化墨水屏底层硬件端口、驱动参数,清屏显示白色背景
  • i2c_master_init();:初始化 I2C 总线,为 PCF85063 RTC 模块的配置和时间读取提供通信链路。
  • PCF85063_init();:初始化 PCF85063 RTC 模块,完成时钟寄存器默认配置。
  • PCF85063_GetTime();/PCF85063_SetTime();:读取 RTC 当前时间,设置默认时间。
  • xTaskCreate(rtc_test_task, "rtc_display", 4096, NULL, 5, NULL);:创建 FreeRTOS 任务执行 RTC 时间读取和显示逻辑
  • display_time_on_epaper():绘制数值后调用EPD_Display_Partial局部刷新显示数据

运行效果

  • 墨水屏局部刷新显示时间

07_I2C_SHTC3

程序说明

  • 该示例使用板载 SHTC3 温湿度传感器,实现 3.97 寸墨水屏动态显示温湿度数据功能

硬件连接

  • 将开发板接入电脑

代码分析

  • epaper_port_init();/EPD_Init();/EPD_Clear();绘制数值后调用 EPD_Display_Partial 局部刷新墨水屏:初始化墨水屏底层硬件端口、驱动参数,清屏显示白色背景
  • i2c_master_init();:初始化 I2C 总线。
  • i2c_shtc3_init();:初始化 SHTC3 温湿度传感器 模块。
  • xTaskCreatePinnedToCore(i2c_SHTC3_loop_task, "i2c_SHTC3_loop_task", 3 * 1024, NULL , 2, NULL,0);:创建 FreeRTOS 任务
  • i2c_SHTC3_loop_task():获取温湿度数值并打印,调用EPD_Display_Partial局部刷新显示数据

运行效果

  • 墨水屏局部刷新显示温湿度

08_ESP32-S3_e-Paper-3.97

程序说明

  • 该示例集成了文件浏览、时钟、日历、闹钟、天气、网络配置、音频播放、电子阅读器 8 大核心功能,实现墨水屏菜单化交互,按钮选择控制

硬件连接

  • 使用 USB 线将开发板接入电脑

代码分析

  • app_main()中完成 NVS、SD 卡、I2C 外设(传感器 / 时钟 / 音频)、按键、墨水屏的初始化,从 NVS 加载配置(WiFi 使能、工作模式),根据模式创建对应任务;
  • void user_Task(void *arg)负责绘制墨水屏主菜单(8 个功能图标 + 文字)、响应按键事件(上下选择、确认进入子页、全局刷新、关机)、管理墨水屏低功耗(5 秒无操作睡眠、10 分钟无操作软关机)、刷新顶部状态栏(时间 / 电量 / WiFi 状态);
  • file_browser_task(); 文件浏览模块
  • page_clock_show(); 时钟模块
  • page_calendar_show(); 日历模块
  • page_alarm_menu(); 闹钟模块
  • page_weather_city_select(); 天气模块
  • page_handle_network_key_event(); 网络配置模块
  • page_audio_main(); 音频播放模块
  • page_fiction_file(); 电子阅读器模块

运行效果

  • 烧录程序完成后进入配置网络界面,通过连接墨水屏显示的 wifi 名称进行网络配置

  • 网络配置完成进入主页面,通过 拨轮按键与 BOOT 和 PWR 侧边按钮控制

  1. 文件浏览模块

    • 读取 SD 卡所有目录文件
  2. 时钟模块

    • 刷新显示温湿度,时间,电池电量
  3. 日历模块

    • 刷新显示日历
  4. 闹钟模块

    • 闹钟模块主界面,可设置闹钟提醒

    • 通过拨轮按键控制(单击确认,上下拨动选择闹钟/设置时间,双击退出模块)

      • 单击拨轮按键,选择闹钟,可以进行闹钟设置

      • 通过拨轮按键进行闹钟设置(单击确认设置时/分/开关/保存,上下拨动设置时间)

      • 双击拨轮按键/boot 按键退出模块

  5. 天气模块(需要先开启 WIFI 连接)

    • 天气模块主界面,显示日期,温湿度,和近 4 天的天气信息
  6. 网络配置模块

    • 控制 WIFI 开启/关闭,显示连接 WIFI 的详细信息
  7. 音频播放模块

    • 通过拨轮按键控制选择,可播放内置音频,TF 卡音频和录音
    • 播放音频
    • 录音,保存到 TF 卡中
  8. 电子阅读器模块

    • 电子阅读器模块主界面

    • 单击确认读取 TF 卡的。txt 文件,上下拨动拨轮按键控制翻页

    • 上下拨动拨轮按键两次,进入字体设置界面

    • 单击拨轮按键/boot 按键,进入书签管理,集成增加书签和读取书签功能