Arduino 开发
本章节包含以下部分,请按需阅读:
Arduino 入门教程
初次接触 Arduino ESP32 开发,想要快速上手?我们为您准备了一套通用的 入门教程。
- 第0节 认识 ESP32
- 第1节 安装和配置 Arduino IDE
- 第2节 Arduino 基础知识
- 第3节 数字输出/输入
- 第4节 模拟输入
- 第5节 脉冲宽度调制 (PWM)
- 第6节 串行通信 (UART)
- 第7节 I2C 通信
- 第8节 SPI 通信
- 第9节 Wi-Fi 基础用法
- 第10节 网页服务器
- 第11节 蓝牙 (Bluetooth)
- 第12节 LVGL 图形界面开发
- 第13节 综合项目
请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
配置开发环境
1. 安装和配置 Arduino IDE
请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。
2. 安装库
要运行示例,需要安装对应的库。
可从 该处 下载 ESP32-S3-CAM-OVxxxx 开发板的示例程序包。包内的 arduino\libraries 目录已包含本教程所需的全部库文件。
| 库或文件名称 | 说明 | 版本 | 安装方式 |
|---|---|---|---|
| es7210 | 音频编码器驱动 | —— | 手动安装 |
| es8311 | 音频解码器驱动 | —— | 手动安装 |
| lvgl | lvgl 显示显示框架 | v8.4.0 | 通过库管理器或手动安装 |
| ESP32-audioI2S-master | 音频播放组件 | v3.4.4 | 通过库管理器或手动安装 |
LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。
安装步骤:
-
进入已下载的 示例程序包。
-
将其
Arduino\libraries目录下的所有文件夹(ESP32-audioI2S-master、lvgl 等)复制到 Arduino 的库文件夹中。信息Arduino 库文件夹的路径通常是:
c:\Users\<用户名>\Documents\Arduino\libraries。也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的
libraries文件夹。 -
其他安装方式请参考: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_Test | TF 卡挂载以及读写文件测试 | LVGL,SensorLib |
| 05_audio_out_tf | LVGL 演示 | LVGL,Arduino_DriveBus ,Adafruit_XCA9554 |
| 06_esp_sr | ES7210 驱动示例,拾取人声检测 | —— |
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);
运行效果
