跳到主要内容

Arduino 开发

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

Arduino 入门教程

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

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

配置开发环境

1. 安装和配置 Arduino IDE

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

2. 安装库

要运行示例,需要安装对应的库。

可从 该处 下载 ESP32-S3-CAM-OVxxxx 开发板的示例程序包。包内的 arduino\libraries 目录已包含本教程所需的全部库文件。

库或文件名称说明版本安装方式
es7210音频编码器驱动——手动安装
es8311音频解码器驱动——手动安装
lvgllvgl 显示显示框架v8.4.0通过库管理器或手动安装
ESP32-audioI2S-master音频播放组件v3.4.4通过库管理器或手动安装
版本兼容性说明

LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。

安装步骤:

  1. 进入已下载的 示例程序包

  2. 将其 Arduino\libraries 目录下的所有文件夹(ESP32-audioI2S-master、lvgl 等)复制到 Arduino 的库文件夹中。

    信息

    Arduino 库文件夹的路径通常是:c:\Users\<用户名>\Documents\Arduino\libraries

    也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的 libraries 文件夹。

  3. 其他安装方式请参考:Arduino 库管理教程

ESP32-S3-CAM-OVxxxx 所需开发板安装说明

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

示例程序

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

示例程序基础例程说明依赖库
01_lvgl_example展示了基本的图形库功能,也可以用于测试显示屏的基础性能lvgl
02_CameraWebServer网页摄像头测试,通过连接 WIFI,创建 HTTP 服务器,获取摄像头图像——
03_audio_out_no_tf音频播放测试es8311
04_SDMMC_TestTF 卡挂载以及读写文件测试LVGL,SensorLib
05_audio_out_tfLVGL 演示LVGL,Arduino_DriveBus ,Adafruit_XCA9554
06_esp_srES7210 驱动示例,拾取人声检测——

Arduino 工程参数设置

  • 若烧录的示例存在语音识别模型,则 Partition Scheme 选择 "ESP SR 16M (3MB APP/7MB SPIFFS/2.9MB MODEL)"
  • 若烧录的示例不存在语音识别模型,则 Partition Scheme 选择 "16M Flash (3MB APP/9.9MB FATFS)" 或其他

01_lvgl_example

程序说明

  • 本示例演示了如何使用 Arduino 驱动显示屏,并播放 LVGL 示例程序

硬件连接

  • 将开发板接入电脑

代码分析

  • 初始化 I2C 以及背光:

    DEV_I2C_Init();

    IO_EXTENSION_Init();
    IO_EXTENSION_Output(IO_EXTENSION_IO_6, 1);
    IO_EXTENSION_Pwm_Output(100);
  • 初始化显示屏、触摸、以及 LVGL

    lcd_driver_init();
    touch_driver_init();
    lvgl_driver_init();
  • 加载 LVGL demo

    lvgl_port_lock(0);

    lv_demo_widgets();
    // lv_demo_benchmark();
    // lv_demo_keypad_encoder();
    // lv_demo_music();
    // lv_demo_stress();

    lvgl_port_unlock();

运行效果

02_CameraWebServer

程序说明

  • 本示例为摄像头和 HTTP 服务器的综合示例程序,通过浏览器可以获取摄像头视频流

硬件连接

  • 接入摄像头,支持 GC0308,GC2145,OV5640,OV3660
  • 将开发板接入电脑

代码分析

  • 初始化摄像头

    esp_err_t err = esp_camera_init(&config);
    if (err != ESP_OK) {
    esp_camera_deinit();
    Serial.printf("Camera init failed with error 0x%x", err);
    config.frame_size = FRAMESIZE_QVGA;
    config.pixel_format = PIXFORMAT_RGB565;
    esp_camera_init(&config);
    }
  • 填写 ssid 以及 password 连接 WIFI

    WiFi.begin(ssid, password);
  • 开启 HTTP 服务器

    startCameraServer();

运行效果

  • 上电等待 WIFI 连接后,打开串口监视器可以看到 IP 地址,在浏览器打开

