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]