Arduino 开发
本章节包含以下内容,请按需阅读:
ESP32-P4-NANO-WIFI6-DB 的 Arduino 示例以 Arduino-ESP32 3.3.11 为基础。板载
ESP32-P4 是 Arduino 工程的编译目标,ESP32-C5 无线协处理器通过 ESP-Hosted/SDIO
连接到 ESP32-P4,不属于 Arduino 工程的编译目标。
运行显示、摄像头、音频或 SD 卡示例前,请先连接对应的板载或外接硬件,并按照示例 的前置条件安装库和配置文件。
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 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
配置 Arduino 开发环境
1. 安装 Arduino IDE
请参考 Arduino IDE 开发环境搭建教程 安装 Arduino IDE,并添加 ESP32 开发板支持。
2. 安装 Arduino-ESP32 和板卡定义
- 安装 Arduino-ESP32
3.3.11。示例代码和板卡定义按该版本整理,不要将本目录中的板卡文件与其他版本混用。 - 将示例程序包中的
examples/Arduino/esp32/variants/waveshare_esp32_p4_nano_wifi6_db复制到 Arduino-ESP32 安装目录下的variants目录。 examples/Arduino/esp32/boards.txt是基于 Arduino-ESP323.3.11的boards.txt快照。如果 Arduino-ESP32 安装目录没有其他本地板卡修改,可以备份原文件 后替换;如果已经添加过其他板卡,只合并waveshare_esp32_p4_nano_wifi6_db对应条目。- 重启 Arduino IDE,在开发板列表中选择
Waveshare ESP32-P4-NANO-WIFI6-DB。
示例程序位于示例程序包的 examples/Arduino 目录。ESP32-P4-NANO-WIFI6-DB 示例仓库链接暂保留为
ESP32-P4-NANO-WIFI6-DB,具体示例以当前示例程序包中的目录为准。
3. Arduino IDE 工具选项
连接开发板后,在 Arduino IDE 的“工具”菜单中选择开发板和串口。板卡定义中的默认参数如下:
| 选项 | 设置 |
|---|---|
| 开发板 | Waveshare ESP32-P4-NANO-WIFI6-DB |
| Flash 大小 | 16MB |
| 分区方案 | 16M Flash (6.25MB APP/3.43MB SPIFFS) |
| PSRAM | 板卡定义默认启用 |
| USB 模式 | USB-OTG (TinyUSB) |
| 上传模式 | UART0 / Hardware CDC |
| 串口监视器波特率 | 115200 |
如果使用 USB-OTG CDC 进行上传,可将“上传模式”切换为 USB-OTG CDC (TinyUSB),并按照
Arduino IDE 的端口提示选择设备。不同示例的串口输出均以 115200 为准。
Arduino 示例程序
示例目录为 examples/Arduino,当前包含以下示例:
| 示例目录 | 功能 | 主要依赖或硬件 |
|---|---|---|
board_check | 输出芯片、Flash、PSRAM 和堆内存信息 | 无需连接其他外设 |
gpio | 通过串口命令交互测试 GPIO | Arduino-ESP32 Console |
i2c | 扫描 I2C1 总线上的 7 位地址 | Wire1、I2C1 |
i2s | ES8311 单麦克风到单扬声器的音频回环 | ES8311、板载麦克风和扬声器 |
sdmmc | 以 4-bit 模式测试 microSD 文件读写 | 板载 microSD 卡 |
mipi_dsi | 显示 MIPI-DSI 色条并测试背光 | LCD 面板、背光控制器 |
mipi_csi | 将 OV5647 摄像头画面显示到 MIPI-DSI LCD | OV5647、LCD、ESP_Video |
squareline_wifi_clock | 运行 SquareLine/LVGL Wi-Fi 时钟界面 | LCD、GT911、Wi-Fi、LVGL |
board_check:板级信息检查
打开 board_check/board_check.ino,编译并上传后,将串口监视器设置为 115200。示例会输出:
- 芯片型号和芯片版本;
- CPU 核心数和频率;
- Flash 容量;
- PSRAM 容量;
- 剩余堆内存。
该示例不访问 LCD、摄像头、音频、SDMMC 或 ESP-Hosted,适合首先确认 Arduino 板卡定义是否生效。
gpio:GPIO 控制台
打开 gpio/gpio.ino 并上传,串口监视器的行尾设置为 Newline。输入 help 可查看命令列表。
gpio read <pin>
gpio write <pin> <0|1>
gpio mode <pin> <in|out|in_pu|in_pd>
例如:
gpio mode 2 out
gpio write 2 0
gpio write 2 1
gpio mode 4 in_pu
gpio read 4
该板卡变体没有定义板载 LED_BUILTIN。测试 GPIO 时,不要占用正在被 MIPI 显示屏、触摸控制器、
摄像头、SDMMC、ESP-Hosted/SDIO 或音频编解码器使用的引脚。
i2c:I2C 地址扫描
打开 i2c/i2c.ino 并上传。示例使用 Arduino Wire1 扫描 I2C1 总线,默认参数如下:
| 项目 | 参数 |
|---|---|
| SDA | GPIO7 |
| SCL | GPIO8 |
| 频率 | 400 kHz |
| 地址格式 | 7 位 I2C 地址 |
该总线由 ES8311、LCD 背光控制器、GT911 和摄像头 SCCB 等设备共享。扫描时不要同时运行其他会 初始化 I2C1 的示例。没有设备响应时,程序不会将其列为设备,这不表示扫描程序异常。
i2s:ES8311 音频回环
打开 i2s/i2s.ino 并上传,使用板载麦克风和扬声器运行单声道音频回环。示例以 48 kHz、16-bit、
I2S 标准单声道格式运行,使用左声道 slot。
| 信号 | GPIO |
|---|---|
| MCLK | GPIO13 |
| BCLK | GPIO12 |
| LRCK | GPIO10 |
| DOUT | GPIO9 |
| DIN | GPIO11 |
| 功放使能 | GPIO53,高电平打开 |
ES8311 的 Arduino Wire1 控制地址为 7 位地址 0x18。如果串口没有输出 ES8311 ready,或出现
回环无声音的情况,请检查 I2C 地址、MCLK、功放使能以及麦克风和扬声器连接。麦克风与扬声器距离
过近时可能产生声学啸叫。
sdmmc:microSD 文件读写
插入 microSD 卡后打开 sdmmc/sdmmc.ino 并上传。示例使用 4-bit SDMMC 接口挂载卡片,读取容量,
并对根目录的 /arduino_test.txt 文件执行写入和读取测试。
| 信号 | GPIO |
|---|---|
| CLK | GPIO43 |
| CMD | GPIO44 |
| D0-D3 | GPIO39、GPIO40、GPIO41、GPIO42 |
| 卡电源控制 | GPIO45,低电平打开 |
挂载失败时,检查 microSD 卡是否插入、格式是否可识别,以及 SDMMC 引脚是否被其他示例占用。
mipi_dsi:MIPI-DSI LCD
mipi_dsi 使用项目本地 LCD 驱动初始化 MIPI-DSI 面板,循环显示水平和垂直色条,并通过 I2C
背光控制器验证 LCD 背光。
运行前安装或确认以下库及版本:
| 库 | 版本 |
|---|---|
ESP32_Display_Panel | 1.0.4 |
ESP32_IO_Expander | 1.1.1 |
esp-lib-utils | 0.2.3 |
在 mipi_dsi/esp_panel_drivers_conf.h 中只选择一个本地 LCD 驱动:
ESP_PANEL_DRIVERS_LCD_ENABLE_JD9365_LOCALESP_PANEL_DRIVERS_LCD_ENABLE_HX8394_LOCALESP_PANEL_DRIVERS_LCD_ENABLE_ILI9881C_LOCAL
当前默认配置为 8 英寸 JD9365,分辨率为 800 × 1280、RGB565、双 DSI lane。使用其他 LCD 面板时, 必须选择与实际面板匹配的控制器和配置。
mipi_csi:摄像头显示
mipi_csi 初始化 OV5647 MIPI-CSI 摄像头和 MIPI-DSI LCD,将摄像头实时画面显示到 LCD。LCD
入口支持 JD9365、HX8394 和 ILI9881C,mipi_csi/lcd_panel.h 当前默认使用 ILI9881C 配置。
运行前需要满足以下条件:
- 使用 Arduino-ESP32
3.3.11及其对应的 ESP32-P4 预编译库。 - 确认
ESP_Video启用 MIPI-CSI video device:CONFIG_ESP_VIDEO_ENABLE_MIPI_CSI_VIDEO_DEVICE=y。 - 在
lcd_panel.h中将LCD_PANEL_TYPE设置为实际连接的 LCD 面板类型。 - 连接 OV5647 摄像头和实际 LCD 面板,并确认摄像头供电、MIPI 线缆及共享 I2C/SCCB 连接正确。
mipi_csi、mipi_dsi、i2s 和 i2c 对 I2C1 的初始化方式不同,不要在同一个 Arduino 工程中
同时运行这些示例,或重复初始化同一条总线。
板级资源和共享接口
板卡引脚别名
Arduino 板卡变体提供以下常用引脚别名:
| 接口 | 引脚 |
|---|---|
SDA / SDA1 | GPIO7 |
SCL / SCL1 | GPIO8 |
SS | GPIO26 |
MOSI | GPIO32 |
MISO | GPIO33 |
SCK | GPIO36 |
UART TX / RX | GPIO37 / GPIO38 |
GPIO7 和 GPIO8 是板载 I2C1 共享总线。LCD 背光、GT911、ES8311 和摄像头 SCCB 均使用相关板级 总线资源;修改引脚前需要同时检查实际硬件连接和对应示例的初始化代码。
I2C 和板载外设
板卡使用 GPIO7(SDA)和 GPIO8(SCL)连接多个 I2C 设备,默认频率为 400 kHz。不同示例使用的 I2C API 不同:
i2c和i2s使用 ArduinoWire1。mipi_dsi使用driver/i2c.h提供的 legacy API 控制 LCD 背光。mipi_csi使用Wire1建立新版i2c_master总线,并将总线句柄提供给摄像头 SCCB 和 LCD 背光。
不要在同一程序中混用这些示例的初始化方式。复杂示例的构建结果和硬件状态需要在目标板上单独确认, Arduino-ESP32 版本、LCD 面板型号或硬件连接变化后,不能直接套用当前配置。