ESP32-S3-ePaper-3.97 使用教程

ESP32-S3-ePaper-3.97

本产品是一款微雪 (Waveshare) 设计的高性能、高集成的微控制器开发板。 搭载 ESP32-S3 微控制器,支持 Wi-Fi 与 BLE 双模通信。板载 3.97 英寸电子墨水屏,功耗极低,环境光下可视,适合便携设备及长续航场景。 集成 RTC 实时时钟、SHTC3 温湿度传感器、Micro SD 卡槽、低功耗音频编解码芯片以及电源管理芯片。 为物联网终端、电子标签和便携显示器等应用提供灵活可靠的开发平台。

产品特性

  • 搭载 ESP32-S3R8 高性能 Xtensa 32 位 LX7 双核处理器,主频高达 240MHz
  • 支持 2.4GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth 5 (LE),板载天线
  • 内置 512KB 的 SRAM 和 384KB ROM,叠封 8MB PSRAM 和外接 16MB Flash
  • 搭载 3.97 英寸电子墨水屏,分辨率 800 × 480,具备高对比度、宽视角等特性
  • 板载音频编解码芯片,支持语音采集与播放,便于实现 AI 语音交互应用
  • 板载 QMI8658 六轴惯性测量单元 (3 轴加速度、3 轴陀螺仪),可检测运动姿态、计步等功能
  • 板载 PCF85063 RTC 实时时钟与 SHTC3 温湿度传感器,可实现精准 RTC 时间管理及温湿度监测
  • 板载 TG28 电源管理芯片,接入 3.7V MX1.25 锂电池,实现不间断供电,并预留备用电池接口,确保更换主电池时 RTC 功能持续工作
  • TG28 提供高效的电源管理方案,支持输出多路可配置电压,集成充电与电池管理功能,有助于延长电池寿命
  • 采用 Type-C 接口,提高了用户的使用便捷性和设备的兼容性
  • 板载 Micro SD 卡槽,可实现存储扩展与快速数据传输,适用于数据记录、媒体播放等场景,简化了电路设计
  • 板载拨轮按键与 BOOT 和 PWR 侧边按钮,支持自定义按键功能,开发使用更灵活

资源简介


  1. ESP32-S3-WROOM-1-N16R8 Wi-Fi 和蓝牙 SoC,240MHz 运行频率,叠封 16MB Flash 和 8MB PSRAM
  2. SHTC3 温湿度传感器 提供环境温湿度测量,便于实现环境监测功能
  3. PCF85063 RTC 时钟芯片,支持时间保持功能
  4. 拨轮按键 支持自定义三个方向的按键功能
  5. PWR 电源按键 配合程序可实现锂电池供电情况下的所有电源的控制
  6. BOOT 按键 按住 BOOT,重新上电可以进入下载模式
  7. NS4150B 音频功放芯片
  8. ES8311 低功耗音频编解码芯片
  9. QMI8658 六轴惯性测量单元 (IMU),包含一个 3 轴陀螺仪和一个 3 轴加速度计
  10. MX1.25 喇叭接口
  11. MX1.25 RTC 备用电池接口用于在锂电池接口没有接入电池时给 RTC 供电
  12. MX1.25 锂电池接口 MX1.25 2PIN 连接器,可用于接入 3.7V 锂电池,支持充放电
  13. 3.97 墨水屏接口
  14. TG28 高集成度的电源管理芯片
  15. 麦克风
  16. Type-C 接口 用于烧录程序和日志打印
  17. Micro SD 卡槽 支持 FAT32 格式的 SD 卡,用于数据扩展

接口介绍


产品尺寸


开发方式

ESP32-S3-ePaper-3.97 支持 Arduino IDE 和 ESP-IDF 两种开发框架,为开发者提供灵活的选择,您可以根据项目需求和个人偏好选择合适的开发工具。

