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

guosaijun 发表于 2019-7-22 11:51

基于blinker和ESP8266的智能排插

本帖最后由 guosaijun 于 2019-7-22 11:54 编辑

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


第二部 硬件连接
would选用的 是mini d1 ESP8266 体积小点 加一个 四位低电平触发继电器
电路图



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

#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 ,14,12, 13 }; //插座端口
boolean pinzt= {0 ,0, 0, 0 };//插座状态

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

const char pinint[]={ //对应状态
"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, OUTPUT);
    digitalWrite(pinID, HIGH);//设置插座端口脚为输出状态
}

//EEPwrite();
EEPread();

}

void loop()
{

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

void heartbeat() //心跳包
{

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

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

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

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

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

      pinzt =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 = EEPROM.read(a+3000);
}
}

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

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



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




{¨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Ë}÷}

到此 4位单控 智能排插 完成 定时倒计时 可以自己去设置!


Creeper666 发表于 2019-7-22 16:57

你难道不打算用实体按钮???
在实际应用中不可能总是拿手机控制吧!

guosaijun 发表于 2019-7-22 21:53

Creeper666 发表于 2019-7-22 16:57
你难道不打算用实体按钮???
在实际应用中不可能总是拿手机控制吧!

实际的智能排插 有多少单路再做个实体按钮的? 要不做个总开关吧 实现这个不是很容易吗?

ap123 发表于 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

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。

coloz 发表于 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库

ap123 发表于 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

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。

ap123 发表于 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

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。

sting2k1 发表于 2019-11-6 15:23

有没有自动配网的功能?

sting2k1 发表于 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

南风未起36 发表于 2019-11-8 11:31

安卓版的blinker现在官网和应用商店下载不了呀楼主
页: [1] 2
查看完整版本: 基于blinker和ESP8266的智能排插