本帖最后由 uint8_t 于 2020-8-22 20:57 编辑
前提:家里的墙壁开关里必须同时有零线和火线。 一:前期准备 1. 安装Arduino IDE 1.8.7或更新版本(目前最新版本为1.8.13) 2. Arduino IDE安装esp8266扩展 目前在线安装有点问题,推荐离线安装。下载链接:https://share.weiyun.com/5CGEKJO(来自Arduino论坛),目前最新版本为2.7.4。 安装好之后,打开Arduino IDE,打开【工具】,开发板选择就可以选择ESP8266了。 3.下载blinkerArduino库 下载链接:https://github.com/blinker-iot/blinker-library/archive/dev_3.0.zip 将下载好的blinker库解压到 我的电脑>文档>Arduino>libraries 文件夹中
4.下载并安装blinker APP 下载链接:https://github.com/blinker-iot/app-release/releases/download/2.4.7/blinker-2.4.7-release.apk (1)在app中添加设备,获取Secret Key 进入App,点击右上角的“+”号,然后选择添加设备,点击选择Arduino -> WiFi接入-> 选择要接入的服务商 -> 复制申请到的Secret Key
(2)DIY界面 在设备列表页,点击刚才新建的设备图标,进入设备控制面板。首次进入设备控制面板,会弹出向导页,在向导页点击载入示例,即可载入示例组件。点击右上角的修改,选择开关的按钮,样式选择中间那种,按键类型选择:开关按键,再点击有上角的保存。之后我们就可以通过这个按键来控制并查看灯。
5.硬件 我是使用的自己绘制的电路板,学习阶段可以使用Node-MCU,真正接入到墙壁里还是需要自己绘制板子,不然板子太大放不进去。
二:程序
- #define BLINKER_WIFI
- #define BLINKER_MIOT_LIGHT//支持小爱同学
- #include <Blinker.h>
- char auth[] = " ";//app中获取到的Secret Key(密钥)
- char ssid[] = " ";//WIFI名称
- char pswd[] = " ";//WIFI密码
- // 设置各引脚别名
- const int GPIO = 10; // 定义继电器输入引脚为GPIO/10
- const int KEY = 4; // 定义按键引脚
- // 变量定义
- int State = 0; // 存储按键状态的变量
- int led_state = 0;// 存储灯状态的变量
- // 新建组件对象
- BlinkerButton Button1("btn-abc");//注意:要和APP组件’数据键名’一致
- // 按下BlinkerAPP按键即会执行该函数
- void button1_callback(const String & state)
- {
- BLINKER_LOG("get button state: ", state);
- digitalWrite(GPIO, !digitalRead(GPIO));
- led_state = !led_state;
- if (led_state == 1)
- Button1.print("on");
- if (led_state == 0)
- Button1.print("off");
- Blinker.vibrate();
- }
- //小爱电源类操作的回调函数:
- //当小爱同学向设备发起控制, 设备端需要有对应控制处理函数
- void miotPowerState(const String & state)
- {
- BLINKER_LOG("need set power state: ", state);
- if (state == BLINKER_CMD_ON)
- {
- digitalWrite(GPIO, HIGH);
- BlinkerMIOT.powerState("on");
- BlinkerMIOT.print();
- led_state = 1;
- Button1.print("on");
- }
- else if (state == BLINKER_CMD_OFF)
- {
- digitalWrite(GPIO, LOW);
- BlinkerMIOT.powerState("off");
- BlinkerMIOT.print();
- led_state = 0;
- Button1.print("off");
- }
- }
- void setup()
- {
- // 初始化串口,并开启调试信息,调试用可以删除
- Serial.begin(115200);
- BLINKER_DEBUG.stream(Serial);
- // 初始化IO
- pinMode(GPIO, OUTPUT);
- digitalWrite(GPIO, LOW);
- pinMode(KEY, INPUT);
- digitalWrite(KEY, HIGH);
- State = digitalRead(KEY);
- led_state = 0;
-
- // 初始化blinker
- Blinker.begin(auth, ssid, pswd);
- Button1.attach(button1_callback);
- Button1.print("off");//发送APP上按键当前的状态
- //小爱同学务必在回调函数中反馈该控制状态
- BlinkerMIOT.attachPowerState(miotPowerState);//注册回调函数
- }
- void loop()
- {
- Blinker.run();
- if (digitalRead(KEY) != State)
- {
- delay(100);
- if (digitalRead(KEY) != State)
- {
- State = digitalRead(KEY);
- digitalWrite(GPIO, !digitalRead(GPIO));
- led_state = !led_state;
- if (led_state == 1)
- Button1.print("on");
- if (led_state == 0)
- Button1.print("off");
- delay(1000);
- }
- }
- }
复制代码三:程序分析及实物 将墙壁开关中间口接到GPIO4上,墙壁开关的另外两个口分别接GND和VCC,然后程序检测到4号脚上的状态发生改变,就对灯的状态进行取反。并且每次改变灯的状态时,将灯的状态反馈给APP。
|