You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wemos D1运行一段时间无响应及Line重复推送Connected问题求助

问题1:Wemos D1运行一段时间后无响应的原因

  • 代码层面问题:
    1. 缺失MQTT断连重连逻辑:当前仅在setup()里执行了一次MQTT连接,运行中如果MQTT broker断开、网络波动导致连接中断,后续client.loop()、client.publish()调用会出现异常,甚至阻塞任务触发看门狗复位
    2. 阻塞逻辑风险:sendMessageToIFTTT()中的while(client.connected())循环如果遇到网络卡顿、服务无响应,会长时间阻塞主线程,超过ESP8266默认看门狗超时阈值就会触发系统重启/卡死
    3. 内存碎片化:大量使用String类做字符串拼接,长期运行会导致堆内存碎片化,最终内存分配失败触发系统崩溃
    4. 引脚配置错误:SENSOR引脚设置为INPUT_PULLUP后又执行digitalWrite(SENSOR, LOW),会取消上拉电阻,导致引脚电平容易受干扰,出现异常传感值
  • 硬件层面问题(仅单块板出现故障优先排查):
    1. 供电不稳定:猪场环境电网波动大,或该块板的供电模块带载能力不足,继电器吸合瞬间的电流压降拉低主控供电导致死机
    2. 无感性负载保护:继电器控制回路未加续流二极管,断开瞬间的反向电动势击穿/干扰主控电路
    3. 硬件本身缺陷:该块板的Flash存在坏块、晶振稳定性差,长时间运行后出现时序错误

问题2:setup()中的Line通知多次推送的原因

setup()函数仅在上电、系统复位时才会执行,多次收到Connected通知说明开发板在运行过程中发生了反复重启:要么是代码异常触发了看门狗自动复位,要么是供电波动触发了硬件复位,每次重启都会重新执行一遍setup()里的Line推送逻辑。


修复建议

  1. 在loop()中增加MQTT连接状态检测,断连后自动执行重连逻辑
  2. 移除loop()中固定的5秒delay,改用非阻塞的时间判断逻辑,避免阻塞系统任务
  3. 给sendMessageToIFTTT()的循环加上超时判断,最多等待指定时间就退出,避免无限阻塞
  4. 替换String拼接操作为字符数组操作,降低内存碎片化风险
  5. 移除setup()中digitalWrite(SENSOR, LOW)的错误代码,确保上拉电阻正常生效
  6. 硬件排查:给继电器并联续流二极管,更换故障板的供电电源测试,确认供电稳定性

内容的提问来源于stack exchange,提问作者kati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:09:04