HonestQiao 发表于 2025-8-4 00:40:23

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的摄像头,正在适配中,适配完第一时间提供。

无垠的广袤 发表于 2025-8-8 23:47:30

牛~ 我打算用MicroPython固件接入小智,语音控制HA设备
页: [1]
查看完整版本: FireBeetle 2 ESP32 P4 适配小智AI