桌面语音助手

功能需求:

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
看大家都在参与,有很多很好的源码值得学习,我也来凑个热闹,眼前语音助手有的人可能会知道,不知道的功能介绍在下面,最要是自动家家触发系统,写这个系统的难点在于触发系统的设计思路和其稳定性,所以建议改动内核源码前用复件去改. 最新是写到桌面宠物和任务栏编辑框后来没写了(可能有BUG),因为又去写了一个机器聊天学习系统希望加入里面,但写出来发现这种大型数据学习系统真不是我这台I5处理器可以跑的动的,动不动就要跑半个月...后来又因为有的代码老是重复写就又去写了一个编程助手,跑题了,眼前语音助手是我真正定下心来写的第一个程序,所以你们可以从代码里看到我的一些学习过程,集成了百度和讯飞两种识别在里面, 经过测试讯飞识别率比百度高.大家用的时候最好编译出来,效率要高几倍.希望大家喜欢,谢谢大家 PS:为了大家拿到就可以用,所以里面有的东西没去掉,所以请善待作者不解释,相信大家 程序基于网络 大部分功能都需要连网,按F8键可以显示程序界面,请配合耳麦使用本程序,当你说话时程序界面上的分贝值跳动时证明耳麦连接正常。  重要:分贝过滤值 是用来过滤分贝的,也就是说你设为多少,那么声音必须大于这个,才可以有用.如果环境很吵,你可以设高些,具体就可以试验一下; 而过滤值下面那个数字,就是通过了分贝过滤限制的实时值。如果真的太吵,你可以把分贝过滤值设到很高,然后用手动模式,按F1手动模式,按一下开始说话,说完再按一下开始识别。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值