基于blinker和ESP8266的智能排插-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10094|回复: 17

[分享] 基于blinker和ESP8266的智能排插

[复制链接]
发表于 2019-7-22 11:51 | 显示全部楼层 |阅读模式
本帖最后由 guosaijun 于 2019-7-22 11:54 编辑

做一个智能排插。
第一步先下载blinker 注册账号 添加设备 选择arduino  wifi接入 获得key

2.jpg 1.png
第二部 硬件连接
would选用的 是mini d1 ESP8266 体积小点 加一个 四位低电平触发继电器
电路图
未标题-1.jpg


第三步 主要实现功能是远程开关,状态储存,如果意外断电,还是会恢复到原来的开关状态。定时等功能blinker是自带的!

[mw_shl_code=arduino,true]#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG //自动配网


#include <Blinker.h>

//char auth[] = "填入获得的key"; //填入获得的key

#define BUTTON_1 "B1" //1数据键名
#define BUTTON_2 "B2" //2数据键名
#define BUTTON_3 "B3" //3数据键名
#define BUTTON_4 "B4" //4数据键名

BlinkerButton Button1(BUTTON_1);
BlinkerButton Button2(BUTTON_2);
BlinkerButton Button3(BUTTON_3);
BlinkerButton Button4(BUTTON_4);


int pinID[4]= {4 ,14,12, 13 }; //插座端口
boolean pinzt[4]= {0 ,0, 0, 0 };//插座状态

const char pincolor[][8]={ //对应颜色
  "#00FF00",
  "#FF0000",
};

const char pinint[][8]={ //对应状态
  "on",
  "off",
};

void setup()
{
  Serial.begin(115200);
   
  Blinker.begin(auth);
  Blinker.attachData(dataRead);  
  Blinker.attachHeartbeat(heartbeat); //心跳包
   
  Button1.attach(button1_callback);
  Button2.attach(button2_callback);
  Button3.attach(button3_callback);
  Button4.attach(button4_callback);

  for(int a = 0;a<4;a++){
    pinMode(pinID[a], OUTPUT);
    digitalWrite(pinID[a], HIGH);//设置插座端口脚为输出状态
  }

  //EEPwrite();
  EEPread();

}

void loop()
{
  
  Blinker.run();
  for(int a = 0;a<4;a++){
    digitalWrite(pinID[a], pinzt[a]);
  }
}

void heartbeat() //心跳包
{

        Button1.color( pincolor[ pinzt[ 0 ] ] );
        Button1.print( pinint[ pinzt[0] ] );
        Button2.color( pincolor[ pinzt[ 1 ] ] );
        Button2.print( pinint[ pinzt[1] ] );
        Button3.color( pincolor[ pinzt[ 2 ] ] );
        Button3.print( pinint[ pinzt[2] ] );
        Button4.color( pincolor[ pinzt[ 3 ] ] );
        Button4.print( pinint[ pinzt[3] ] );
}

void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);

    Blinker.vibrate();
   
}

void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);

    if (state == BLINKER_CMD_ON) {
        BLINKER_LOG("Toggle on!");

        pinzt[0] =0;
        Button1.color( pincolor[ pinzt[ 0 ] ] ); //按键颜色
        Button1.print( pinint[ pinzt[ 0 ] ] );//按键状态
        EEPwrite();
    }
    else if (state == BLINKER_CMD_OFF) {
        //BLINKER_LOG("Toggle off!");

        pinzt[0] =1;
        Button1.color( pincolor[ pinzt[ 0 ] ] );
        Button1.print( pinint[ pinzt[ 0 ] ] );
        EEPwrite();
    }
}

void button2_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);

    if (state == BLINKER_CMD_ON) {
        BLINKER_LOG("Toggle on!");

        pinzt[1] =0;
        Button2.color( pincolor[ pinzt[ 1 ] ] ); //按键颜色
        Button2.print( pinint[ pinzt[1] ] );//按键状态
        EEPwrite();
    }
    else if (state == BLINKER_CMD_OFF) {
        //BLINKER_LOG("Toggle off!");

        pinzt[1] =1;
        Button2.color( pincolor[ pinzt[ 1 ] ] );
        Button2.print( pinint[ pinzt[ 1 ] ] );
        EEPwrite();
    }
}

void button3_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);

    if (state == BLINKER_CMD_ON) {
        BLINKER_LOG("Toggle on!");

        pinzt[2] =0;
        Button3.color( pincolor[ pinzt[ 2 ] ] ); //按键颜色
        Button3.print( pinint[ pinzt[ 2 ] ] );//按键状态
        EEPwrite();
    }
    else if (state == BLINKER_CMD_OFF) {
        //BLINKER_LOG("Toggle off!");

        pinzt[2] =1;
        Button3.color( pincolor[ pinzt[ 2 ] ] );
        Button3.print( pinint[ pinzt[ 2 ] ] );
        EEPwrite();
    }
}

void button4_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);

    if (state == BLINKER_CMD_ON) {
        BLINKER_LOG("Toggle on!");

        pinzt[3] =0;
        Button4.color( pincolor[ pinzt[ 3 ] ] ); //按键颜色
        Button4.print( pinint[ pinzt[ 3 ] ] );//按键状态
        EEPwrite();
    }
    else if (state == BLINKER_CMD_OFF) {
        //BLINKER_LOG("Toggle off!");

        pinzt[3] =1;
        Button4.color( pincolor[ pinzt[ 3 ] ] );
        Button4.print( pinint[ pinzt[ 3 ] ] );
        EEPwrite();
    }
}

