


本章节包含以下部分,请按需阅读:
初次接触 Arduino ESP32 开发,想要快速上手?我们为您准备了一套通用的 入门教程。
请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。
ESP32-S3-ePaper-13.3E6 所需开发板安装说明
| 板名称 | 板安装要求 | 版本号要求 |
|---|---|---|
| ESP32 by Espressif Systems | “离线”安装/“在线”安装 | 3.2.0 |

Arduino 示例程序位于 示例程序包 的 Arduino/examples 目录中。
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_ADC_Test | 获取锂电池的电压值 | - |
| 02_Audio_out | 音频播放示例 | - |
| 03_E-Paper_Example | 13.3inch e-Paper E6 墨水屏幕示例程序 | - |
| 04_SD_Test | 读取 SD 卡显示图片 | - |
| 05_Loader_esp32wf | wifi 传输图片 | - |
【程序说明】
【硬件连接】
【代码分析】
adc_bsp_init(void):初始化 ADC1,包括创建 ADC 单次触发单元并配置 ADC1 的通道 7。adc_get_value(float *value,int *data):读取 ADC1 通道 7 的值,并根据参考电压和分辨率计算出对应的电压值存储在传入的指针指向的位置,如果读取失败则存储 0。adc_example(void* parameter):初始化 ADC1 后,创建一个 ADC 任务,该任务每隔 1 秒读取一次 ADC 的值,通过读取的 ADC 原始值计算出系统的电压。【运行效果】

