这次制作的是一个通过语音控制台灯的作品,主控是 FireBeetle ESP32,用于识别语音的是Gravity:I2C语音识别模块(DFR0715)【参考1】。
这款模块是 I2C接口,硬件连接非常简单,同时编程上也非常简单,首先设置需要识别的词语。例如:asr.addCommand("dakai deng guang",0); 表示当收到“打开灯光”之后输出0。接下来我们使用之前用过的 433Mhz 遥控开关【参考2】。基本思想就是:如果语音模块收到了对应的命令,那么通过433Mhz模块发送遥控指令,对应的 433Mh遥控开关会接收这个指令并且做出相应动作从而实现语音控制台灯。 首先进行硬件设计:
除了前面提到的主控和语音识别模块,这里还带有一个电池和充放电管理模块。这个充放电管理模块是基于IP5306的,用于实现CR123A可充电式锂电池【参考3】的管理。这款电池直径1.6cm高3.4cm,体积相当于18650 的一半,适用于一些对于体积要求较高的产品。 PCB设计上电池、电池管理模块和FireBeetle是放在背面的,其中为了方便用户查看管吃管理模块上的电量指示灯,左下角预留了一个长方形的阻焊层,这样指示灯灯光可以透过PCB在正面查看到。 3D 预览如下: 焊接之后成品:
硬件完成之后即可着手软件设计:
- #include "DFRobot_ASR.h"
- #include <RCSwitch.h>
-
- RCSwitch mySend = RCSwitch();
-
- #define Led 8 //定义Led引脚为8
-
- DFRobot_ASR asr;
-
- void setup()
- {
- Serial.begin(115200);
- pinMode(Led,OUTPUT); //初始化LED引脚为输出模式
- digitalWrite(Led,LOW); //LED引脚低电平
- /*
- begin函数有两个参数:
- 1)设置语音识别模式:1.LOOP(默认,循环模式) 2.PASSWORD(指令模式) 3.BUTTON(按钮模式)
- 2)选择模块的录音输入方式:1.MIC(默认,此时板载咪头和3.5mm输入接口工作)2.MONO(3.5mm外接音频输入接口工作)
- */
- asr.begin(asr.LOOP);
-
- asr.addCommand("da kai deng guang",0);
- asr.addCommand("guan bi deng guang",1);
-
- //开始识别
- asr.start();
- Serial.println("Start");
-
- mySend.enableTransmit(25);
-
- // Optional set protocol (default is 1, will work for most outlets)
- mySend.setProtocol(1);
-
- }
-
- void loop()
- {
- switch(asr.read()) //判断识别内容,在有识别结果的情况下asr.read()会返回识别到的词条编号,否则返回-1
- {
- case 0: //若是指令“da kai deng guang”
- digitalWrite(Led,HIGH); //点亮LED
- Serial.println("received'da kai deng guang',command flag'0'");//串口发送received"kai deng",command flag"0"
- mySend.send(7057192 , 24);
- break;
- case 1: //若是指令“guan bi deng guang”
- digitalWrite(Led,LOW); //熄灭LED
- Serial.println("received'guan bi deng guang',command flag'1'");//串口发送received"guan deng",command flag"1"
- mySend.send(7057188 , 24);
- break;
- }
- }
复制代码
其中的7057192和7057188分别是对应的433Mhz遥控插座的开和关。关于这个数值的解释可以在【参考4】看到。
参考:
|