Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据测试

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

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

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

手机端:
在这里插入图片描述
打开APP:
在这里插入图片描述
进入新建好的NodeMCU
在这里插入图片描述
按键属性参数
在这里插入图片描述
编辑功能按钮属性状态
在这里插入图片描述
指定一个功能按钮设置项
在这里插入图片描述

显示图标有非常丰富的素材图标供选择,这里就不一一展示了,根据个人喜好选择。
在这里插入图片描述
设置完图标记得保存在这里插入图片描述

最关键的参数是
在这里插入图片描述
数据键名一定要与源代码定义的一致。
按键类型选择:开关按键

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

定时功能:
在这里插入图片描述
定时设置详细界面
在这里插入图片描述

在这里插入图片描述
具体设置时间
在这里插入图片描述

设置完成如下:

在这里插入图片描述

源程序:

//****库*****
#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的IO
  pinMode(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#继电器

  // ****初始化blinker
  Blinker.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();
  } 

在这里插入图片描述

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 【TCP/IP】IP地址的划分及其分类

下一篇: 程序员的诗意

精华推荐