两种开发方式各有优势,开发者可根据自身需求和技能水平选择。Arduino 简单易学、上手快,适合初学者和非专业人士;ESP-IDF 则提供更高级的开发工具和更强的控制能力,适合有专业背景或对性能要求较高的开发者,更适用于复杂项目开发。

  • Arduino IDE 是一款便捷灵活、易于上手的开源电子原型平台。无需太多基础知识,简单学习后即可快速开发。Arduino 拥有庞大的全球用户社区,提供海量开源代码、项目示例和教程,以及丰富的库资源,封装了复杂功能,让开发者能够快速实现各种功能。您可以参考 Arduino IDE 开发环境搭建教程 完成初始设置,教程中同时提供了相关示例程序供参考。

  • ESP-IDF 全称 Espressif IoT Development Framework,是乐鑫科技为 ESP 系列芯片推出的专业开发框架。它基于 C 语言开发,包含编译器、调试器、烧录工具等,支持命令行或集成开发环境(如 Visual Studio Code 配合 Espressif IDF 插件)开发,插件提供代码导航、项目管理、调试等功能。我们推荐使用 VS Code 进行开发,具体配置过程可参考 ESP-IDF (VS Code) 开发环境搭建教程,教程中同时提供了相关示例程序供参考。

Arduino 开发

配置开发环境

1. 安装和配置 Arduino IDE

请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。

2. 安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装。若库安装要求离线安装,则必须使用提供的库文件。
  • 对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 可从 该处 下载 ESP32-S3-ePaper-3.97 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。
库或文件名称说明版本安装方式
SensorLib传感器库v0.3.1"离线/在线 安装"

3. Arduino 工程参数设置


示例程序

Arduino 示例程序位于 示例程序包 的 Arduino/examples 目录中。

示例程序基础例程说明依赖库
01_Audio_Test驱动 ES8311 播放音乐-
02_E-Paper_Example3.97inch e-Paper 墨水屏幕示例程序-
03_I2C_PCF85063RTC 例程-
04_I2C_SHTC3温湿度传感器例程SensorLib
05_SD_TestSD 卡例程-
06_QMI8658A六轴陀螺仪例程SensorLib

01_Audio_Test

【程序说明】

  • 该示例可驱动 ES8311 音频编解码器,播放音乐

【硬件连接】

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

【代码分析】

  • 配置 ES8311 音频编解码器初始化。

      void setup() {
    Serial.begin(115200);
    Wire.begin(I2C_SDA, I2C_SCL);
    pinMode(PA_CTRL, OUTPUT);
    digitalWrite(PA_CTRL, HIGH);
    es8311_codec_init();

    setupI2S();
    Serial.println("I2S Initialized");
    }
  • 持续向 I2S 总线写入内置音频数据,实现循环播放。

     i2s.write((uint8_t *)audio_data, AUDIO_SAMPLES * 2);

【运行效果】

  • 播放音频文件,屏幕无现象

02_E-Paper_Example

【程序说明】

  • 该示例为 3.97 寸墨水屏 Arduino 本地例程,实现电子纸初始化清屏,显示图片,绘制基础图形、文字,局部刷新动态显示时间。

【硬件连接】

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

【代码分析】

  • 显示预设图片。

      #if 1   // show bmp
    EPD_3IN97_Init_Fast();
    printf("show image for array\r\n");
    EPD_3IN97_Display(gImage_image);
    DEV_Delay_ms(1500);
    #endif
  • 绘制基础图形、中英文文字、数字,并刷新显示。

     #if 1   // Drawing on the image
    //1.Select Image
    EPD_3IN97_Init();
    printf("SelectImage:BlackImage\r\n");
    Paint_SelectImage(BlackImage);
    Paint_Clear(WHITE);

    // 2.Drawing on the image
    Debug("Drawing:BlackImage\r\n");
    Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
    Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
    Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
    Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
    Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
    Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
    Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
    Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
    Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL);
    Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
    Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
    Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE);
    Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
    Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
    Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
    Paint_DrawString_CN(130, 0, " 你好 abc", &Font12CN, BLACK, WHITE);
    Paint_DrawString_CN(130, 20, "微雪电子", &Font24CN, WHITE, BLACK);

    printf("EPD_Display\r\n");
    EPD_3IN97_Display_Base(BlackImage);
    DEV_Delay_ms(3000);
    #endif

