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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2185|回复: 0

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

[复制链接]
发表于 2021-4-12 14:41 | 显示全部楼层 |阅读模式
程序功能介绍:基于ESP8266自带LED灯来展示:1、断网软重启重新连接网络;2、通过Blinker手机APP清除配网信息;3、通过IO口输入清除配网信息;4、利用Blinker自带按钮BUILTIN_SWITCH来控制LED灯状态,并反馈。程序疑问:如何引用ESP8266自带的RST复位针脚高低电平?


  1. #define BLINKER_WIFI
  2. #define BLINKER_ESP_SMARTCONFIG

  3. #include <Blinker.h>

  4. char auth[] = "Auth Key";

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


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

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


  12. BlinkerButton Button1("Switch");
  13. BlinkerButton RESET("Reset");

  14. void button1_callback(const String & state)
  15. {

  16.     if (state == BLINKER_CMD_ON) {
  17.         BLINKER_LOG("Toggle on!");
  18.         digitalWrite(LED_BUILTIN, LOW);
  19.         Button1.icon("fas fa-lightbulb-on");
  20.         Button1.color("#FFFF00");
  21.         Button1.text("开");
  22.         Button1.print("on");
  23.         BUILTIN_SWITCH.print("on"); // Blinker主界面设备开关按钮状态
  24.     }
  25.     else if (state == BLINKER_CMD_OFF) {
  26.         BLINKER_LOG("Toggle off!");
  27.         digitalWrite(LED_BUILTIN, HIGH);
  28.         Button1.icon("fas fa-lightbulb");
  29.         Button1.color("#808080");
  30.         Button1.text("关");
  31.         Button1.print("off");
  32.         BUILTIN_SWITCH.print("off");
  33.     }
  34. }


  35. void reset_callback(const String & state){
  36.   BLINKER_LOG("get button state:", state);
  37.   //当长按"Reset"释放后清除配网信息
  38.   if(state == "pressup"){
  39.     for(int i = 0; i<3 ; i++)
  40.     {
  41.       digitalWrite(LED_BUILTIN, LOW);
  42.       Blinker.delay(300);
  43.       digitalWrite(LED_BUILTIN, HIGH);
  44.       Blinker.delay(300);
  45.     }
  46.     Blinker.reset();
  47.   }
  48. }

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

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

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

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

  65. void loop()
  66. {
  67.     Blinker.run();


  68.     //断网自动重连程序
  69.     if (Blinker.connected())
  70.     {
  71.       con_flag = 0;
  72.     }
  73.     else
  74.     {
  75.       if (con_flag == 0)
  76.       {
  77.         con_time = millis();    //给断网时间赋初始值
  78.         con_flag = 1;
  79.         }
  80.       else
  81.       {
  82.         if ((millis() - con_time) >= 90000)    //判断断网时间超90秒后执行重启,这个时间可根据实际需要调整
  83.         {
  84.           resetFunc();
  85.         }
  86.       }
  87.      }

  88.      //复位清除配网
  89.     if(digitalRead(RESET_IO) == HIGH)
  90.     {
  91.       rst_time = millis();    //刷新复位针脚复位之前的系统时间
  92.     }
  93.                 if(digitalRead(RESET_IO) == LOW)
  94.                 {
  95.       if((millis() - rst_time) >= 3000)//复位按钮按下时长大于3秒,开始清除配网信息
  96.       {
  97.         //清除配网前LED灯闪烁
  98.         for(int i = 0; i<3 ; i++)
  99.         {
  100.           digitalWrite(LED_BUILTIN, LOW);
  101.           Blinker.delay(300);
  102.           digitalWrite(LED_BUILTIN, HIGH);
  103.           Blinker.delay(300);
  104.         }
  105.         Blinker.reset();
  106.       }
  107.                 }
  108. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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