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. 安装库
- 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装。若库安装要求离线安装,则必须使用提供的库文件。
- 对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
- 可从 此链接 的
Arduino目录中,下载 ESP32-S3-Touch-AMOLED-1.75C 开发板的示例程序包。包内的Arduino\libraries目录已包含本教程所需的全部库文件。
| 库或文件名称 | 说明 | 版本 | 安装方式 |
|---|---|---|---|
| ESP32-audioI2S-master | 音频播放库 | v3.4.5 | 通过库管理器或手动安装 |
| SensorLib | PCF85063、QMI8658 传感器驱动库 | v0.3.1 | 通过库管理器或手动安装 |
| es7210 | ES7210 驱动 | - | 手动安装 |
| es8311 | ES8311 驱动 | - | 手动安装 |
| kode_bq27220 | bq27220 电池检测驱动 | —— | 手动安装 |
| lvgl | LVGL UI | v8.4.0 | 手动安装 |
LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。
安装步骤:
-
进入已下载的 示例程序包。
-
将其
Arduino\libraries目录下的所有文件夹(Arduino_DriveBus、GFX_Library_for_Arduino 等)复制到 Arduino 的库文件夹中。信息Arduino 库文件夹的路径通常是:
c:\Users\<用户名>\Documents\Arduino\libraries。也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的
libraries文件夹。 -
其他安装方式请参考:Arduino 库管理教程。
ESP32-S3-Touch-LCD-1.85B 所需开发板安装说明
| 板名称 | 板安装要求 | 版本号要求 |
|---|---|---|
| ESP32 by Espressif Systems | “离线”安装/“在线”安装 | ≥3.2.0 |
示例程序
Arduino 示例程序位于 示例程序包 的 Arduino/examples 目录中。
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_lvgl_demo | 展示了基本的 LVGL 图形库功能,测试显示屏的基础性能 | lvgl |
| 02_lvgl_BQ27220 | 测试 BQ27220 电量监测传感器 | kode_bq27220 |
| 03_audio_out_no_tf | 音频播放测试 | es8311 |
| 04_SDMMC_Test | TF 卡挂载以及读写文件测试 | —— |
| 05_audio_out_tf | LVGL 演示 | LVGL,Arduino_DriveBus |
| 06_esp_sr | ES7210 驱动示例,拾取人声检测 | —— |
| 07_I2C_qmi8658 | 陀螺仪驱动测试 | SensorLib |
| 08_I2C_pcf85063 | RTC 实时时钟驱动测试 | SensorLib |
01_lvgl_demo
程序说明
- 本示例演示了如何使用
Arduino驱动显示屏,并播放多个 LVGL 示例程序。
硬件连接
- 将开发板接入电脑
代码分析
-
初始化屏幕、触摸以及 LVGL:
I2C_Init();Backlight_Init();LCD_Init();Lvgl_Init(); -
选择对应的 LVGL DEMO 运行:
lv_demo_widgets();// lv_demo_benchmark();// lv_demo_keypad_encoder();// lv_demo_music();// lv_demo_stress();
运行效果
![]() | ![]() |
|---|
![]() | ![]() |
|---|

02_lvgl_BQ27220
程序说明
- 本示例演示使用 BQ27220 电量监测传感器读取电池信息,并在 LVGL 中显示出来
硬件连接
- 接入 3.7V 锂电池
代码分析
-
创建 I2C 互斥锁,避免触摸和 BQ27220 在不同任务读取时发生冲突
wire_mutex = xSemaphoreCreateMutex(); -
初始化 BQ27220
if (!gauge.begin(Wire, 0x55, I2C_SDA_PIN, I2C_SCL_PIN, 400000)) {Serial.println("BQ27220 not found");while (1) delay(1000);}
运行效果

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);
运行效果

07_I2C_qmi8658
【程序说明】
- 通过 I2C 协议,对 QMI8658 芯片进行初始化设置,然后每隔 200ms 读取对应的姿态信息打印到终端。
【硬件连接】
- 使用 USB 线把板子接入电脑
【代码分析】
void i2c_qmi_loop_task(void *arg):创建一个 QMI 任务来实现获取姿态信息,在任务中读取并打印加速度计、陀螺仪数据,并将获取的结果输出到串口控制台,间隔 200ms 。
【运行效果】
- 打开串口监控,可以看到打印输出的 IMU 发出来的原始数据(欧拉角需要自己转换),如下图所示:

08_I2C_pcf85063
【程序说明】
- 通过 I2C 协议,分别对 PCF85063 芯片进行初始化、设置时间、间隔读取时间,然后打印到终端。
【硬件连接】
- 使用 USB 线把板子接入电脑
【代码分析】
void i2c_rtc_loop_task(void *arg):创建一个 RTC 任务来实现 RTC 功能,每隔 1 秒读取一次 RTC 芯片的时钟,然后输出到终端。
【运行效果】
- 程序编译下载完成,打开串口监控可以看到打印输出的 RTC 时间,如下图所示:




