|
程序功能介绍:基于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();
- }
- }
- }
复制代码
|
|