【程序说明】
【硬件连接】
【代码分析】
配置 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);
【运行效果】
【程序说明】
【硬件连接】
【代码分析】
显示预设图片。
#if 1 // show bmp
printf("show bmp1-----------------\r\n");
EPD_13IN3E_Display(Image6color);
DEV_Delay_ms(3000);
#endif
绘制基础图形、中英文文字、数字,并刷新显示。
#if 1 // Drawing on the image
Paint_NewImage(Image, EPD_13IN3E_WIDTH, EPD_13IN3E_HEIGHT, 90, EPD_13IN3E_WHITE);
Paint_SetScale(6);
// 1.Select Image
printf("SelectImage:Image\r\n");
Paint_SelectImage(Image);
Paint_Clear(EPD_13IN3E_WHITE);
// 2.Drawing on the image
printf("Drawing:Image\r\n");
Paint_DrawPoint(10, 80, EPD_13IN3E_RED, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, EPD_13IN3E_BLUE, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, EPD_13IN3E_GREEN, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, EPD_13IN3E_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, EPD_13IN3E_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, EPD_13IN3E_BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, EPD_13IN3E_BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, EPD_13IN3E_BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, EPD_13IN3E_WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, EPD_13IN3E_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, EPD_13IN3E_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_CN(10, 130, "你好 abc", &Font12CN, EPD_13IN3E_BLACK, EPD_13IN3E_WHITE);
Paint_DrawString_CN(10, 150, "微雪电子", &Font24CN, EPD_13IN3E_WHITE, EPD_13IN3E_BLACK);
Paint_DrawNum(10, 33, 123456789, &Font12, EPD_13IN3E_BLACK, EPD_13IN3E_WHITE);
Paint_DrawNum(10, 50, 987654321, &Font16, EPD_13IN3E_WHITE, EPD_13IN3E_BLACK);
Paint_DrawString_EN(145, 0, "Waveshare", &Font16, EPD_13IN3E_BLACK, EPD_13IN3E_WHITE);
Paint_DrawString_EN(145, 35, "Waveshare", &Font16, EPD_13IN3E_GREEN, EPD_13IN3E_WHITE);
Paint_DrawString_EN(145, 70, "Waveshare", &Font16, EPD_13IN3E_BLUE, EPD_13IN3E_WHITE);
Paint_DrawString_EN(145, 105, "Waveshare", &Font16, EPD_13IN3E_RED, EPD_13IN3E_WHITE);
Paint_DrawString_EN(145, 140, "Waveshare", &Font16, EPD_13IN3E_YELLOW, EPD_13IN3E_WHITE);
printf("EPD_Display\r\n");
EPD_13IN3E_Display(Image);
DEV_Delay_ms(3000);
#endif
【运行效果】
![]() ![]() |
|---|
【程序说明】
【硬件连接】
【代码分析】
配置挂载 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");
读取 SD 卡中 bmp 文件夹下的。bmp 图片
Serial.println("Scan the root directory BMP file...");
File rootDir = SD_MMC.open("/bmp");
if (rootDir && rootDir.isDirectory()) {
File file = rootDir.openNextFile();
while (file && bmpFileCount < 32) {
if (!file.isDirectory()) {
String fileName = file.name();
String fullPath = file.path();
fileName.toLowerCase();
if (fileName.endsWith(".bmp")) {
bmpFilePaths[bmpFileCount++] = MOUNT_POINT + fullPath;
Serial.printf("find BMP:%s\n", fullPath.c_str());
}
}
file.close();
file = rootDir.openNextFile();
}
rootDir.close();
} else {
Serial.println("error : failed to open the root directory!");
}
【运行效果】


【程序说明】
该模块只支持 2.4G 的网络频段
【硬件连接】
【代码修改】
打开srvr.h文件,将ssid和password改成实际使用的 WiFi 用户名和密码
将该位置的 WiFi 用户名和密码修改为你自己路由器或者手机热点的 WiFi 用户名和密码。ESP32 在这个程序中扮演的是从机角色,不是主机,它不会往外发送 WiFi 热点信息

按下win + R 键,输入CMD,打开命令行,获取电脑 IP.


打开 srvr.h 文件,将图片所示位置的网段修改成对应的网段
ESP32 的 IP 地址(也就是第四位)不要和电脑的地址一样,其他的要和电脑的 IP 地址要一模一样

然后点击上传,把程序编译并下载到 ESP32 驱动板上面
打开串口监视器,设置波特率为 115200,可以看到串口将 ESP32 驱动板的 IP 地址打印出来:

电脑或者手机(注意电脑/手机接入的网络需要时跟 ESP32 接入的 wifi 是同一个网段的才可以)打开浏览器,在网址输入栏输入 ESP32 的 IP 地址并打开,可以看到操作界面如下

整个操作见面分为五个区域: 图像操作区域:
Select Image file: 点击在电脑或者手机里面选择一张图片Level: mono: 黑白色阶图像处理算法Level: color: 多色色阶图像处理算法(只对多色屏幕生效)Dithering: mono: 黑色抖动图像处理算法Dithering: color: 多色抖动图像处理算法(只对多色屏幕生效)Update image: 上传图像如果修改了 x 和 y 的指的话,需要重新点击一下处理算法生成新的图像
在上传图像的时候,底部会显示上传的数据进度
区域①点击Select image file 选择一张图片,或者直接将图片拖拽至Original image的区域内
区域④选择对应的墨水屏型号,例如:13.3E
区域①点击一种图像处理算法,例如:Dithering: color
区域①点击 Upload image 将图片上传到墨水屏显示。

本章节包含以下部分,请按需阅读:
初次接触 ESP32 ESP-IDF 开发,想要快速上手?我们为您准备了一套通用的 入门教程。
请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
对于 ESP32-S3-ePaper-Driver-Board 开发板,需要使用 ESP-IDF V5.5.0 以上版本。
以下内容以 Windows 系统为例,使用 VS Code + ESP-IDF 扩展 的方式进行开发。Mac/Linux 用户请参考 官方说明。
前往 ESP-IDF Installation Manager 下载 ESP-IDF 安装管理器。这是乐鑫最新推出的跨平台安装工具,下文将演示如何使用其离线安装功能。
在页面中点击 Offline Installer 标签,然后在筛选栏中选择 Windows 操作系统和你要安装的版本。

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

请耐心等待两个文件下载完成。
下载完成后,双击运行 ESP-IDF 安装器(eim-gui-windows-x64.exe)。
启动后,可在右上角将界面语言切换为中文。

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

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

当看到如下界面时,表示 ESP-IDF 已安装成功。

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

下载并安装 Visual Studio Code。
安装时建议勾选 通过 Code 打开操作添加到 Windows 资源管理器文件上下文菜单,以便快速打开项目文件夹。
在 VS Code 中,点击侧边活动栏中的 扩展图标(或使用快捷键 Ctrl + Shift + X)打开 扩展 视图。
在搜索框中输入 ESP-IDF,找到 ESP-IDF 扩展并点击安装。

当 ESP-IDF 扩展版本 ≥ 2.0 时,扩展会自动检测并识别上述步骤中安装的 ESP-IDF 环境,无需手动配置。
ESP-IDF 示例程序位于 示例程序包 的 ESP-IDF 目录中。
| 示例程序 | 基础例程说明 |
|---|---|
| 01_ADC_Test | 获取锂电池的电压值 |
| 02_Mic_test | 扬声器播放麦克风录音 |
| 03_Music | 挂载 SD 卡,读取播放 SD 卡中的音乐 |
| 04_E-Paper_Example | 墨水屏示例程序 |
| 05_SD_Test | 读取 SD 卡显示图片 |
| 06_xiaozhi-esp32 | 小智 AI 应用 |
【程序说明】
【硬件连接】
【代码分析】
adc_bsp_init(void):初始化 ADC1,包括创建 ADC 单次触发单元并配置 ADC1 的通道 7。adc_get_value(float *value,int *data):读取 ADC1 通道 7 的值,并根据参考电压和分辨率计算出对应的电压值存储在传入的指针指向的位置,如果读取失败则存储 0。adc_example(void* parameter):初始化 ADC1 后,创建一个 ADC 任务,该任务每隔 1 秒读取一次 ADC 的值,通过读取的 ADC 原始值计算出系统的电压。【运行效果】

代码分析
i2c_master_Init(); :初始化 I2C 总线。user_ui_init();:初始化全局 ui。user_button_init();:初始化 audio 接口。屏幕无显示效果
长按 BOOT 按键即可进入录音模式,对着 MIC 说话,3 秒后自动结束
单击 BOOT 按键,播放刚刚录的声音,(如果没有录音的情况下,播放的声音会很刺耳)
串口打印:

代码分析
_sdcard_init(); :初始化 SD 卡并读取 SD 卡音频文件。i2c_master_init();:初始化 I2C 总线,为 ES8311 音频编解码器的配置指令传输提供通信链路。audio_player_play(audio_fp);:启动音频播放器,读取打开的 MP3 文件并通过 ES8311 驱动扬声器播放。代码解释
显示预设图片 :
#if 1
EPD_Display(Image6color);
vTaskDelay(pdMS_TO_TICKS(3000));
#endif
绘制基础图形、中英文文字、数字,并刷新显示 :
#if 1
Paint_NewImage(Image_Mono, EPD_WIDTH, EPD_HEIGHT, 90, EPD_WHITE);
Paint_SetScale(6);
printf("SelectImage:Image\r\n");
Paint_SelectImage(Image_Mono);
Paint_Clear(EPD_WHITE);
Paint_DrawPoint(10, 80, EPD_RED, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, EPD_BLUE, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, EPD_GREEN, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, EPD_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, EPD_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, EPD_BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, EPD_BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, EPD_BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, EPD_WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, EPD_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, EPD_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_CN(10, 130, "你好 abc", &Font16_UTF8, EPD_BLACK, EPD_WHITE);
Paint_DrawString_CN(10, 170, "微雪电子", &Font16_UTF8, EPD_WHITE, EPD_BLACK);
Paint_DrawNum(10, 10, 123456789, &Font12, EPD_BLACK, EPD_WHITE);
Paint_DrawNum(10, 40, 987654321, &Font12, EPD_WHITE, EPD_BLACK);
Paint_DrawString_EN(145, 0, "Waveshare", &Font16, EPD_BLACK, EPD_WHITE);
Paint_DrawString_EN(145, 35, "Waveshare", &Font16, EPD_GREEN, EPD_WHITE);
Paint_DrawString_EN(145, 70, "Waveshare", &Font16, EPD_BLUE, EPD_WHITE);
Paint_DrawString_EN(145, 105, "Waveshare", &Font16, EPD_RED, EPD_WHITE);
Paint_DrawString_EN(145, 140, "Waveshare", &Font16, EPD_YELLOW, EPD_WHITE);
printf("EPD_Display\r\n");
EPD_Display(Image_Mono);
vTaskDelay(pdMS_TO_TICKS(3000));
#endif
![]() ![]() |
|---|
【程序说明】
【硬件连接】
【代码分析】
_sdcard_init:sd 卡初始化GUI_ReadBmp_RGB_6Color("/sdcard/bmp/13in3E.bmp", 0, 0);:图片解码【运行效果】


【硬件连接】
【程序说明】

esp_network 密码:1234567890,连接成功之后,进入 图片选择界面,如图:
SSID:esp_network(密码:1234567890),然后访问地址:http://192.168.4.1/index.htmlhttp://esp32-s3-photopainter-13_3.local/index.htmlboot 按键进入模式选择,单击 boot 按键三次,然后再长按 boot 按键即可进入该模式config.txt 文件里面相关配置如下:




url、model、key 粘贴到 sdcard->img 目录下的 config.txt 文件对应键值(步骤 1 图 2)即可(新用户可以免费领取 Tokens)开发板设计文件
ESP32-S3 芯片官方手册
数据手册
周一-周五(9:30-6:30)周六(9:30-5:30)
手机:13434470212
邮箱:services04@spotpear.cn
QQ:202004841
