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为低电平时执行重启
这个思路好,
不过重启后全部恢复初始状态,执行中的设备很难判断是开,是关。
也就是这种网络应用,不能用在要求严格,对可靠性有要求的场合。只适合玩玩;P 可以用读写EPROM的方法保存设备运行状态,重启后恢复。但EPROM易引起堆栈溢出,我还未找到原因,针对不同的应用,只能换写入地址试验。试好后运行也比较稳定。 (⊙o⊙)哇,回去试试 不错,学习下 resetFunc()内置函数这个是什么意思方便讲解下吗? z01228 发表于 2020-4-18 02:05
resetFunc()内置函数这个是什么意思方便讲解下吗?
arduino 软复位
定义一个reset函数:
void(* resetFunc) (void) = 0;
需要复位时这样调用:
resetFunc(); 大佬 有段自建的mqtt服务器不知道怎么定义断线重启 求QQ
页:
[1]