一、硬件介绍
在AtomS3R-cam的AI视觉语音开发套件中,还有语音底座部件。在上一个帖子【ATOMS3R-CAMAICHATBOT】使用ESP-IDF驱动摄像头和WiFi图传-电子产品世界论坛中只是将控制器的摄像头利用起来,但是底座的麦克风和扬声器并未使用到。这次将底座的麦克风和扬声器全部用到。底座部件的图片和硬件参数如下

音频编解码器:ES8311(24位分辨率,采用I2S协议)
MEMS麦克风:MSM381A3729H9BPC
扬声器:2014型腔体喇叭:1W@8Ω
首先是确定硬件上有没有冲突。底座使用到的控制器引脚接口如下

与摄像头和六轴姿态传感器的引脚接口没有引脚的冲突,尤其是与摄像头的数据接口没有引脚冲突。可以实现语音和摄像头画面的同时驱动。
二、功能介绍
板卡上电初始化摄像头、六轴姿态传感器、麦克风和喇叭等外设。按照预设的WiFi进行联网,在同一个局域网下可以通过网页与AtomS3R-cam进行连接。可以实时查看摄像头画面和六轴姿态传感器数据。在下面可以设置是否接收AtomS3R-cam的麦克风数据至网页端进行播放,以及是否允许将电脑端的麦克风发送至AtomS3R-cam端进行播放。也可以选择本地的音频文件解析成AtomS3R-cam能播放的数据发送到AtomS3R-cam端进行播放。同时增加了可以实时修改AtomS3R-cam底座的扬声器音量,通过滑轨滑动方便修改,滑动后底座的扬声器音量会立即生效。在摄像头端也加了根据六轴姿态传感器自动调整摄像头画面,也可以手动左右90度进行调整。
三、工程源码
代码首先是对摄像头、六轴姿态传感器BMI270、底座麦克风和扬声器、WiFi和HTTP相关服务等。其中有控制数据(包含音频数据)传输和摄像头画面数据传输分为两个服务器同时运行,这两个服务器的端口也是不一样的。控制端口为80,摄像头数据端口为81。
main函数如下
void app_main(void)
{
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES ||
err ==ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
ESP_ERROR_CHECK(camera_init());
err = imu_init(websocket_send_imu);
if (err != ESP_OK) {
ESP_LOGE(TAG, "BMI270 unavailable; continuing without IMU: %s",
esp_err_to_name(err));
}
err = audio_init(websocket_send_microphone);
if (err != ESP_OK) {
ESP_LOGE(TAG,
"Atomic Voice Base unavailable;
camera still usable: %s",
esp_err_to_name(err));
}
ESP_ERROR_CHECK(wifi_init());
ESP_ERROR_CHECK(control_server_start());
ESP_ERROR_CHECK(stream_server_start());
ESP_LOGI(TAG, "Web UI
port %d,
MJPEG port %d",
CONFIG_ATOMS3R_HTTP_PORT,
CONFIG_ATOMS3R_MJPEG_PORT);
}main文件夹下还有底座麦克风和扬声器驱动文件audio.c和.h,AEC回音消除文件audio_aec.c和.h,六轴姿态传感器BMI270驱动文件imu.c和.h。

用到的ESP公共组件在managed_components和components文件夹下,具体如下


四、工程配置、编译和烧写
工程使用的是ESP-IDF V5版本创建的,我使用的是ESP-IDFV5.5.4版本进行编译和烧录的。打开ESP-IDF Powershell工具,进入到工程根目录下,需要先按照如下的方式进行工程配置,然后进行工程的编译和烧写
1、确认工程的目标芯片
idf.py set-target esp32s3
AtomS3R-cam使用的是ESP32S3,指令执行后会根据yml文件内容下载相关的组件文件。
2、工程配置
idf.py menuconfig
执行该指令可以进行工程的配置。进入如下界面进行常用的配置

主要的配置是WiFi连接的配置,配置界面如下

在此界面除了可以配置WiFi的账号和密码外,还可以配置摄像头的画面质量、网页数据获取的端口、底座扬声器的音量等。
3、工程编译
idf.py build
配置完之后可以执行该指令进行工程的编译,一般是编译没有错误的,如果有错误需要查看一下编译器版本或修改内容。
4、工程烧录
idf.py -p COMx flash monitor
将AtomS3R-cam通过数据线连接至电脑。需要将COMx的x改成实际的端口再执行。
五、效果展示
程序编译和烧录成功后,AtomS3R-cam接入底座上电后会通过串口打印外设初始化和WiFi连接情况。如果WiFi连接成功的话会打印设备的IP地址。通过在电脑的网页中输入对应的IP地址就可以连接AtomS3R-cam设备,连接成功后的页面如下。

页面的各种功能和功能介绍的使用方式是一样的。其中需要注意的是因为浏览器一般会拒绝电脑的麦克风,所以需要进行授权,授权方式为先在电脑上安装Python编译环境,然后在main文件夹下的web文件夹下打开cmd指令窗口,执行python -m http.server 8000指令。执行完成后可以使用浏览器打开web文件夹下的index.html文件,然后输入IP地址进行连接,这样就网页就可以使用电脑的麦克风了。

六、相关文件
工程源代码:链接: https://pan.baidu.com/s/12MogX2iEVPYxJkj7NWMgew?pwd=mynb 提取码: mynb
我要赚赏金