03_audio_out_no_tf

程序说明

  • 本示例演示使用 ES8311 音频解码器播放音乐

硬件连接

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

代码分析

  • 初始化 I2C 控制器和外部拓展 IO

    DEV_I2C_Init();
    IO_EXTENSION_Init();
    IO_EXTENSION_Output(IO_EXTENSION_IO_6, 1);
  • 初始化 ES8311

    es8311_codec_init();
  • 初始化 I2S 并使能功放 PA 引脚

    setupI2S();
    IO_EXTENSION_Output(IO_EXTENSION_IO_4, 1);
  • 在 loop 循环中不断写通过 I2S 向 ES8311 写数据

    void loop() {
    i2s.write((uint8_t *)audio_data, AUDIO_SAMPLES * 2);
    }

运行效果

  • 烧录程序后会自动开始播放音乐

04_SDMMC_Test

程序说明

  • 本示例演示了如何挂载 TF 卡,并测试读写文件

硬件连接

  • 插入 TF 卡
  • 将开发板接入电脑

代码分析

  • 设置 SDIO 接口引脚,并挂载文件系统

    if(! SD_MMC.setPins(clk, cmd, d0)){
    Serial.println("Pin change failed!");
    return;
    }

    if (!SD_MMC.begin("/sdcard", true)) {
    Serial.println("Card Mount Failed");
    return;
    }
  • 读写文件测试

    listDir(SD_MMC, "/", 0);
    createDir(SD_MMC, "/mydir");
    listDir(SD_MMC, "/", 0);
    removeDir(SD_MMC, "/mydir");
    listDir(SD_MMC, "/", 2);
    writeFile(SD_MMC, "/hello.txt", "Hello ");
    appendFile(SD_MMC, "/hello.txt", "World!\n");
    readFile(SD_MMC, "/hello.txt");
    deleteFile(SD_MMC, "/foo.txt");
    renameFile(SD_MMC, "/hello.txt", "/foo.txt");
    readFile(SD_MMC, "/foo.txt");
    testFileIO(SD_MMC, "/test.txt");
    Serial.printf("Total space: %lluMB\n", SD_MMC.totalBytes() / (1024 * 1024));
    Serial.printf("Used space: %lluMB\n", SD_MMC.usedBytes() / (1024 * 1024));

运行效果

05_audio_out_tf

程序说明

  • 本示例演示从 TF 卡中播放 MP3 音频

硬件连接

  • 插入 TF 卡,并在根目录放置文件名为 ff-16b-1c-44100hz.mp3 的音频文件
  • 接入喇叭
  • 将开发板接入电脑

代码分析

  • 初始化 I2S 以及音频解码库,并设置播放路径

    audio.setPinout(I2S_BCK_PIN, I2S_LRCK_PIN, I2S_DOUT_PIN,I2S_MCLK_PIN);
    audio.connecttoFS(SD_MMC, "ff-16b-1c-44100hz.mp3");

运行效果

-烧录程序自动播放 MP3 音乐

06_esp_sr

程序说明

  • 本示例演示了使用 ES7210 音频编码芯片进行语音唤醒和语音识别

硬件连接

  • 将开发板接入电脑

代码分析

  • 初始化 I2S 以及 ES7210 音频编码器

    Wire.begin(I2C_PIN_SDA, I2C_PIN_SCL);
    es7210_init();
    i2s.setPins(I2S_PIN_BCK, I2S_PIN_WS, I2S_PIN_DOUT, I2S_PIN_DIN, I2S_PIN_MCK);
    i2s.setTimeout(1000);
    i2s.begin(I2S_MODE_STD, 16000, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO);
  • 注册语音唤醒以及语音识别回调事件,并开启 ESP-SR

     ESP_SR.onEvent(onSrEvent);
    ESP_SR.begin(i2s, sr_commands, sizeof(sr_commands) / sizeof(sr_cmd_t), SR_CHANNELS_STEREO, SR_MODE_WAKEWORD);

运行效果