查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

基于Arduino开发,借助blinker物联网平台,让NodeMCU实现8路继电器APP端状态监视和控制

先上开发板功能图:

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

本文利用了NodeMCU上的D0-D3,D5-D9,总共 8个 GPIO口,一个板载LED状态控制和显示。
主要的功能是通过NodeMCU开发板,在手机APP端实现远程查看,操控,定时控制。

手机端:

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

打开APP:

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

进入新建好的NodeMCU

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

按键属性参数

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

编辑功能按钮属性状态

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

指定一个功能按钮设置项

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

显示图标有非常丰富的素材图标供选择,这里就不一一展示了,根据个人喜好选择。

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

最关键的参数是

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

数据键名一定要与源代码定义的一致。按键类型选择:开关按键

设置好后,记得点右上角的保存。

定时功能:

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

定时设置详细界面

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

具体设置时间

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

设置完成如下:

查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制…-编程知识网

源程序:

//****库*****
#define BLINKER_WIFI                    //官方wifi协议库
#define BLINKER_PRINT Serial            //串口协议库
#include <Blinker.h>                    //blinker官方库//****wifi、设备的定义****
char auth[] = "4af2fd6e14fe";           //设备key号
char ssid[] = "MERCURY_D268G";                     //wifi名称
char pswd[] = "pba5ayzk";              //wifi密码//io口定义
int Relay1=D0;  //GPIO16
int Relay2=D1;    //GPIO5
int Relay3=D2;    //GPIO4
int Relay4=D3;    //GPIO0
int Relay5=D5;    //GPIO14 
int Relay6=D6;    //GPIO12 
int Relay7=D7;    //GPIO13
int Relay8=D8;    //GPIO15 int sj=2000;//延迟时间// variables will change:
int buttonState = 0;              // variable for reading the pushbutton status
bool buttonStateFlag =true;
bool ledStateFlag=false;//****新建组件对象****
BlinkerButton Button1("btn1");              //设置app按键的键名
BlinkerButton Button2("btn2");              //设置app按键的键名
BlinkerButton Button3("btn3");              //设置app按键的键名
BlinkerButton Button4("btn4");              //设置app按键的键名
BlinkerButton Button5("btn5");              //设置app按键的键名
BlinkerButton Button6("btn6");              //设置app按键的键名
BlinkerButton Button7("btn7");              //设置app按键的键名
BlinkerButton Button8("btn8");              //设置app按键的键名
BlinkerButton Button9("btn-all");              //设置app按键的键名// 按下按键即会执行该函数
void button1_callback(const String & state) {BLINKER_LOG("1#继电器,状态: ", state);if (state=="on") {//digitalWrite(LED_BUILTIN, LOW);digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));  //板载LED状态切换digitalWrite(Relay1, HIGH);Button1.color("#FF0000");   //1#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button1.text("继电器已打开");Button1.print("on");BLINKER_LOG ("1#继电器已开启on");  //串口打印Blinker.vibrate();  //开启继电器时反馈,让手机震动} else if(state=="off"){//digitalWrite(LED_BUILTIN, HIGH);digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));  //板载LED状态切换digitalWrite(Relay1, LOW);Button1.color("#000000");  //2#按钮没有按下时,app按键颜色状态显示是黑色// 反馈开关状态Button1.text("1#继电器已关闭");Button1.print("off");BLINKER_LOG ("1#继电器已关闭off");}
}void button2_callback(const String & state) {BLINKER_LOG("2#继电器,状态: ", state);if (state=="on") {digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));  //板载LED状态切换digitalWrite(Relay2, HIGH);Button2.color("#FF0000");   //2#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button2.text("2#继电器已打开");Button2.print("on");BLINKER_LOG ("2#继电器已打开on");  //串口打印Blinker.vibrate();  //开启继电器时反馈,让手机震动} else if(state=="off"){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));  //板载LED状态切换digitalWrite(Relay2, LOW);Button2.color("#0000FF");  //2#按钮没有按下时,app按键颜色状态显示是黑色// 反馈开关状态Button2.text("2#继电器已关闭");Button2.print("off");BLINKER_LOG ("2#继电器已关闭off");}
}void button3_callback(const String & state) {BLINKER_LOG("3#继电器,状态: ", state);if (state=="on") {digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay3, HIGH);Button3.color("#FF0000");   //3#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button3.text("3#继电器已打开");Button3.print("on");BLINKER_LOG ("3#继电器已打开on");  //串口打印Blinker.vibrate();  //开启继电器时反馈,让手机震动} else if(state=="off"){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay3, LOW);Button3.color("#0000FF");  //3#按钮没有按下时,app按键颜色状态显示是蓝色// 反馈开关状态Button3.text("3#继电器已关闭");Button3.print("off");BLINKER_LOG ("3#继电器已关闭off");}
}void button4_callback(const String & state) {BLINKER_LOG("4#继电器,状态: ", state);if (state=="on") {digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay4, HIGH);Button4.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button4.text("4#继电器已开灯");Button4.print("on");BLINKER_LOG ("4#继电器已打开");  //串口打印Blinker.vibrate();  //开启继电器时反馈,让手机震动} else if(state=="off"){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay4, LOW);Button4.color("#0000FF");  //4#按钮没有按下时,app按键颜色状态显示是黑色// 反馈开关状态Button4.text("4#继电器已关闭");Button4.print("off");BLINKER_LOG ("4#继电器已关闭off");}
}void button5_callback(const String & state) {BLINKER_LOG("5#继电器,状态: ", state);if (state=="on") {digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay5, HIGH);Button5.color("#FF0000");   //5#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button5.text("5#继电器已打开");Button5.print("on");BLINKER_LOG ("5#继电器已打开");  //串口打印} else if(state=="off"){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay5, LOW);Button5.color("#0000FF");  //5#按钮没有按下时,app按键颜色状态显示是黑色// 反馈开关状态Button5.text("5#继电器已关闭");Button5.print("off");BLINKER_LOG ("5#继电器已关闭off");}
}void button6_callback(const String & state) {BLINKER_LOG("6#继电器,状态: ", state);if (state=="on") {digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay6, HIGH);Button6.color("#FF0000");   //6#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button6.text("6#继电器已打开");Button6.print("on");BLINKER_LOG ("6#继电器已打开");  //串口打印Blinker.vibrate();  //开启继电器时反馈,让手机震动} else if(state=="off"){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay6, LOW);Button6.color("#0000FF");  //6#按钮没有按下时,app按键颜色状态显示是黑色// 反馈开关状态Button6.text("6#继电器已关闭");Button6.print("off");BLINKER_LOG ("6#继电器已关闭off");}
}void button7_callback(const String & state) {BLINKER_LOG("7#继电器,状态: ", state);if (state=="on") {digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay7, HIGH);Button7.color("#FF0000");   //7#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button7.text("7#继电器已打开");Button7.print("on");BLINKER_LOG ("7#继电器已打开");  //串口打印Blinker.vibrate();  //开启继电器时反馈,让手机震动} else if(state=="off"){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay7, LOW);Button7.color("#0000FF");  //7#按钮没有按下时,app按键颜色状态显示是黑色// 反馈开关状态Button7.text("7#继电器已关闭");Button7.print("off");BLINKER_LOG ("off");}
}void button8_callback(const String & state) {BLINKER_LOG("8#继电器,状态: ", state);if (state=="on") {digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay8, HIGH);Button8.color("#FF0000");   //8#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button8.text("8#继电器已打开");Button8.print("on");BLINKER_LOG ("8#继电器已打开");  //串口打印Blinker.vibrate();  //开启继电器时反馈,让手机震动} else if(state=="off"){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay8, LOW);Button8.color("#0000FF");  //8#按钮没有按下时,app按键颜色状态显示是黑色// 反馈开关状态Button8.text("8#继电器已关闭");Button8.print("off");BLINKER_LOG ("8#继电器已关闭off");}
}void button9_callback(const String & state) {BLINKER_LOG("全部继电器,状态: ", state);if (state=="on") {digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay1, HIGH);digitalWrite(Relay2, HIGH);digitalWrite(Relay3, HIGH);  digitalWrite(Relay4, HIGH); digitalWrite(Relay5, HIGH); digitalWrite(Relay6, HIGH); digitalWrite(Relay7, HIGH); digitalWrite(Relay8, HIGH);  Button9.color("#FF0000");   //9#按钮按下时,app按键颜色状态显示是红色// 反馈开关状态Button9.text("已全部开启");Button9.print("on");BLINKER_LOG ("全部继电器已打开");  //串口打印Blinker.vibrate();  //开启继电器时反馈,让手机震动} else if(state=="off"){digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));    //板载LED状态切换digitalWrite(Relay1, LOW);digitalWrite(Relay2, LOW);digitalWrite(Relay3, LOW);  digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); digitalWrite(Relay6, LOW); digitalWrite(Relay7, LOW); digitalWrite(Relay8, LOW);        Button9.color("#0000FF");  //9#按钮没有按下时,app按键颜色状态显示是黑色// 反馈开关状态Button9.text("已关闭所有继电器");Button9.print("off");BLINKER_LOG ("全部继电器已关闭off");}
}void setup() {// ****初始化串口Serial.begin(115200);BLINKER_DEBUG.stream(Serial);//**** 初始化有LED的IOpinMode(LED_BUILTIN, OUTPUT);  //将数字引脚LED_BUILTIN初始化为输出。pinMode(Relay1, OUTPUT);digitalWrite(Relay1, LOW);              //1#继电器pinMode(Relay2, OUTPUT);digitalWrite(Relay2, LOW);              //2#继电器pinMode(Relay3, OUTPUT);digitalWrite(Relay3, LOW);              //3#继电器pinMode(Relay4, OUTPUT);digitalWrite(Relay4, LOW);              //4#继电器pinMode(Relay5, OUTPUT);digitalWrite(Relay5, LOW);              //5#继电器pinMode(Relay6, OUTPUT);digitalWrite(Relay6, LOW);              //6#继电器pinMode(Relay7, OUTPUT);digitalWrite(Relay7, LOW);              //7#继电器pinMode(Relay8, OUTPUT);digitalWrite(Relay8, LOW);              //8#继电器// ****初始化blinkerBlinker.begin(auth, ssid, pswd);//****app关联函数****Button1.attach(button1_callback);              //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"--Button2.attach(button2_callback);              //app上操作必须的注册回调函数关联按键名“Button2”和判断程序“button2_callback"--Button3.attach(button3_callback);              //app上操作必须的注册回调函数关联按键名“Button2”和判断程序“button2_callback"--Button4.attach(button4_callback);              //app上操作必须的注册回调函数关联按键名“Button2”和判断程序“button2_callback"--Button5.attach(button5_callback);              //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"--Button6.attach(button6_callback);              //app上操作必须的注册回调函数关联按键名“Button2”和判断程序“button2_callback"--Button7.attach(button7_callback);              //app上操作必须的注册回调函数关联按键名“Button2”和判断程序“button2_callback"--Button8.attach(button8_callback); Button9.attach(button9_callback); }void loop() {Blinker.run();}