语音助手"/>
桌面语音助手
功能需求:
- 语音控制台灯
- 语音控制…
- 将控制信息显示在oled屏幕上
问题
以前也做个类似的控制(小爱同学+esp8266+继电器) 但是这个缺点太大了. 不能免唤醒词 必须联网, 控制延迟也很大. 而且不能自定义回答
解决方案
淘宝上买了一个语音控制的模块(SU-03T), 离线语音, 免唤醒, 响应时间很快. 完美符合我的要求. 在线编程自己生成sdk,和固件.
思维导图
arduino代码
#include <Wire.h>// 引入驱动OLED0.96所需的库
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // 设置OLED宽度,单位:像素
#define SCREEN_HEIGHT 64 // 设置OLED高度,单位:像素
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);#include <SoftwareSerial.h> //软串口库
SoftwareSerial mySerial(2,3); 定义软串口,arduino的2号引脚作为RX,arduino的3号引脚作为TX,根据需要自行修改void setup()
{Serial.begin(9600);mySerial.begin(9600);display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}
void loop()
{DataJC();
}
//------读取串口
void DataJC(){if (mySerial.available() > 0) //检测软串口是否有数据{int val = 0;val = mySerial.read();//读出串数据Serial.println(val); //从主串口打开出来if (val == 161) {Serial.println("A1已开启");A1_on();}if (val == 162) {Serial.println("A1已关闭");A1_off();}if (val == 17) {Serial.println("响应");Emoji_1();}}
}
//表情:响应
void Emoji_1()
{display.clearDisplay();display.setTextColor(WHITE);display.setTextSize(4);display.setCursor(45, 10);display.print("Hi");display.display();delay(1000);display.clearDisplay();display.setTextColor(WHITE);display.setTextSize(4);display.setCursor(32, 10);display.print("o o");display.display();delay(1000);
}
//打开A1
void A1_on(){display.clearDisplay();display.setTextColor(WHITE);display.setTextSize(2);display.setCursor(0, 20);display.print("A1 >> on");display.display();//delay(2000);
}
//关闭A1
void A1_off(){display.clearDisplay();display.setTextColor(WHITE);display.setTextSize(2);display.setCursor(0, 20);display.print("A1 >> off");display.display();//delay(2000);
}
//向软串口输出数据
void send_cmd(int cmd){char mylist[9]={0xAA,0x55,0x01,0x01,0x00,0x00,0x00,0x55,0xAA};//设置发送列表//改变数值mylist[(int)(3)] = cmd; mySerial.write(mylist[(int)(0)]);mySerial.write(mylist[(int)(1)]);mySerial.write(mylist[(int)(2)]);mySerial.write(mylist[(int)(3)]);mySerial.write(mylist[(int)(4)]);mySerial.write(mylist[(int)(5)]);mySerial.write(mylist[(int)(6)]);mySerial.write(mylist[(int)(7)]);mySerial.write(mylist[(int)(8)]);
}
更多推荐
桌面语音助手
发布评论