【运行效果】

  • 屏幕刷新显示


03_I2C_PCF85063

【程序说明】

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

【硬件连接】

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

【代码分析】

  • 循环读取 RTC 时间,格式化字符串后局部刷新墨水屏显示。

      void i2c_rtc_loop_task(void *arg)
    {
    char buff[80];
    for(;;)
    {
    RtcDateTime_t datetime = rtc_dev->get_rtcTime();
    printf("%d/%d/%d %d:%d:%d \n",datetime.year,datetime.month,datetime.day,datetime.hour,datetime.minute,datetime.second);

    Paint_NewImage(BlackImage, Font20.Height *3, Font20.Width * 8, 270, WHITE);
    Paint_SelectImage(BlackImage);
    Paint_Clear(WHITE);

    sprintf(buff, "%d-%d-%d", datetime.year,datetime.month,datetime.day);
    Paint_DrawString_EN(0, 5, buff, &Font20, WHITE, BLACK);
    sprintf(buff, "%d:%d:%d", datetime.hour,datetime.minute,datetime.second);
    Paint_DrawString_EN(0, 35, buff, &Font20, WHITE, BLACK);

    EPD_3IN97_Display_Partial(BlackImage, 50, 250, 50 + Font20.Height*3 , 250 + Font20.Width * 8);

    vTaskDelay(pdMS_TO_TICKS(500));
    }
    }

【运行效果】

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


04_I2C_SHTC3

【程序说明】

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

【硬件连接】

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

【代码分析】

  • 循环读取传感器数据,局部刷新墨水屏,显示温湿度数据。

    void i2c_SHTC3_loop_task(void *arg)
    {
    char buff[80];
    for(;;)
    {
    shtc3_data_t shtc3_data = shtc3_dev->readTempHumi();
    printf("RH:%.2f%%,Temp:%.2f°C \n",shtc3_data.RH,shtc3_data.Temp);

    Paint_NewImage(BlackImage, Font20.Height *3, Font20.Width * 8, 270, WHITE);
    Paint_SelectImage(BlackImage);
    Paint_Clear(WHITE);

    sprintf(buff, "%.2f%%",shtc3_data.RH);
    Paint_DrawString_EN(0, 5, buff, &Font20, WHITE, BLACK);
    sprintf(buff, "%.2f", shtc3_data.Temp);
    Paint_DrawString_EN(0, 35, buff, &Font20, WHITE, BLACK);
    Paint_DrawString_CN(Font20.Width * 5, 30, "℃", &Font12CN, WHITE, BLACK);

    EPD_3IN97_Display_Partial(BlackImage, 50, 250, 50 + Font20.Height*3, 250 + Font20.Width * 8);

    vTaskDelay(pdMS_TO_TICKS(1000));
    }
    }

【运行效果】

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


05_SD_Test

【程序说明】

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

【硬件连接】

  • 使用 USB 线把板子接入电脑
  • 将保存有图片的 bmp 文件夹放入 SD 卡根目录,插入 SD 卡模块

