失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 从零开始使用ESP8266 + Blinker 实现小爱同学可控可读取状态的多路插座

从零开始使用ESP8266 + Blinker 实现小爱同学可控可读取状态的多路插座

时间:2020-07-07 03:20:04

相关推荐

从零开始使用ESP8266 + Blinker 实现小爱同学可控可读取状态的多路插座

从零开始使用ESP8266 + Blinker 实现小爱同学可控可读取状态的多路插座

前言

一直对8266很感兴趣,放寒假嘛,也挺闲,刚好手头有原来买下的Nodemcu,就拿来做个多路开关

参考资料我会放到文章末尾

(渣渣新手练手的小东西,求大佬指导)

一.准备

1.硬件

nodemcu(ESP-12E)

双路光耦继电器

2.用到的开发软件

Arduino IDE

Blinker APP

3.小爱同学(我使用的是一个小爱闹钟)

4.准备环境

5.你自己 Ciallo~(∠・ω< )⌒★

二.安装相关Arduino库&申请Blinker Secret Key

1.安装相关库

esp8266 SDK -由于国内众所周知的原因,使用IDE直接安装不太可靠,你可以点击这里查看国内安装ESP8266 SDK的方法

Blinker Arduino库-你可以从Blinker官方文档-ESP8266&WIFI接入获取下载地址以及方法

2.申请Secret Key

打开Blinker APP,点击右上角的 “+”

选择独立设备

选择WiFi接入

通信服务商选择阿里云

复制Key

以下为流程图:

三.连接线路

1.继电器相关

在正式开始编程前,我们需要先了解一下继电器模块的模块参数以及说明

2.Nodemcu相关

通过查阅资料可以了解到Nodemcu在编程时可以直接使用PCB上的丝印来表示IO口

3.链接

GND-GND

IN1-D5

IN2-D6

VCC-VV (由开发板提供5V)

四.编写程序&烧写程序

1.源码

/* ******************************************************************* Download latest Blinker library here:* /blinker-iot/blinker-library/archive/master.zip* * * Blinker is a cross-hardware, cross-platform solution for the IoT. * It provides APP, device and server support, * and uses public cloud services for data transmission and storage.* It can be used in smart home, data monitoring and other fields * to help users build Internet of Things projects better and faster.* * Make sure installed 2.7.4 or later ESP8266/Arduino package,* if use ESP8266 with Blinker.* /esp8266/Arduino/releases* * Make sure installed 1.0.4 or later ESP32/Arduino package,* if use ESP32 with Blinker.* /espressif/arduino-esp32/releases* * Docs: https://diandeng.tech/doc* * * ****************************************************************** * Blinker 库下载地址:* /blinker-iot/blinker-library/archive/master.zip* * Blinker 是一套跨硬件、跨平台的物联网解决方案,提供APP端、设备端、* 服务器端支持,使用公有云服务进行数据传输存储。可用于智能家居、* 数据监测等领域,可以帮助用户更好更快地搭建物联网项目。* * 如果使用 ESP8266 接入 Blinker,* 请确保安装了 2.7.4 或更新的 ESP8266/Arduino 支持包。* /esp8266/Arduino/releases* * 如果使用 ESP32 接入 Blinker,* 请确保安装了 1.0.4 或更新的 ESP32/Arduino 支持包。* /espressif/arduino-esp32/releases* * 文档: https://diandeng.tech/doc* * * ******************************************************************** -使用ESP8266控制双路光耦继电器,可接入小米小爱,通过小爱控制&查询当前状态-** by Tracker* My blog:https://baichuan2077.top* *****************************************************************/#define BLINKER_WIFI#define BLINKER_MIOT_MULTI_OUTLET#include <Blinker.h>//继电器控制口int relay1 = D5;int relay2 = D6;bool oState[5] = {false }; //检测用char auth[] = "申请到的密匙";char ssid[] = "SSID";char pswd[] = "密码";// 新建组件对象BlinkerButton Button1("btn-1");BlinkerButton Button2("btn-2");// 按下按键1即会执行该函数void button1_callback(const String & state){BLINKER_LOG("get button1 state: ", state);digitalWrite(relay1, !digitalRead(relay1));//oState[1] = !(oState[1]);}// 如果未绑定的组件1被触发,则会执行其中内容void dataRead1(const String & data){BLINKER_LOG("Blinker readString: ", data);}// 按下按键2即会执行该函数void button2_callback(const String & state){BLINKER_LOG("get button2 state: ", state);digitalWrite(relay2, !digitalRead(relay2));//oState[2] = !(oState[2]);}// 如果未绑定的组件2被触发,则会执行其中内容void dataRead2(const String & data){BLINKER_LOG("Blinker readString: ", data);}void miotPowerState(const String & state, uint8_t num) //relay继电器电源状态{BLINKER_LOG("need set power state: ", state,"num-back", num);unsigned char i = 0; //初始化if(num == 1){i = relay1;}else if(num == 2){i = relay2;}if (state == BLINKER_CMD_ON) {digitalWrite(i, HIGH);BlinkerMIOT.powerState("on");BlinkerMIOT.print();digitalWrite(i, !digitalRead(i));oState[num] = true;}else if (state == BLINKER_CMD_OFF) {digitalWrite(i, LOW);BlinkerMIOT.powerState("off");BlinkerMIOT.print();digitalWrite(i, !digitalRead(i));oState[num] = false;}}void miotQuery(int32_t queryCode, uint8_t 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 setup(){// 初始化串口Serial.begin(115200);BLINKER_DEBUG.stream(Serial);BLINKER_DEBUG.debugAll();// 初始化IOpinMode(relay1, OUTPUT);digitalWrite(relay1, HIGH);pinMode(relay2, OUTPUT);digitalWrite(relay2, HIGH);// 初始化blinkerBlinker.begin(auth, ssid, pswd);Blinker.attachData(dataRead1); //获取1Blinker.attachData(dataRead2); //获取2Button1.attach(button1_callback); //按钮1Button2.attach(button2_callback); //按钮2BlinkerMIOT.attachPowerState(miotPowerState); //注册电源函数1BlinkerMIOT.attachQuery(miotQuery); //注册回调函数}void loop() {Blinker.run();}

2.烧录相关

开发板选择NodeMCU V1.0(ESP-12E Module)

其余保持默认即可

五.Blinker App &小爱绑定第三方设备

1.Blinker App配置相关

我在编写时添加了APP内的按钮控制,所以你也可以通过App来手动控制继电器通路状态

2.小米小爱绑定第三方设备

以我的小爱闹钟为例:

米家-我的-其他平台设备-右上角“添加”-选择“点灯科技”-绑定账户并同步设备

总结一下

最后我们可以通过小爱同学来控制插孔 以及查询插孔状态,还可以通过Blinker App来控制开关

语音指令例:

-打开插座插孔一

-插座插孔二的状态

由于我手头只有双路继电器,并不能展示更多路的控制

欢迎来我的博客玩 Ciallo~(∠・ω< )⌒★

My blog:https://baichuan2077.top/

使用到的参考资料:

点灯科技官方开发文档

nodeMCU 1.0简要数据手册

Arduino论坛参考帖-【智能取暖器DIY】ESP32+blinker接入小爱同学语音控制

Arduino论坛参考帖-小爱同学+Blinker如何控制多个继电器?

Blinker官方例程-MIOT_MULTI_OUTLET.ino

如果觉得《从零开始使用ESP8266 + Blinker 实现小爱同学可控可读取状态的多路插座》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。