使用Blinker+NodeMCU接入语音助手控制多路接口 | 您所在的位置:网站首页 › 华为语音模块 › 使用Blinker+NodeMCU接入语音助手控制多路接口 |
-本文适合于进阶开发,初学者对于如何使用NodeNCU连接WIFI,以及Blinker APP的使用可以移步Blinker官网,网络上也不乏此类教程。但是官方给出的教程以及网上流传的资料针对做一些小实验,过于平淡,关于如何运用此套系统解决实际中“智能家居”的控制问题没有太多介绍。 对于想利用“小米小爱”、“天猫精灵”、“百度小度”等语音设备控制多路开关设备,官方文档似乎并没有提出解决方案。为此我针对官方的程序进行了一定的升级优化,提出了一种能接入“小米小爱”控制多路开关设备解决方案。 如何利用语音助手控制多路开关设备一、首先我给出控制一路开关设备的程序,便于大家对照。 ```c #define BLINKER_PRINT Serial #define BLINKER_WIFI #define BLINKER_MIOT_LIGHT #include char auth[] = "******"; char ssid[] = "******"; char pswd[] = "******"; void miotPowerState(const String & state) { BLINKER_LOG("need set power state: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(LED_BUILTIN, LOW); BlinkerMIOT.powerState("on"); BlinkerMIOT.print(); } else if (state == BLINKER_CMD_OFF) { digitalWrite(LED_BUILTIN, HIGH); BlinkerMIOT.powerState("off"); BlinkerMIOT.print(); } } void setup() { Serial.begin(115200); #if defined(BLINKER_PRINT) BLINKER_DEBUG.stream(BLINKER_PRINT); #endif pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); Blinker.begin(auth, ssid, pswd); BlinkerMIOT.attachPowerState(miotPowerState); } void loop() { Blinker.run(); }不难发现,此类算法只能控制一路开关接口。 二、那么如何控制多路开关接口呢? #define BLINKER_WIFI #define BLINKER_MIOT_MULTI_OUTLET //设置为小爱多个插座的模式 #include char i; char auth[] = "******"; char ssid[] = "******"; char pswd[] = "******"; bool oState[5] = { false }; void miotPowerState(const String & state, uint8_t num) { BLINKER_LOG("need set outlet: ", num, ", power state: ", state); i=0; //初始化 重要!! if(num==1) { i=D1; } else if(num==2) { i=D2; } else if(num==3) { i=D3; } if (state == BLINKER_CMD_ON) { digitalWrite(i, LOW); BlinkerMIOT.powerState("on", num); BlinkerMIOT.print(); oState[num] = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(i, HIGH); BlinkerMIOT.powerState("off", num); BlinkerMIOT.print(); oState[num] = false; if (num == 0) { for (uint8_t o_num = 0; o_num BLINKER_LOG("AliGenie Query outlet: ", num,", codes: ", queryCode); switch (queryCode) { case BLINKER_CMD_QUERY_ALL_NUMBER : BLINKER_LOG("MIOT Query All"); BlinkerMIOT.powerState(oState[num] ? "on" : "off", num); BlinkerMIOT.print(); break; case BLINKER_CMD_QUERY_POWERSTATE_NUMBER : BLINKER_LOG("MIOT Query Power State"); BlinkerMIOT.powerState(oState[num] ? "on" : "off", num); BlinkerMIOT.print(); break; default : BlinkerMIOT.powerState(oState[num] ? "on" : "off", num); BlinkerMIOT.print(); break; } } void dataRead(const String & data) { BLINKER_LOG("Blinker readString: ", data); Blinker.vibrate(); uint32_t BlinkerTime = millis(); Blinker.print("millis", BlinkerTime); } void setup() { Serial.begin(115200); BLINKER_DEBUG.stream(Serial); pinMode(D1, OUTPUT); digitalWrite(D1, HIGH); pinMode(D2, OUTPUT); digitalWrite(D2, HIGH); pinMode(D3, OUTPUT); digitalWrite(D3, HIGH); Blinker.begin(auth, ssid, pswd); Blinker.attachData(dataRead); BlinkerMIOT.attachPowerState(miotPowerState); BlinkerMIOT.attachQuery(miotQuery); } void loop() { Blinker.run(); }经过本人测试,此算法可以通过语音助手控制至少5路接口,大大提高了控制效率,让使用一块NodeMCU控制整个家庭的智能设备成为了可能! APP截图如下: 详情请关注亿航创客官方抖音账号:EhangGroup |
CopyRight 2018-2019 实验室设备网 版权所有 |