【代码分析】

  • 配置挂载 SD 卡

      //sdcard init
    Serial.begin(115200);
    delay(1000);
    SD_MMC.setPins(SD_CLK, SD_CMD, SD_D0, SD_D1, SD_D2, SD_D3);
    if (!SD_MMC.begin("/sdcard", true)) {
    printf("SD card failed to mount\r\n");
    return;
    }
    printf("SD card success to mount\r\n");
  • 显示图片

      printf("show BMP-------------------------\r\n");
    EPD_3IN97_Init_Fast();

    Paint_Clear(WHITE);
    GUI_ReadBmp("/sdcard/bmp/100x100.bmp", 50, 50);
    EPD_3IN97_Display_Fast(Image);
    printf("100*100 BMP Load OK!\r\n");
    DEV_Delay_ms(1000);

    Paint_Clear(WHITE);
    GUI_ReadBmp("/sdcard/bmp/3in97.bmp",0 ,0);
    EPD_3IN97_Display_Fast(Image);
    printf("800*480 BMP Load OK!\r\n");
    DEV_Delay_ms(3000);
  • 显示 4 灰度 BMP 图片

      EPD_3IN97_Init_4GRAY();
    Paint_NewImage(Image, EPD_3IN97_WIDTH, EPD_3IN97_HEIGHT, 0, WHITE);
    Paint_SetScale(4);
    Paint_Clear(WHITE);
    if(GUI_ReadBmp_4Gray("/sdcard/bmp/3in97_4Gray.bmp", 0, 0) == 0){
    printf("4Gray BMP Load OK!\r\n");
    }else{
    printf("4Gray BMP Load Failed!\r\n");
    }
    EPD_3IN97_Display_4Gray(Image);
    DEV_Delay_ms(3000);

【运行效果】

  • 读取显示 sd 卡图片




06_QMI8658A

【程序说明】

  • 该示例使用板载 QMI8658 六轴 IMU 传感器,墨水屏显示数值

【硬件连接】

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

【代码分析】

  • 检测数据就绪,读取并打印传感器数据,调用显示函数更新墨水屏显示数据

       if (qmi.getDataReady()) { 
    if (qmi.getAccelerometer(acc.x, acc.y, acc.z)) {
    Serial.print("ACCEL.x:"); Serial.print(acc.x); Serial.print(",");
    Serial.print("ACCEL.y:"); Serial.print(acc.y); Serial.print(",");
    Serial.print("ACCEL.z:"); Serial.print(acc.z); Serial.println();
    }
    if (qmi.getGyroscope(gyr.x, gyr.y, gyr.z)) {
    Serial.print(" GYRO.x:"); Serial.print(gyr.x); Serial.print(",");
    Serial.print(" GYRO.y:"); Serial.print(gyr.y); Serial.print(",");
    Serial.print(" GYRO.z:"); Serial.print(gyr.z); Serial.println();
    }
    qmi8658_data_show();
    }

【运行效果】

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


ESP-IDF 开发

配置开发环境

备注

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

  1. 下载并安装 Visual Studio Code

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


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


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


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

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


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


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


注意

注意:如果 ESP-IDF 安装失败或需要重新安装,可以尝试删除 C:\Users\%Username%\esp 和 C:\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 线将开发板接入电脑
  • 将示例程序下的 SD 卡文件夹所有文件,存入 SD 卡根目录下
  • 插入 SD 卡模块

电池续航

  • 时钟模式下 1500mA 电池可工作 15 天以上

