跳到主要内容

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 开发,想要快速上手?我们为您准备了一套通用的 入门教程

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

配置 Arduino 开发环境

1. 安装 Arduino IDE

请参考 Arduino IDE 开发环境搭建教程 安装 Arduino IDE,并添加 ESP32 开发板支持。

2. 安装 Arduino-ESP32 和板卡定义

  1. 安装 Arduino-ESP32 3.3.11。示例代码和板卡定义按该版本整理,不要将本目录中的板卡文件与其他版本混用。
  2. 将示例程序包中的 examples/Arduino/esp32/variants/waveshare_esp32_p4_nano_wifi6_db 复制到 Arduino-ESP32 安装目录下的 variants 目录。
  3. examples/Arduino/esp32/boards.txt 是基于 Arduino-ESP32 3.3.11boards.txt 快照。如果 Arduino-ESP32 安装目录没有其他本地板卡修改,可以备份原文件 后替换;如果已经添加过其他板卡,只合并 waveshare_esp32_p4_nano_wifi6_db 对应条目。
  4. 重启 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通过串口命令交互测试 GPIOArduino-ESP32 Console
i2c扫描 I2C1 总线上的 7 位地址Wire1、I2C1
i2sES8311 单麦克风到单扬声器的音频回环ES8311、板载麦克风和扬声器
sdmmc以 4-bit 模式测试 microSD 文件读写板载 microSD 卡
mipi_dsi显示 MIPI-DSI 色条并测试背光LCD 面板、背光控制器
mipi_csi将 OV5647 摄像头画面显示到 MIPI-DSI LCDOV5647、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 总线,默认参数如下:

项目参数
SDAGPIO7
SCLGPIO8
频率400 kHz
地址格式7 位 I2C 地址

该总线由 ES8311、LCD 背光控制器、GT911 和摄像头 SCCB 等设备共享。扫描时不要同时运行其他会 初始化 I2C1 的示例。没有设备响应时,程序不会将其列为设备,这不表示扫描程序异常。

i2s:ES8311 音频回环

打开 i2s/i2s.ino 并上传,使用板载麦克风和扬声器运行单声道音频回环。示例以 48 kHz、16-bit、 I2S 标准单声道格式运行,使用左声道 slot。

信号GPIO
MCLKGPIO13
BCLKGPIO12
LRCKGPIO10
DOUTGPIO9
DINGPIO11
功放使能GPIO53,高电平打开

ES8311 的 Arduino Wire1 控制地址为 7 位地址 0x18。如果串口没有输出 ES8311 ready,或出现 回环无声音的情况,请检查 I2C 地址、MCLK、功放使能以及麦克风和扬声器连接。麦克风与扬声器距离 过近时可能产生声学啸叫。

sdmmc:microSD 文件读写

插入 microSD 卡后打开 sdmmc/sdmmc.ino 并上传。示例使用 4-bit SDMMC 接口挂载卡片,读取容量, 并对根目录的 /arduino_test.txt 文件执行写入和读取测试。

信号GPIO
CLKGPIO43
CMDGPIO44
D0-D3GPIO39、GPIO40、GPIO41、GPIO42
卡电源控制GPIO45,低电平打开

挂载失败时,检查 microSD 卡是否插入、格式是否可识别,以及 SDMMC 引脚是否被其他示例占用。

mipi_dsi:MIPI-DSI LCD

mipi_dsi 使用项目本地 LCD 驱动初始化 MIPI-DSI 面板,循环显示水平和垂直色条,并通过 I2C 背光控制器验证 LCD 背光。

运行前安装或确认以下库及版本:

版本
ESP32_Display_Panel1.0.4
ESP32_IO_Expander1.1.1
esp-lib-utils0.2.3

mipi_dsi/esp_panel_drivers_conf.h 中只选择一个本地 LCD 驱动:

  • ESP_PANEL_DRIVERS_LCD_ENABLE_JD9365_LOCAL
  • ESP_PANEL_DRIVERS_LCD_ENABLE_HX8394_LOCAL
  • ESP_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_csimipi_dsii2si2c 对 I2C1 的初始化方式不同,不要在同一个 Arduino 工程中 同时运行这些示例,或重复初始化同一条总线。

板级资源和共享接口

板卡引脚别名

Arduino 板卡变体提供以下常用引脚别名:

接口引脚
SDA / SDA1GPIO7
SCL / SCL1GPIO8
SSGPIO26
MOSIGPIO32
MISOGPIO33
SCKGPIO36
UART TX / RXGPIO37 / GPIO38

GPIO7 和 GPIO8 是板载 I2C1 共享总线。LCD 背光、GT911、ES8311 和摄像头 SCCB 均使用相关板级 总线资源;修改引脚前需要同时检查实际硬件连接和对应示例的初始化代码。

I2C 和板载外设

板卡使用 GPIO7(SDA)和 GPIO8(SCL)连接多个 I2C 设备,默认频率为 400 kHz。不同示例使用的 I2C API 不同:

  • i2ci2s 使用 Arduino Wire1
  • mipi_dsi 使用 driver/i2c.h 提供的 legacy API 控制 LCD 背光。
  • mipi_csi 使用 Wire1 建立新版 i2c_master 总线,并将总线句柄提供给摄像头 SCCB 和 LCD 背光。

不要在同一程序中混用这些示例的初始化方式。复杂示例的构建结果和硬件状态需要在目标板上单独确认, Arduino-ESP32 版本、LCD 面板型号或硬件连接变化后,不能直接套用当前配置。