跳到主要内容

Arduino 开发

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

Arduino 入门教程

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

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

配置开发环境

1. 安装和配置 Arduino IDE

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

ESP32-S3-ePaper-13.3E6 所需开发板安装说明

板名称板安装要求版本号要求
ESP32 by Espressif Systems“离线”安装/“在线”安装3.2.0

2. Arduino 工程参数设置

示例程序

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

示例程序基础例程说明依赖库
01_ADC_Test获取锂电池的电压值-
02_Audio_out音频播放示例-
03_E-Paper_Example13.3inch e-Paper E6 墨水屏幕示例程序-
04_SD_Test读取 SD 卡显示图片-
05_Loader_esp32wfwifi 传输图片-

01_ADC_Test

【程序说明】

  • 通过 GPIO 连接的模拟量电压经过 ADC 转换成数字量,然后通过计算得到实际的锂电池电压,并打印到终端。

【硬件连接】

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

【代码分析】

  • 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 原始值计算出系统的电压。

【运行效果】

  • 程序编译下载完成,打开串口监控可以看到打印输出的 ADC 的值和电压,如下图所示:

02_Audio_out

【程序说明】

  • 该示例可驱动 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);

【运行效果】

  • 播放音频,屏幕无现象

03_E-Paper_Example

【程序说明】

  • 该示例为 13.3 寸 E6 墨水屏 Arduino 本地例程,实现电子纸初始化清屏,显示图片,绘制基础图形、文字。

【硬件连接】

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

【代码分析】

  • 显示预设图片。

    #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

【运行效果】

  • 屏幕刷新初始化清屏,显示图片,绘制基础图形、文字

04_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");
  • 读取 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!");
    }

【运行效果】

  • 串口打印 SD 信息
  • 读取显示 sd 卡图片

05_Loader_esp32wf

【程序说明】

  • WiFi 例程
    注意

    该模块只支持 2.4G 的网络频段

【硬件连接】

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

【代码修改】

  • 打开srvr.h文件,将ssidpassword改成实际使用的 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: 上传图像
    • IP 信息显示区域:这里显示的是你当前连接的模块的 IP 地址信息
    • 图像大小设置区域:这里 x 和 y 可以设置你要显示的起始位置,这个设置是相对于你选择的图片文件的,比如选择一张 800x480 的图片,但是连接的墨水屏是 2.9 寸的,这时候墨水屏并无法显示整张图片的信息,所以在选择-图像处理算法的时候,算法会自动从左上角开始截取一部分图片传到墨水屏显示,这里设置 x 和 y 可以自定义截取的起始位置。w 和 h 是当前墨水屏的分辨率大小。
    注意

    如果修改了 x 和 y 的指的话,需要重新点击一下处理算法生成新的图像

    • 型号选择区域:这里可以选择你接入的墨水屏型号
    • 图像显示区域:这里会显示你选择的图片以及处理之后的图像
    信息

    在上传图像的时候,底部会显示上传的数据进度

  • 区域①点击Select image file 选择一张图片,或者直接将图片拖拽至Original image的区域内

  • 区域④选择对应的墨水屏型号,例如:13.3E

  • 区域①点击一种图像处理算法,例如:Dithering: color

  • 区域①点击 Upload image 将图片上传到墨水屏显示。