一、前期准备
1. D1 UNO R3 WIFI 开发板,2. 继电器3. 电源4. 小度音箱5. Blinker 账户6. 百度账户7. Arduino IDE8. Blinker library 0.3.49. ESP8266 开发板支持库 2.7.1
二、设备及接线图
三、程序
/******************************************** 本代码采用D1 UNO R3 WIFI + 继电器板通过测试*//************************************************************很多时候,#define 后只有一个参数,经常出现在头文件的开始处。解释:定义宏,并在预处理过程中将其替换为空字符串(即删除)。这样做主要是为了标记某些内容,使程序阅读者能够清楚标记表明的意义,同时又不影响被编译的源代码。也就是说,用法同define后接两个参数,只是后一个参数为空字符串。用途包括:(1)定义一个符号用来给#if(n)def判断。(2)多文件编译中防止头文件被重复包含。**********************************************************************/#define BLINKER_WIFI#define BLINKER_PRINT Serial//此句允许小度APP扫描到此设备#define BLINKER_DUEROS_OUTLET#include <Blinker.h>//设备连接BLINKER及家中的WIFIchar auth[] = \"Blink app生成的密钥\";char ssid[] = \"wifi名字\";char pswd[] = \"wifi密码\";bool oState = false;//Blinker APP中控制继电器的按钮BlinkerButton btn_TVP(\"btn-TVP\");int TV_Pin = D5;//与小度APP进行电源状态交互void duerPowerState(const String & state){BLINKER_LOG(\"need set power state: \", state);if (state == BLINKER_CMD_ON) {digitalWrite(TV_Pin, HIGH);BlinkerDuerOS.powerState(\"on\");BlinkerDuerOS.print();oState = true;}else if (state == BLINKER_CMD_OFF) {digitalWrite(TV_Pin, LOW);BlinkerDuerOS.powerState(\"off\");BlinkerDuerOS.print();oState = false;}}//用户自定义设备查询的回调函数:void duerQuery(int32_t queryCode){BLINKER_LOG(\"DuerOS Query codes: \", queryCode);switch (queryCode){case BLINKER_CMD_QUERY_ALL_NUMBER :BLINKER_LOG(\"DuerOS Query All\");BlinkerDuerOS.powerState(oState ? \"on\" : \"off\");BlinkerDuerOS.print();break;case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :BLINKER_LOG(\"AliGenie Query Power State\");BlinkerDuerOS.powerState(oState ? \"on\" : \"off\");BlinkerDuerOS.print();break;default :BlinkerDuerOS.powerState(oState ? \"on\" : \"off\");BlinkerDuerOS.print();break;}}void dataRead(const String & data){BLINKER_LOG(\"Blinker readString: \", data);Blinker.vibrate();uint32_t BlinkerTime = millis();Blinker.print(\"millis\", BlinkerTime);}//Blinker APP 按钮控制命令void btn_TVP_callback(const String & state) //点灯app内控制按键触发{BLINKER_LOG(\"get button state: \", state);digitalWrite(TV_Pin, !digitalRead(TV_Pin));}void setup(){Serial.begin(115200);//debug 命令BLINKER_DEBUG.stream(BLINKER_PRINT);BLINKER_DEBUG.debugAll();//继电器接入公共端和常开端口,电压初始化为低电压,接入高电压后吸合供电pinMode(TV_Pin, OUTPUT);digitalWrite(TV_Pin, LOW);Blinker.begin(auth, ssid, pswd);Blinker.attachData(dataRead);BlinkerDuerOS.attachPowerState(duerPowerState);BlinkerDuerOS.attachQuery(duerQuery);btn_TVP.attach(btn_TVP_callback);}void loop(){Blinker.run();}
以上程序基于Arduino IDE–实例–Blinker–Blinker_AliGenie–AliGenie_OUTLET修改而来。
Blinker APP 中设置一个按钮,命名为“btn_TVP”,语音设置:打开电视机–on,关闭电视机–off
四 、采过的坑
1. 关于开发板,最初想为了一步到位,买了带WIFI的D1开发板,结果发现与UNO R3的基础板有很大不同,为了找到相关资料饶了很多弯路。最终才找到了下图的参数
2. 在修改程序的过程中,一直处于修改,上传,修改,上传的境地,自己细心都不够,没有一次行修改完成。
五、目前修在的问题
1. 语音控制目前不稳定,初步怀疑为家里网络的质量差导致。