用ESP8266和小爱同学语音实现智能开关
通过ESP8266模块与Blinker对接,并接入小爱同学,实现语音控制
1. 硬件准备
- ESP8266开发板
- 继电器
- 烧入设备CH340
- 220V转5V电灯
- 一条充电器线
2. 软件准备
-
Arduino IDE和ESP8266 扩展包Arduino IDE默认没有集成ESP8266扩展包,因此需要单独安装。扩展包可以通过Arduino IDE中开发板管理器安装,也可以使用离线安装包。安装扩展包后,即可在Arduino IDE菜单 > 工具 > 开发板中选择对应的开发板


- WIFI接入,并选择阿里云.生成
key
4. 烧录
-
#define BLINKER_WIFI#define BLINKER_MIOT_LIGHT//小爱同学#include <Blinker.h>char auth[] = "f00c2c8069d2"; //Keychar ssid[] = "H3C_3AAF1E";char pswd[] = "trj19611120";bool wsState;uint8_t wsMode = BLINKER_CMD_MIOT_DAY;BlinkerButton ButtonAll("btn-lightAll"); //定义按钮数据BlinkerButton ButtonR("btn-lightR"); //定义按钮数据BlinkerButton ButtonG("btn-lightG"); //定义按钮数据BlinkerButton ButtonB("btn-lightB"); //定义按钮数据BlinkerButton ButtonOffAll("btn-unlightAll");BlinkerButton ButtonOffR("btn-unlightR");BlinkerButton ButtonOffG("btn-unlightG");BlinkerButton ButtonOffB("btn-unlightB");BlinkerButton Button3("btn-aaa");bool oState = false;int counter = 0;void miotPowerState(const String & state){BLINKER_LOG("need set power state: ", state);if (state == BLINKER_CMD_ON) { //小爱同学控制开命令digitalWrite(5, LOW);digitalWrite(4, LOW);digitalWrite(0, LOW);BlinkerMIOT.powerState("on");BlinkerMIOT.print();oState = true;}else if (state == BLINKER_CMD_OFF) { //小爱同学控制关命令digitalWrite(5,HIGH);digitalWrite(4,HIGH);digitalWrite(0,HIGH);BlinkerMIOT.powerState("off");BlinkerMIOT.print();oState = false;}}void miotMode(uint8_t mode){BLINKER_LOG("need set mode: ", mode);if (mode == BLINKER_CMD_MIOT_DAY) { //红色digitalWrite(5, LOW);digitalWrite(4, HIGH);digitalWrite(0, HIGH);}else if (mode == BLINKER_CMD_MIOT_NIGHT) { //绿色digitalWrite(5, HIGH);digitalWrite(4, LOW);digitalWrite(0, HIGH);// Your mode function}else if (mode == BLINKER_CMD_MIOT_COLOR) { //蓝色digitalWrite(5, HIGH);digitalWrite(4, HIGH);digitalWrite(0, LOW);}else if (mode == BLINKER_CMD_MIOT_WARMTH) { //黄色digitalWrite(5, LOW);digitalWrite(4, LOW);digitalWrite(0, HIGH);}else if (mode == BLINKER_CMD_MIOT_TV) { //紫色digitalWrite(5, LOW);digitalWrite(4, HIGH);digitalWrite(0, LOW);}else if (mode == BLINKER_CMD_MIOT_READING) { //青色digitalWrite(5, HIGH);digitalWrite(4, LOW);digitalWrite(0, LOW);}else if (mode == BLINKER_CMD_MIOT_COMPUTER) {digitalWrite(5, HIGH);digitalWrite(4, HIGH);digitalWrite(0, LOW);}wsMode = mode;BlinkerMIOT.mode(mode);BlinkerMIOT.print();}void miotQuery(int32_t queryCode) //小爱同学控制{BLINKER_LOG("MIOT Query codes: ", queryCode);switch (queryCode){case BLINKER_CMD_QUERY_ALL_NUMBER :BLINKER_LOG("MIOT Query All");BlinkerMIOT.powerState(oState ? "on" : "off");BlinkerMIOT.print();break;case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :BLINKER_LOG("MIOT Query Power State");BlinkerMIOT.powerState(oState ? "on" : "off");BlinkerMIOT.print();break;default :BlinkerMIOT.powerState(oState ? "on" : "off");BlinkerMIOT.print();break;}}void dataRead(const String & data) // 如果未绑定的组件被触发,则会执行其中内容{BLINKER_LOG("Blinker readString: ", data);Blinker.vibrate();uint32_t BlinkerTime = millis();Blinker.print("millis", BlinkerTime);}void buttonAll_callback(const String & state) //点灯app内控制按键触发{digitalWrite(5,LOW);digitalWrite(4,LOW);digitalWrite(0,LOW);BLINKER_LOG("get button state:on", state);}void buttonR_callback(const String & state) //点灯app内控制按键触发{digitalWrite(5,LOW);BLINKER_LOG("get button state:on", state);}void buttonG_callback(const String & state) //点灯app内控制按键触发{digitalWrite(4,LOW);BLINKER_LOG("get button state:on", state);}void buttonB_callback(const String & state) //点灯app内控制按键触发{digitalWrite(0,LOW);BLINKER_LOG("get button state:on", state);}void buttonOffAll_callback(const String & state) //点灯app内控制按键触发{digitalWrite(5,HIGH);digitalWrite(4,HIGH);digitalWrite(0,HIGH);BLINKER_LOG("get button state:off", state);}void buttonOffR_callback(const String & state) //点灯app内控制按键触发{digitalWrite(5,HIGH);BLINKER_LOG("get button state:off", state);}void buttonOffG_callback(const String & state) //点灯app内控制按键触发{digitalWrite(4,HIGH);BLINKER_LOG("get button state:off", state);}void buttonOffB_callback(const String & state) //点灯app内控制按键触发{digitalWrite(0,HIGH);BLINKER_LOG("get button state:off", state);}void button3_callback(const String & state) //点灯app内控制按键触发{BLINKER_LOG("get button state:on", state);Blinker.print(state);if(state=="on"){digitalWrite(5,LOW);// Button3.print("on");}else if(state =="off"){digitalWrite(5,HIGH);// Button3.print("off");}}void setup(){Serial.begin(115200);BLINKER_DEBUG.stream(Serial);pinMode(5, OUTPUT); //定义io口为输出pinMode(4, OUTPUT); //定义io口为输出pinMode(0, OUTPUT); //定义io口为输出digitalWrite(5, HIGH); //定义io默认为高电平digitalWrite(4, HIGH); //定义io默认为高电平digitalWrite(0, HIGH); //定义io默认为高电平wsState = true;Blinker.begin(auth, ssid, pswd);Blinker.attachData(dataRead);BlinkerMIOT.attachPowerState(miotPowerState);BlinkerMIOT.attachMode(miotMode);BlinkerMIOT.attachQuery(miotQuery);ButtonAll.attach(buttonAll_callback);ButtonR.attach(buttonR_callback);ButtonG.attach(buttonG_callback);ButtonB.attach(buttonB_callback);;ButtonOffAll.attach(buttonOffAll_callback);ButtonOffR.attach(buttonOffR_callback);ButtonOffG.attach(buttonOffG_callback);ButtonOffB.attach(buttonOffB_callback);Button3.attach(button3_callback);}void loop(){Blinker.run();}
- 点击开发者管理器搜索8266选择安装 (不建议选最新版本)


5. 移动端
- 烧入成功后,打开电灯科技APP,设备在线

+
- 电灯与继电器接线

- 通过以上方式,就可以在APP上进行基本的控制开关了
6. 语音控制

小爱APP
- 以上,便实现了全部的软件控制与语音控制,感兴趣的小伙伴可以试一下,成本大概20左右。