esp8266断网后通过软件自动重启的方法-Arduino中文社区 - Powered by Discuz! Archiver

zj_1217 发表于 2020-4-9 16:44

esp8266断网后通过软件自动重启的方法

本帖最后由 zj_1217 于 2020-4-9 16:52 编辑

      我用ESP-12系列模块时,程序运行7至10天左右会掉网,只能重启才能联网,经探索找到1个解决办法,不使用任何硬件引脚,利用resetFunc()内置函数,实现重启。
      实现方法如下:
      1、定义变量
               uint32_t con_time = 0;    //断网记时
            int con_flag = 0;    //断网标记,1为断网               void(*resetFunc) (void) = 0;      2、在loop中加入
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();
    }
}
}

      以上方法已在4个模块中运行1个月以上,还需注意的是,在有些情况下不能重启,如晚上灯已打开,若重启会造成灯灭,可以在重启函数前再加一层判断或延时,控制在灯开时不重启或开灯状态下延时几个小时再重启。      例如:      if ((millis() - con_time) >= 90000&&!digitalRead(LED1_PIN))//判断断网时间超90秒并且LED1_PIN为低电平时执行重启

keliyuan 发表于 2020-4-9 20:08

这个思路好,
不过重启后全部恢复初始状态,执行中的设备很难判断是开,是关。
也就是这种网络应用,不能用在要求严格,对可靠性有要求的场合。只适合玩玩;P

zj_1217 发表于 2020-4-9 20:49

可以用读写EPROM的方法保存设备运行状态,重启后恢复。但EPROM易引起堆栈溢出,我还未找到原因,针对不同的应用,只能换写入地址试验。试好后运行也比较稳定。

ebeeb 发表于 2020-4-16 21:53

(⊙o⊙)哇,回去试试

powertony 发表于 2020-4-16 22:51

不错,学习下

z01228 发表于 2020-4-18 02:05

resetFunc()内置函数这个是什么意思方便讲解下吗?

z01228 发表于 2020-4-18 14:58

z01228 发表于 2020-4-18 02:05
resetFunc()内置函数这个是什么意思方便讲解下吗?

arduino 软复位
定义一个reset函数:
void(* resetFunc) (void) = 0;

需要复位时这样调用:
resetFunc();

keanecfan 发表于 2022-6-22 17:59

大佬 有段自建的mqtt服务器不知道怎么定义断线重启 求QQ
页: [1]
查看完整版本: esp8266断网后通过软件自动重启的方法