语音控制舵机旋转角度
338字约1分钟
2024-11-07
为了实现这个业务,除了启动一个 ESP-AI 服务外,你还需要启动一个业务服务。用来传递 ESP-AI 服务和 硬件之间的控制指令。
Nodejs 代码
const config = {
gen_client_config: async (){
return {
intention: [
{
key: async (text = "") => {
// 这里你也可以用 nlp 服务匹配, 但是为了速度最好用正则
const pattern = /旋转(\d+)\%度/;
// 查找匹配项
const match = text.match(pattern);
if (match) {
return true;
}
},
instruct: ({ text }) => {
const pattern = /旋转(\d+)\%/;
const match = text.match(pattern);
const deg = match[1];
console.log("旋转角度:", deg);
// 直接传给业务服务,业务服务可再传给硬件,这样硬件就可以进行旋转了
// ...
},
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 == "deg") {
int deg = (const int *)parseRes["deg"];
Serial.print("控制舵机旋转");
Serial.println(deg);
}
}
break;
}
case WStype_ERROR:
Serial.println("业务服务 WebSocket 连接错误");
break;
}
}
void setup() {
Serial.begin(115200);
esp_ai.begin({ ... });
}
void loop() {
esp_ai.loop();
webSocket_yw.loop();
}
视频教程
录制中...