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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5531|回复: 7

[分享] esp8266断网后通过软件自动重启的方法

[复制链接]
发表于 2020-4-9 16:44 | 显示全部楼层 |阅读模式
本帖最后由 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为低电平时执行重启

发表于 2020-4-9 20:08 | 显示全部楼层
这个思路好,
不过重启后全部恢复初始状态,执行中的设备很难判断是开,是关。
也就是这种网络应用,不能用在要求严格,对可靠性有要求的场合。只适合玩玩
 楼主| 发表于 2020-4-9 20:49 | 显示全部楼层
可以用读写EPROM的方法保存设备运行状态,重启后恢复。但EPROM易引起堆栈溢出,我还未找到原因,针对不同的应用,只能换写入地址试验。试好后运行也比较稳定。
发表于 2020-4-16 21:53 来自手机 | 显示全部楼层
(⊙o⊙)哇,回去试试
发表于 2020-4-16 22:51 | 显示全部楼层
不错,学习下
发表于 2020-4-18 02:05 来自手机 | 显示全部楼层
resetFunc()内置函数这个是什么意思方便讲解下吗?
发表于 2020-4-18 14:58 | 显示全部楼层
z01228 发表于 2020-4-18 02:05
resetFunc()内置函数这个是什么意思方便讲解下吗?

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

需要复位时这样调用:
resetFunc();
发表于 2022-6-22 17:59 | 显示全部楼层
大佬 有段自建的mqtt服务器不知道怎么定义断线重启 求QQ
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 09:31 , Processed in 0.088902 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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