void EEPread(){
  EEPROM.begin(4096);
for(int a = 0;a<4;a++){
pinzt[a] = EEPROM.read(a+3000);
}
}

void EEPwrite(){
EEPROM.begin(4096);
for(int a = 0;a<4;a++){
  EEPROM.write( a+3000,pinzt[a]);
}
  EEPROM.commit();
}[/mw_shl_code]

第四部 配网。使用 blinker配网 选开发者 开发工具  ESPTouch 填入wifi密码  点击开始配置 配置成功会反馈ip

微信图片_20190722114114.png 微信图片_20190722113808.jpg

设置界面 设置4个按键 数据键名是 B1-B4 类型 开关  也可以直接导入代码
第一次 打开时 分别按下4个按键 储存下按键状态


微信图片_20190722114353.jpg

[mw_shl_code=arduino,true]{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨light¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fal fa-power-off¨¨mode¨Ê¨t0¨´1´¨t1¨¨文本2¨¨bg¨Ì¨cols¨Í¨rows¨Í¨key¨¨B1¨´x´É´y´Ì¨speech¨|÷¨lstyle¨Ë}{ßAßBßCßDßEÊßF´1´ßGßHßIÌßJÍßKÍßL¨B2¨´x´Í´y´ÌßN|÷ßOË}{ßAßBßCßDßEÊßF´3´ßGßHßIÌßJÍßKÍßL¨B3¨´x´É´y´ÑßN|÷ßOË}{ßAßBßCßDßEÊßF´4´ßGßHßIÌßJÍßKÍßL¨B4¨´x´Í´y´ÑßN|÷ßOË}÷}[/mw_shl_code]

到此 4位单控 智能排插 完成 定时  倒计时 可以自己去设置!
微信图片_20190722115402.jpg

发表于 2019-7-22 16:57 | 显示全部楼层
你难道不打算用实体按钮???
在实际应用中不可能总是拿手机控制吧!
 楼主| 发表于 2019-7-22 21:53 | 显示全部楼层
Creeper666 发表于 2019-7-22 16:57
你难道不打算用实体按钮???
在实际应用中不可能总是拿手机控制吧!

实际的智能排插 有多少单路再做个实体按钮的? 要不做个总开关吧 实现这个不是很容易吗?
发表于 2019-11-4 21:57 | 显示全部楼层
楼主怎么回事帮忙看看

Arduino:1.8.10 (Windows 7), 开发板:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

sketch_nov04a:5:21: error: Blinker.h: No such file or directory

#include <Blinker.h>

                     ^

compilation terminated.

exit status 1
Blinker.h: No such file or directory

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
发表于 2019-11-4 22:10 | 显示全部楼层
ap123 发表于 2019-11-4 21:57
楼主怎么回事帮忙看看

Arduino:1.8.10 (Windows 7), 开发板:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Fla ...

你需要按照文档下载blinker库
发表于 2019-11-4 22:19 | 显示全部楼层
Arduino:1.8.5 (Windows XP), 开发板:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

构建选项已变更,全部重新构建
E:\ESP8266\D1-MINI璧勬枡\D1-MINI璧勬枡\D1_mini_Examples锛堥厤濂楀涔犵▼搴忥級\03.Sensors\DS18x20_Temperature\DS18x20_Temperature.ino: In function 'void setup()':

DS18x20_Temperature:37: error: 'auth' was not declared in this scope

exit status 1
'auth' was not declared in this scope

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
发表于 2019-11-5 11:24 | 显示全部楼层
楼主程序有问题报错

Arduino:1.8.10 (Windows 7), 开发板:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

C:\Users\TEST\Documents\Arduino\sketch_nov04a\sketch_nov04a.ino: In function 'void setup()':

sketch_nov04a:37:17: error: 'auth' was not declared in this scope

   Blinker.begin(auth);

                 ^

"ESP8266WiFi.h" 对应多个库
已使用: C:\Users\TEST\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266WiFi
"ESP8266HTTPClient.h" 对应多个库
已使用: C:\Users\TEST\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266HTTPClient
"EEPROM.h" 对应多个库
已使用: C:\Users\TEST\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\EEPROM
"ESP8266mDNS.h" 对应多个库
已使用: C:\Users\TEST\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266mDNS
"Ticker.h" 对应多个库
已使用: C:\Users\TEST\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\Ticker
"ESP8266httpUpdate.h" 对应多个库
已使用: C:\Users\TEST\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266httpUpdate
"ESP8266WebServer.h" 对应多个库
已使用: C:\Users\TEST\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266WebServer
"Hash.h" 对应多个库
已使用: C:\Users\TEST\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\Hash
"Blinker.h" 对应多个库
已使用: C:\Users\TEST\Documents\Arduino\libraries\blinker-library-master
exit status 1
'auth' was not declared in this scope

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
发表于 2019-11-6 15:23 | 显示全部楼层
有没有自动配网的功能?
发表于 2019-11-8 11:15 | 显示全部楼层
ap123 发表于 2019-11-4 22:19
Arduino:1.8.5 (Windows XP), 开发板:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL  ...

没有定义auth
发表于 2019-11-8 11:31 来自手机 | 显示全部楼层
安卓版的blinker现在官网和应用商店下载不了呀楼主
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 13:35 , Processed in 0.081553 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表