语音控制音量调整
362字约1分钟
2024-11-07
开发者可以拿到用户说的每一句话,并且用来推理意图和执行决策。这里的决策通常包括:家电控制、设备本身控制、一切能够通信的设备控制。
得益于指令配置的灵活性,所以使用指令几乎无所不能。下面演示几个常见的场景。
Nodejs 代码
const config = {
gen_client_config: async (){
return {
intention: [
{
key: async (text = "") => {
const pattern = /音量调到(\d+)\%/;
// 查找匹配项
const match = text.match(pattern);
if (match) {
return true;
}
},
instruct: ({ text }) => {
const pattern = /音量调到(\d+)\%/;
const match = text.match(pattern);
const volumeLevel = match[1];
console.log("音量设置为:", volumeLevel);
// 直接传给业务服务,业务服务可再传给硬件,这样硬件就可以进行调整音量了
// ...
},
message: "好的"
}
]
}
}
}
Arduino 代码
#include <esp-ai.h>
ESP_AI esp_ai;
WebSocketsClient webSocket_yw;
// 连接业务服务
void webScoket_yw_main() {
Serial.println("开始连接业务 ws 服务\n");
// ws 服务
webSocket_yw.begin( "ip", "端口", "路径");
webSocket_yw.onEvent(webSocketEvent_ye);
}
void webSocketEvent_ye(WStype_t type, uint8_t *payload, size_t length) {
switch (type) {
case WStype_DISCONNECTED:
Serial.println("业务ws服务已断开\n");
break;
case WStype_CONNECTED:
{
Serial.println("√ 业务ws服务已连接\n");
break;
}
case WStype_TEXT:
{
JSONVar parseRes = JSON.parse((char *)payload);
if (JSON.typeof(parseRes) == "undefined") {
return;
}
if (parseRes.hasOwnProperty("type")) {
String type = (const char *)parseRes["type"];
if (type == "volume") {
int volume = (const int *)parseRes["volume"];
Serial.println(volume);
}
}
break;
}
case WStype_ERROR:
Serial.println("业务服务 WebSocket 连接错误");
break;
}
}
void setup() {
Serial.begin(115200);
esp_ai.begin({ ... });
}
void loop() {
esp_ai.loop();
webSocket_yw.loop();
}
同样,你可以用上面那套逻辑来实现任何指令。