Blinker增加断网自动软重启,APP或硬件清除配网信息-Arduino中文社区 - Powered by Discuz! Archiver

Guofuqiang01 发表于 2021-4-12 14:41

Blinker增加断网自动软重启,APP或硬件清除配网信息

程序功能介绍:基于ESP8266自带LED灯来展示:1、断网软重启重新连接网络;2、通过Blinker手机APP清除配网信息;3、通过IO口输入清除配网信息;4、利用Blinker自带按钮BUILTIN_SWITCH来控制LED灯状态,并反馈。程序疑问:如何引用ESP8266自带的RST复位针脚高低电平?


#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG

#include <Blinker.h>

char auth[] = "Auth Key";

#define RESET_IO D1//定义硬件复位针脚(不知道应该如何引用板子自带的RST引脚,希望大家指点一下)


//利用resetFunc()内置函数,实现断网重启,定义相关变量
uint32_t con_time = 0;    //断网记时
int con_flag = 0;    //断网标记,1为断网
void(*resetFunc) (void) = 0;

//硬件重置WIFI配网信息
uint32_t rst_time = 0;    //记录RESET_IO低电平前系统时间


BlinkerButton Button1("Switch");
BlinkerButton RESET("Reset");

void button1_callback(const String & state)
{

    if (state == BLINKER_CMD_ON) {
      BLINKER_LOG("Toggle on!");
      digitalWrite(LED_BUILTIN, LOW);
      Button1.icon("fas fa-lightbulb-on");
      Button1.color("#FFFF00");
      Button1.text("开");
      Button1.print("on");
      BUILTIN_SWITCH.print("on"); // Blinker主界面设备开关按钮状态
    }
    else if (state == BLINKER_CMD_OFF) {
      BLINKER_LOG("Toggle off!");
      digitalWrite(LED_BUILTIN, HIGH);
      Button1.icon("fas fa-lightbulb");
      Button1.color("#808080");
      Button1.text("关");
      Button1.print("off");
      BUILTIN_SWITCH.print("off");
    }
}


void reset_callback(const String & state){
BLINKER_LOG("get button state:", state);
//当长按"Reset"释放后清除配网信息
if(state == "pressup"){
    for(int i = 0; i<3 ; i++)
    {
      digitalWrite(LED_BUILTIN, LOW);
      Blinker.delay(300);
      digitalWrite(LED_BUILTIN, HIGH);
      Blinker.delay(300);
    }
    Blinker.reset();
}
}

void setup()
{
    //初始化调试程序
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    //初始化LED针脚模式及高电平关闭LED灯
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);

    //初始化复位针脚
    pinMode(RESET_IO, INPUT_PULLUP);

    //配置Blinker程序
    Blinker.begin(auth);
    Button1.attach(button1_callback);
    BUILTIN_SWITCH.attach(button1_callback);   //注册设备主界面开关按钮回调函数
    RESET.attach(reset_callback);            //注册RESET回调函数
}

void loop()
{
    Blinker.run();


    //断网自动重连程序
    if (Blinker.connected())
    {
      con_flag = 0;
    }
    else
    {
      if (con_flag == 0)
      {
      con_time = millis();    //给断网时间赋初始值
      con_flag = 1;
      }
      else
      {
      if ((millis() - con_time) >= 90000)    //判断断网时间超90秒后执行重启,这个时间可根据实际需要调整
      {
          resetFunc();
      }
      }
   }

   //复位清除配网
    if(digitalRead(RESET_IO) == HIGH)
    {
      rst_time = millis();    //刷新复位针脚复位之前的系统时间
    }
                if(digitalRead(RESET_IO) == LOW)
                {
      if((millis() - rst_time) >= 3000)//复位按钮按下时长大于3秒,开始清除配网信息
      {
      //清除配网前LED灯闪烁
      for(int i = 0; i<3 ; i++)
      {
          digitalWrite(LED_BUILTIN, LOW);
          Blinker.delay(300);
          digitalWrite(LED_BUILTIN, HIGH);
          Blinker.delay(300);
      }
      Blinker.reset();
      }
                }
}

页: [1]
查看完整版本: Blinker增加断网自动软重启,APP或硬件清除配网信息