FireBeetle 2 ESP32 P4 适配小智AI
本帖最后由 HonestQiao 于 2025-8-4 14:31 编辑小智AI已经能够支持ESP32-P4芯片了,所以拿到FireBeetle 2 ESP32 P4开发板后,第一时间做了小智AI的适配。
下面分享具体的适配步骤。
如果只是想要烧录FireBeetle 2 ESP32 P4开发板的小智AI固件,可以直接快进到 **5. 在线烧录**
## 1. 开发板适配
首先,从 https://github.com/78/xiaozhi-esp32 下载小智AI官方的源码,并安装小智AI官方说明,完成ESP-IDF环境搭建。
然后,根据小智AI新增开发板的规则,建立 main/boards/df-p4-firebeetle2 目录,做为FireBeetle 2 ESP32 P4开发板的专属适配文件目录。
在该目录中,放置了三个文件,分别是:(具体见 https://github.com/HonestQiao/xi ... s/df-p4-firebeetle2 )
### 1). 开发板配置文件:config.json
```
{
"target": "esp32p4",
"builds": [
{
"name": "df-p4-firebeetle2",
"sdkconfig_append": [
"CONFIG_IOT_PROTOCOL_MCP=y"
]
}
]
}
```
这个文件用于描述开发板的芯片类型(target)、SKU名称(name)、以及默认的编译参数(sdkconfig_append)
### 2). 源码头文件:config.h
在这个头文件中,配置如下的信息:
#### 1. 音频输入和输出的采样率
直接配置为24000即可:
```
#define AUDIO_INPUT_SAMPLE_RATE24000
#define AUDIO_OUTPUT_SAMPLE_RATE 24000
```
#### 2. 麦克风的信号引脚
从官方WiKi中,可以得知这块开发板的麦克风的引脚如下:
注意,这个麦克风WiKi说明了,是:**MIC: MEMS PDM麦克风**,不是小智里面常用的I2S麦克风INMP441。
所以具体配置如下:
```
#define AUDIO_I2S_MIC_GPIO_SCKGPIO_NUM_12
#define AUDIO_I2S_MIC_GPIO_DINGPIO_NUM_9
```
#### 3. 音频输出功放模块的引脚
因为这次一起提供了扩展板,并提供了 MAX98357 I2S功放模块,所以我直接在扩展板上安排连接的引脚。
根据WiKi提供的MAX98357 I2S功放模块引脚信息:
可以看到,如果要使用这个I2S功放模块,用左边的VCC、GND、LRC、BCLK、DIN即可,然后把喇叭接在最上面的白色座子上即可。
再结合 扩展板引脚信息:
我使用了两种方案:
##### 方案0: 使用扩展板52、51、50引脚即可
| 扩展板引脚 | I2S功放模块引脚 | 说明 |
|---|---|:--|
| 52 | DIN | AUDIO_I2S_SPK_GPIO_DOUT |
| 51 | BCLK | AUDIO_I2S_SPK_GPIO_BCLK |
| 50 | LRC | AUDIO_I2S_SPK_GPIO_LRCK |
| GND | GND | 接地 |
| 3V3 | VCC | 供电 |
使用该方案,可以自由接线。
##### 方案1:使用扩展板SPI接口引脚
| 扩展板引脚 | I2S功放模块引脚 | 说明 |
|---|---|:--|
| 30 | DIN | AUDIO_I2S_SPK_GPIO_DOUT |
| 29 | BCLK | AUDIO_I2S_SPK_GPIO_BCLK |
| 28 | LRC | AUDIO_I2S_SPK_GPIO_LRCK |
| GND | GND | 接地 |
| 3V3 | VCC | 供电 |
默认使用该方案,是因为给I2S功放模块焊上母座后,可以直接插在扩展板的SPI接口使用,如下图:
对插的时候,让SPK+引脚落空即可,这样子其他的引脚都能对上,一插即合。
根据实际需要,选择对应的方案,具体配置信息如下:
```
#define AUDIO_I2S_SPK_USE_SPI_PORT1 // 0:使用自定义引脚1: 使用扩展板SPI接口引脚
#if ( AUDIO_I2S_SPK_USE_SPI_PORT != 1 )
#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_52
#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_51
#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_50
#else
#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_30
#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_29
#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_28
#endif
```
#### 4. LED和按钮配置
根据功能引脚定义,直接使用如下引脚即可:
```
#define BUILTIN_LED_GPIO GPIO_NUM_3
#define BOOT_BUTTON_GPIO GPIO_NUM_35
```
#### 5. 屏幕引脚配置
FireBeetle 2 ESP32 P4开发板支持树莓派4B兼容的DSI屏幕,不过还在适配中,所以先提供了常见屏幕的支持,如果ST7789、ST7735、ST7796、ILI9341、GC9A01,也可以根据实际情况自定义屏幕。
屏幕部分需要的引脚较多,使用了扩展板顶部的引脚(连续),具体配置如下:
```
#define DISPLAY_CLK_PIN GPIO_NUM_4
#define DISPLAY_MOSI_PIN GPIO_NUM_5
#define DISPLAY_RST_PIN GPIO_NUM_20
#define DISPLAY_DC_PIN GPIO_NUM_21
#define DISPLAY_CS_PIN GPIO_NUM_22
#define DISPLAY_BACKLIGHT_PIN GPIO_NUM_23
```
具体的屏幕参数的定义,请查看config.h文件本身了解即可。
### 3). 开发板适配核心代码:df_p4.cc
在 该文件中,定义了FireBeetle 2 ESP32 P4开发板对应的类: DfrobotFireBeetle2ESP32P4,包括屏幕(InitializeLcdDisplay)、按钮(InitializeButtons)初始化调用,以及LED(GetLed)、音频(GetAudioCodec)、屏幕(GetDisplay)、背光(GetBacklight)的调用接口。
因为FireBeetle 2 ESP32 P4开发板使用的是PDM麦克风,所以音频部分,使用了NoAudioCodecSimplexPdm。
## 2. Kconfig 配置文件适配
### 1). 开发板列表中添加 DFRobot FireBeetle 2 ESP32-P4
```
choice BOARD_TYPE
config BOARD_TYPE_DF_K10
bool "DFRobot 行空板 k10"
depends on IDF_TARGET_ESP32S3
config BOARD_TYPE_DF_S3_AI_CAM
bool "DFRobot ESP32-S3 AI智能摄像头模块"
depends on IDF_TARGET_ESP32S3
config BOARD_TYPE_DF_P4_FIREBEETLE2
bool "DFRobot FireBeetle 2 ESP32-P4"
depends on IDF_TARGET_ESP32P4
endchoice
```
### 2). 屏幕类型中,添加 BOARD_TYPE_DF_P4_FIREBEETLE2
```
choice DISPLAY_LCD_TYPE
depends on BOARD_TYPE_BREAD_COMPACT_WIFI_LCD || BOARD_TYPE_BREAD_COMPACT_ESP32_LCD || BOARD_TYPE_ESP32_CGC || BOARD_TYPE_ESP32P4_NANO || BOARD_TYPE_ESP32P4_WIFI6_Touch_LCD_XC || BOARD_TYPE_BREAD_COMPACT_WIFI_CAM || BOARD_TYPE_DF_P4_FIREBEETLE2
prompt "LCD Type"
default LCD_ST7789_240X320
```
添加上述部分后,在配置屏幕菜单中,就可以选择对应的屏幕了。
## 3. CMakeLists.txt 项目构建配置
直接添加如下配置即可:
```
elseif(CONFIG_BOARD_TYPE_DF_K10)
set(BOARD_TYPE "df-k10")
elseif(CONFIG_BOARD_TYPE_DF_S3_AI_CAM)
set(BOARD_TYPE "df-s3-ai-cam")
elseif(CONFIG_BOARD_TYPE_DF_P4_FIREBEETLE2)
set(BOARD_TYPE "df-p4-firebeetle2")
```
## 4. 配置编译
进过以上的适配后,就可以进行编译了。
在编译之前,首先需要设置芯片类型:
```
idf.py set-target esp32p4
```
再运行配置选择开发板和屏幕类型:
```
idf.py menuconfig
```
然后就可以执行编译命令了:
```
idf.py build
```
编译完成之后,就可以进行烧录运行了:
```
idf.py flash monitor
```
## 5. 在线烧录
如果没有编译环境的话,可以访问网址:https://web.esphome.io/ 进行烧录。
烧录前,请先下载附件文件并解压备用,然后检查功放模块是否按如下方式进行连接:
默认的固件,使用了ST7789_240X320_NO_IPS屏幕,但不接屏幕亦可使用。如果需要定制其他的屏幕,可以自行配置并编译代码,或者联系我代为定制编译。
### 1). 连接开发板
打开上述网址后,点 CONNECT ,然后选择开发板对应的设备进行连接:
### 2). 选择固件
点 INSTALL 选择固件:
### 3). 烧录固件
点击上一步的INSTALL,然后等待烧录完成即可使用:
## 6. 运行效果
### 1). 配网
首次运行的时候,会语音提示“进入配网模式”,显示如下的界面:
用手机连接Xiaozhi_开头的WiFi名称:
连接成功后,会自动打开配网页面:
根据当前网络情况,选择列表中对应的网络,输入密码,点击连接即可。
如果连接成功,会出现如下的界面:
开发板重启后,屏幕将会显示:
### 2). 激活设备
如果是首次唤醒的话,还会语音提醒和显示激活码:
此时,可以到 https://xiaozhi.me 添加智能体并进行绑定。
### 4). 与小智AI对话
一切完成后,喊一声你好小智,就可以唤醒对话了:
## 7. 补充说明
支持树莓派4B兼容的屏幕,以及兼容兼容树莓派4B的摄像头,正在适配中,适配完第一时间提供。
牛~ 我打算用MicroPython固件接入小智,语音控制HA设备
页:
[1]