桌面语音助手

功能需求:

  • 语音控制台灯
  • 语音控制…
  • 将控制信息显示在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)]);
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值