Wemos D1运行一段时间无响应及Line重复推送Connected问题求助
问题1:Wemos D1运行一段时间后无响应的原因
- 代码层面问题:
- 缺失MQTT断连重连逻辑:当前仅在
setup()里执行了一次MQTT连接,运行中如果MQTT broker断开、网络波动导致连接中断,后续client.loop()、client.publish()调用会出现异常,甚至阻塞任务触发看门狗复位 - 阻塞逻辑风险:
sendMessageToIFTTT()中的while(client.connected())循环如果遇到网络卡顿、服务无响应,会长时间阻塞主线程,超过ESP8266默认看门狗超时阈值就会触发系统重启/卡死 - 内存碎片化:大量使用
String类做字符串拼接,长期运行会导致堆内存碎片化,最终内存分配失败触发系统崩溃 - 引脚配置错误:SENSOR引脚设置为
INPUT_PULLUP后又执行digitalWrite(SENSOR, LOW),会取消上拉电阻,导致引脚电平容易受干扰,出现异常传感值
- 缺失MQTT断连重连逻辑:当前仅在
- 硬件层面问题(仅单块板出现故障优先排查):
- 供电不稳定:猪场环境电网波动大,或该块板的供电模块带载能力不足,继电器吸合瞬间的电流压降拉低主控供电导致死机
- 无感性负载保护:继电器控制回路未加续流二极管,断开瞬间的反向电动势击穿/干扰主控电路
- 硬件本身缺陷:该块板的Flash存在坏块、晶振稳定性差,长时间运行后出现时序错误
问题2:setup()中的Line通知多次推送的原因
setup()函数仅在上电、系统复位时才会执行,多次收到Connected通知说明开发板在运行过程中发生了反复重启:要么是代码异常触发了看门狗自动复位,要么是供电波动触发了硬件复位,每次重启都会重新执行一遍setup()里的Line推送逻辑。
修复建议
- 在
loop()中增加MQTT连接状态检测,断连后自动执行重连逻辑 - 移除
loop()中固定的5秒delay,改用非阻塞的时间判断逻辑,避免阻塞系统任务 - 给
sendMessageToIFTTT()的循环加上超时判断,最多等待指定时间就退出,避免无限阻塞 - 替换
String拼接操作为字符数组操作,降低内存碎片化风险 - 移除
setup()中digitalWrite(SENSOR, LOW)的错误代码,确保上拉电阻正常生效 - 硬件排查:给继电器并联续流二极管,更换故障板的供电电源测试,确认供电稳定性
内容的提问来源于stack exchange,提问作者kati
相关产品推荐
相关产品推荐

