最近做了一款语音识别的App,想着利用手机控制arduino实现RGB的调节,开发思路:基于讯飞语音识别做一款能识别我们语音的App,识别出语音之后,对应的文字转UTF-8编码,通过蓝牙串口通讯发送到arduino,实现对RGB的控制。
优点:
1、相对于LD3320语音识别模块成本更低
2、误识别率低
软件下载地址
硬件只需 arduino主控模块、蓝牙模块、RGB灯、可联网的智能手机,就能用语音控制RGB变换各种颜色。
具体效果请观看下面的视频
1、进入app界面后点击搜索蓝牙设备
2、找到你蓝牙设备的名称点击就可以连上了
3、连接上蓝牙之后的界面如下,先点击初始化然后才能点击开始语音识别(建议使用网络引擎)
识别的语音文件显示的是对应你点击开始语音识别按钮说的话
发送到蓝牙的数据这是对应语音文本的UTF-8编码
蓝牙模块和arduino UNO连线
//Arduino串口读取蓝牙接收到的语音文本的UTF-8编码的例程(汉字的UTF-8编码可以通过https://www.qqxiuzi.cn/bianma/guojima.php查询) char x;//缓存函数 String comdata = "";//字符串函数 void setup() { Serial.begin(115200);//打开串口波特率115200 } void loop() { if (Serial.available() > 0)//判读是否串口有数据 { comdata = "";//缓存清零 while (Serial.available() > 0)//循环串口是否有数据 { x = Serial.read(); comdata += x;//叠加数据到comdata delay(2);//延时等待响应 } if (comdata.length() > 0)//如果comdata有数据 { Serial.println(comdata);//打印comdata数据 } } }
123456789101112131415161718192021222324252627视频中演示效果的程序
/* * 通过语音APP控制RGB * */ #include <avr/pgmspace.h> #include <Adafruit_NeoPixel.h> #define red 16711680 //红色 #define blue 153 //蓝色 #define yellow 16777011 //黄色 const char string_0[] PROGMEM = "E68993E5BC80E7BAA2E889B2E79A84E781AF"; //红色utf-8编码 打开红色的灯 // "String 0" etc are strings to store - change to suit. const char string_1[] PROGMEM = "E68993E5BC80E8939DE889B2E79A84E781AF"; //蓝色utf-8编码 打开蓝色的灯 const char string_2[] PROGMEM = "E9BB84E889B2"; //黄色 const char string_3[] PROGMEM = "101X"; const char string_4[] PROGMEM = "102X"; const char string_5[] PROGMEM = "String 5"; const char string_6[] PROGMEM = "String 6"; char x;//缓存函数 String comdata = "";//字符串函数 bool flag; const char* const string_table[] PROGMEM = { string_0, string_1, string_2, string_3, string_4, string_5, string_6 }; char buffer1[30]; // make sure this is large enough for the largest string it must hold Adafruit_NeoPixel rgb_display_3 = Adafruit_NeoPixel(16, 3, NEO_GRB + NEO_KHZ800); void RGB_show(long x) { rgb_display_3.setBrightness(50); for (int i = 1; i <= 16; i = i + (1)) { rgb_display_3.setPixelColor(i - 1, x); rgb_display_3.show(); } } void setup() { Serial.begin(115200); rgb_display_3.begin(); flag = false; rgb_display_3.setBrightness(0); for (int i = 1; i <= 16; i = i + (1)) { rgb_display_3.setPixelColor(i - 1, 0x000000); rgb_display_3.show(); } } void loop() { if (Serial.available() > 0)//判读是否串口有数据 { flag = true; comdata = "";//缓存清零 while (Serial.available() > 0)//循环串口是否有数据 { x = Serial.read(); if (x != '%' ) { comdata += x;//叠加数据到comdata delay(2);//延时等待响应 } } if (comdata.length() > 0)//如果comdata有数据 { Serial.println(comdata);//打印comdata数据 } } if (flag) { for (int i = 0; i < 7; i++) { strcpy_P(buffer1, (char*)pgm_read_word(&(string_table[i]))); if (String(buffer1) == comdata) { Serial.println(String(buffer1)); Serial.println(i); switch(i) { case 0:RGB_show(red);break; case 1:RGB_show(blue);break; case 2:RGB_show(yellow);break; } } } flag = false; } }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105智能语音APP控制arduino实现RGB灯的控制