# smart_speaker_demo **Repository Path**: cb5654_sdk/smart_speaker_demo ## Basic Information - **Project Name**: smart_speaker_demo - **Description**: {"name": "smart_speaker_demo", "description": "智能音箱例程", "versions": "v7.4.0.1", "license": "Apache license v2.0", "type": "solution", "depends": ["aos", "aui_aliyunnls", "aui_cloud", "av", "button", "bt", "breeze", "cb5654", "cjson", "clock_alarm", "console", "csi", "chip_sc5654", "drivers", "drv_leds", "drv_sdmmc", "drv_snd_sc5654", "drv_wifi_rtl8723ds", "fatfs", "fct", "flac", "fota", "httpclient", "ipc", "kv", "littlefs", "lwip", "mbedtls", "mic", "minialsa", "minilibc", "netmgr", "ntp", "partition", "posix", "pvmp3dec", "record", "rhino", "smart_audio", "smartliving", "speexdsp", "transport", "vfs", "voice", "voice_mit", "webclient", "websocket", "wifi_provisioning", "yoc_sc5654"]} - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-02-03 - **Last Updated**: 2022-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1. 应用基础功能命令 ## 1.1 连接路由器 **WiFi配网** 默认为手机热点配网方式,可通过命令行切换其他配网方式。 ``` app wifi_prov ``` method:配网方式 - softap:手机热点网页配网 - dev_ap:阿里智能生活设备热点配网 - smartconfig:阿里智能生活一键配网 - ble:蓝牙辅助配网 **手机热点网页配网** 默认手机热点网页配网模式,长按S7按钮进入配网模式,用手机查看YoC开头的热点进行连接。连接后自动弹出授权界面,选择无线名称,并输入密码 **阿里智能生活配网** 打开手机云智能APP,扫描产品二维码后,进入配网界面,根据提示进行操作。 **命令行配网** ``` kv set wifi_ssid0 kv set wifi_psk0 #重启生效 ``` ## 1.2 切换云平台 例程对接阿里云(达摩院MinD版本)和酷旗云。 切换方法:更改`solutions/smart_speaker_demo/package.yaml`文件: ``` depends: ... - aui_aliyunnls: v7.4.0.1 //切换为阿里云(达摩院MinD版本) # - aui_coapi: v7.4.0.1 //切换为酷旗云 ``` 保留待用云,删除(或注释掉)另一个云,重新编译即可。不能同时使能两个云平台。 酷旗云上电后会默认播放开机音乐。 ## 1.3 LED控制指令(MIT_V2开发板适用) **呼吸灯** ``` app led_rgb ``` * led_id:0~2 * mode:0/1/2/3, off/on/flash/breath * dime:0~255 **排灯** ``` app led_array ``` * led_id:0~11/all * dime:0~255 ## 1.4 接口测试 **开启关闭PA功放** ``` app pa 0/1 ``` **GPIO输出测试** ``` gpio set 0/1 gpio get ``` * gpio_id:参考SDK文件:components/chip_sc5654/include/pin_name.h,PA0 = 0. **ADC 测试** 读取ADC采样值,PA1~PA6对应ADC 1~6 六个通道 ``` gpio adc 1~6 ``` **增益测试** 读取或设置 mic或 ref 的增益参数 ``` app gain mic read //读取mic的boost和analog增益 app gain mic set_boost < > //设置mic的boost增益 app gain mic set_analog < > //设置mic的analog增益 app gain ref read //读取ref的adc和dac增益 app gain ref set_adc < > //设置ref的adc增益 app gain ref set_dac < > //设置ref的dac增益 app gain pa read //读取pa的dac增益 app gain pa set < > //设置pa的dac增益 ``` ## 1.5 闹铃 **新增/修改闹铃** ```shell app clock set ``` * clock_id:闹铃ID。若该ID不存在闹铃,新增一个;否则修改该ID闹铃。若clock_id为0,则从未设置闹铃的ID中选择一个新增闹铃; * period:闹铃周期;0 - 只响一次,1 - 每天,2 - 每周,3 - 工作日 * \/\/\:时/分/秒 **删除闹铃** ```shell app clock del ``` * clock_id:闹铃ID **查询闹铃** ```shell app clock get ``` # 2. 音频播放命令 ## 2.1 基本播放命令 ``` #播放1K正弦波10s ai sin 10 #停止播放 ai stop 255 #播放内置通知音 ai notify 0~12 #音量调整 ai vol + ai vol - ai vol 60 #播放网络音频 ai play http://192.168.1.100/1.mp3 #播放SD卡音频,注意是三个杠 ai play file:///fatfs0/1.mp3 #播放CENC加密MP4资源(Major_Brand信息对应密钥) kv set ``` ## 2.2 修改提示音 集成的提示音在`app/sr/audio`目录中,支持wav和mp3,唤醒响应的提示音可用wav来提高响应速度。 修改提示音步骤如下: * 将声音放在`app/sr/audio/lfsdisk/lfs`目录下,使用`lfsdisk`命令生成新的lfs分区,并将lfs分区拷贝到`app/sr/audio`下。`lfsdisk`命令说明可参考:`app/sr/audio/lfsdisk/README.md` * 若提示音的文件名变化,修改`app/sr/audio/audio_res.h`文件中对应的宏定义 ## 2.3 EQ 功能 CB5654开发板默认使能EQ(MIT_V2默认关闭EQ),EQ开关,可以参考文件: `boards\silan\\include\board_config.h`: ``` #define APP_EQ_EN 1 /* 软件EQ使能配置 */ ``` 命令行配置示例 ``` #配置 ai eqparam "{100,-18.0,1.0}{200,-18.0,1.0}{400,-18.0,1.0}{1000,3.0,1.0}" #删除配置 ai eqparam null ``` # 3. 蓝牙命令 ## 3.1 蓝牙播歌 **开启a2dp** ``` a2dp start ``` **设置设备名称**(如果不设置 默认 name 为:5654-0001) ``` a2dp set_name ``` 等待手机连接设备,手机连上后,通过如下命令控制 **下一首** ``` a2dp play next ``` **上一首** ``` a2dp play prev ``` **停止播放** ``` a2dp play stop ``` **开始播放** ``` a2dp play start ``` **设置音量** ``` a2dp vol [0 - 100] ``` **关闭a2dp** ``` a2dp stop ``` ## 3.2 蓝牙配网 1. 首先登录[生活物联网平台](https://living.aliyun.com/?spm=a2c4g.11186623.2.16.5d7817bbIRECKU),创建项目及产品。具体步骤参考[生活物联网帮助文档-快速入门](https://help.aliyun.com/document_detail/142147.html?spm=a2c4g.11186623.6.562.216413e527b17O)。 2. 通过物联网平台获得五元组,设备按照如下命令烧录: ``` kv set hal_devinfo_dn kv set hal_devinfo_ds kv set hal_devinfo_pk kv set hal_devinfo_ps kv setint hal_devinfo_pid ``` 3. 进入蓝牙配网模式 ``` app wifi_prov ble ``` 4. 使用云智能app进行配网 # 4. 低功耗 系统默认没有开启低功耗 **开启低功耗** ```shell #配置好重启生效 kv setint lpm_en 1 ``` 开启低功耗之后,安静状态下,倒计时30秒进入低功耗VAD模式;若外界有声音唤醒 。通过修改宏`LPM_IDLE_CHECK_TIME`(位于`boards/silan//include/board_config`)修改倒计时时间。 **手动进入低功耗** ```shell #安静环境下输入下面命令,进入低功耗 app lpm ``` mode说明: * 1:VAD模式,可以通过语音/按键/闹钟唤醒 * 2:深度睡眠模式,可以通过按键唤醒 **模拟电源键开关机** 默认采用PA1的ADC S9键来作为电源键。系统正常运行时,长按ADC S9键进入standby深度睡眠,再次长按ADC S9系统唤醒并进入正常运行模式;ADC S9短按(及其他按键)可唤醒重启但是会立刻再次进入深度睡眠。 **休眠唤醒算法切换** 用户可切换两种休眠唤醒算法,只需修改`boards/silan//include/board_config`中对应宏开关 - 简单唤醒算法:占用SRAM内存资源少,无法区分人声和噪音 ``` #define CONFIG_TEST_LPMVAD 1 ``` - 复杂唤醒算法:占用SRAM内存资源多,可以区分人声和噪音 ``` #define CONFIG_MIT_LPMVAD 1 ``` # 5. 升级 系统默认60秒检查一次升级,升级需要进行如下配置 ``` #使能FOTA检测 kv setint fota_en 0/1 ``` 具体升级说明,参考文档:[FOTA使用说明](https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource/undefined/1586998915172/FOTA%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.pdf)。 # 6. 音频算法相关 ## 6.1 SD卡录制 ``` yv debug 2 # 开启录制声音传输 yv sdrec 1 # 开启SD卡录制 yv sdrec 0 # 停止SD卡录制 ``` ## 6.2 低功耗唤醒时刻数据录制 320K的sdram缓冲,双通道16K,16bit音频大概保存5s ``` yv debug 3 ... app lpm 1 ... #唤醒后等待 [DSP]Mem record full yv memrec 0 #等待Record End ``` ## 6.3 websocket录制 **PC端 - 启动websocket服务** ``` cd solutions/smart_speaker_demo/tools/record_server/ sudo python server.py : ./download ``` \是PC的本机IP地址,\是端口号,例如:192.168.50.1:8090 **设备端 - 开始录制麦克风数据** ``` yv debug 2 yv micrec start ws://: micdata.pcm ``` \和\与上一步保持一致 **设备端 - 停止录制** ``` yv micrec stop ``` ## 6.4 检查录制数据 * 录制完成后,在`download`目录下会生成xxxx_mic_micdata.pcm文件;包含5路数据:mic1/mic2/pa/aec1/aec2 * 数据格式如下: * 编码:Signed 16-bit PCM * 字节序:小尾端(little-endian) * 声道:5声道 * 采样率:16000Hz ## 6.5 手动开关麦克风(push to talk) 手动开启麦克风(带VAD检测): ``` yv p2t start ``` 不支持手动关闭麦克风。 # 7. SD卡 ## 7.1 SD卡使能 SD卡使能定义在`boards/silan//include/board_config`中: ``` #define CONFIG_SD_CARD_EN 1 /* SD卡使能 */ ``` ## 7.2 SD卡自动检测 如果系统有sd卡检测pin脚,检测sd卡是否存在: * 检测到sd存在,自动注册fatfs,否则不注册fatfs; * 如果系统没有sd卡检测机制,则自动注册fatfs - 存在sd卡则注册成功,否则注册失败 SD卡自动检测pin脚定义在`boards/silan//include/board_config`中: ``` #define SD_DETECT_PIN PC7 /* SD卡侦测pin口 GPIO1_16 */ #define SD_DETECT_FUNC PC7_SDIO_DET /* 该pin口的FUNC */ ``` ## 7.3 显示卡内文件 ``` ls /fatfs0/ ``` ## 7.4 SD卡文件上传下载 **下载网络文件至SD卡** ``` app http_download ``` * save directory:保存文件目录 * download url:下载URL,仅支持HTTP协议 **SD卡文件上传至主机** ``` #启动主机Websocket服务器(python版本3.5及以上) python ./tools/record_server/server.py ``` * ip:port:本机IP地址及websocket监听端口 * save dir:文件保存路径 ``` #发送SD卡文件至服务器 app ws_file_send ``` * host ip: 服务器IP地址 * port: 服务器Websocket服务端口 * file path: 待发送文件绝对路径 # 8. 其他 ## 8.1 WiFi高级命令 **修改mac地址** ``` iwpriv wifi_debug set_mac 00E04C87F004 ``` **获取mac地址** ``` iwpriv wifi_debug get_mac ``` ## 8.2 BT高级命令 **修改mac地址** ``` iwpriv wifi_debug set_bt_mac 00E04C87F004 ``` **获取mac地址** ``` iwpriv wifi_debug get_bt_mac ``` ## 8.3 切换开发板 例程支持CB5654开发板和达摩院MIT_V2开发板。如需切换开发板,需更改`solutions/smart_speaker_demo/package.yaml`文件: ``` hw_info: board_name: cb5654 // 若切换为mit_v2开发板,将'cb5654'改为‘mit_v2’ ... depends: ... - cb5654: v7.4.0.1 // 若切换为mit_v2开发板,将'cb5654'改为‘mit_v2’ ```