代码分析

  • 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 侧边按钮控制,60 秒无操作墨水屏自动睡眠,10 分钟无操作软关机

  1. 文件浏览模块

    • 读取 SD 卡所有目录文件,仅可打开文件夹、txt 文本、音频文件,其他格式文件无法打开
    • 上下拨轮(↑↓)选择文件 / 目录,单击确认进入 / 打开
    • 双击确认 / Boot 返回上一级目录,长按中间拨轮执行全局刷新
  2. 时钟模块

    • 刷新显示温湿度,时间,电池电量
    • 支持时区选择功能:单击确认进入时区选择界面,墨水屏显示操作提示,上下拨轮↑↓选择时区、单击确认生效
  3. 日历模块

    • 刷新显示日历(基于国内 API,国外使用加载较慢),包含公历日期、农历日期 / 节气 / 节日,当前日期高亮显示
    • 支持手动刷新:长按中间拨轮重新从网络获取最新日期数据,每天自动更新一次
    • 低功耗与唤醒规则:10 分钟无操作自动关机,默认每一小时 RTC 唤醒一次;若检测到当前页面有闹钟设置,改为每分钟唤醒一次
  4. 闹钟模块

    • 闹钟模块主界面,支持最多 5 组闹钟设置

    • 删除闹钟后时间默认复位为 00:00 且状态为关闭,单击确认进入闹钟编辑模式,上下拨轮↑↓选择需编辑的内容(时 / 分 / 开关)

    • 时 / 分编辑:单击确认进入数值调节,上下拨轮↑↓按键可单次调节也可长按连续调节;开关编辑:单击确认切换一次开启 / 关闭状态,双击确认 / Boot 退出编辑模式

    • 闹铃触发:设置的闹钟时间到后自动播放内置音频,按下任一按键停止播放,双击确认 / Boot 退出闹钟模块返回主页面

  5. 天气模块(需要先开启 WIFI 连接,使用国内天气软件 API 与码表,国外无法使用)

    • 天气模块主界面,显示日期,温湿度,和近 4 天的天气信息
    • 每天 4 个定点(4 点、9 点、14 点、20 点)自动更新天气数据,长按拨轮可手动重新从网络获取最新天气
    • 10 分钟无操作自动关机,默认每一小时 RTC 唤醒一次;若检测到当前页面有闹钟设置,改为每分钟唤醒一次
    • 天气模块的图标文件存储目录在:sdcard\Weather_img\Weather_img , 支持自行添加 / 修改天气图片:
      • 在 sdcard\Weather_img\Weather_img 文件夹下增加新的天气图片
      • 打开 Weather.txt,增加要显示的名称和对应图片
  6. 网络配置模块

    • 支持 WiFi 开启 / 关闭、重新配网操作,WiFi 关闭状态下仅显示「打开 WiFi」和「返回主菜单」;WiFi 开启状态下显示「关闭 WiFi」「重新配网」「返回主菜单」
    • 选择配网后进入 STA 模式,该模式下不触发自动关机,仅墨水屏进入睡眠状态,ESP32 持续工作;将设备连接墨水屏显示的 WiFi 名称,完成配网
    • 尝试连接已配置 WiFi30 秒,期间无法其他操作,连接失败则退出配网;连接成功后自动获取 IP 地址,墨水屏提示配网成功
  7. 音频播放模块

    • 支持三种音频模式:内置音频、TF 卡音频、录音,上下拨轮↑↓选择模式,单击确认进入;TF 卡音频读取 SD 卡根目录 music 文件夹内文件,录制的音频文件也自动保存至该文件夹
    • 内置音频单击确认直接播放,录音模式单击确认直接开始录音,TF 卡音频模式下单击确认选择并播放音频文件,无声音调节功能
    • 选中音频文件后单击确认进入操作选择界面,双击确认 / Boot 返回上一级,长按中间拨轮执行全局刷新
  8. 电子阅读器模块

    • 电子阅读器模块主界面

    • 读取 SD 卡根目录 fiction 文件夹内的 txt 文本文件,上下拨轮↑↓选择文件,单击确认开始阅读,阅读时上下拨轮↑↓控制翻页

    • 双击拨轮进入字体选择界面,单击确认选择字体并生效;

    • 单击拨轮进入书签管理界面,再次单击执行书签操作,双击确认添加书签,阅读进度与书签自动保存至 SD 卡 bookmarks 文件夹

  9. 系统设置模块

    • 进入方式:在主页面长按 Boot 按键进入设置界面,上下拨轮↑↓选择功能项,单击确认查看,双击确认 / Boot 返回主页面
    • 当前支持两大功能:内存展示(显示设备当前内存情况)、QMI8658 六轴状态展示(实时显示加速度、角速度等数据)
    • 支持全局刷新:长按中间拨轮执行墨水屏全局刷新,遵循 60 秒睡眠、10 分钟关机的低功耗规则
  10. 系统开关机

    • 在主页面双击 boot 按键,系统关机
    • 长按 Power 按钮 4 秒,系统开机,墨水屏刷新显示

相关资料

1. 硬件资料

开发板设计文件

2. 技术手册

3. 示例程序

4. 软件工具

技术支持

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841