NodeMCU 以启动原因 2、3 重新启动

我的两个 NodeMCU(Wemos D1 Mini)开发板会在几分钟或几小时后随机重启。调用 node.bootreason() 会在随机重启后返回 2、3,表示软件看门狗复位。但是,我从未启用过软件看门狗。可能是什么导致了这些重新启动?

我正在运行 NodeMCU master,float build,使用 2017-08-15 的在线构建服务器构建。

以下 init.lua 展示了重新启动的问题。

-- 连接 WLAN
dofile("wifi_config.lc")

-- 创建一个 MQTT 客户端对象
m = mqtt.Client("nodemcu03", 120)

function update()
    local boot_reason_basic, boot_reason_ext = node.bootreason()
    local s = table.concat({tmr.time(),
        boot_reason_basic,
        boot_reason_ext,
        node.heap()}, ",")
    if not m:publish("/NodeStability", s, 0, 0, nil) then
        mytimer:unregister()
        do_mqtt_connect()
    end
end

function handle_mqtt_error(client, reason)
    tmr.create():alarm(10 * 1000, tmr.ALARM_SINGLE, do_mqtt_connect)
end

mytimer = tmr.create()
function do_mqtt_connect()
    m:connect("mqttbroker.localdomain", 1883, 0,
        function()
            mytimer:register(500, tmr.ALARM_AUTO, update)
            mytimer:start()
        end,
        handle_mqtt_error)
end

do_mqtt_connect()

wifi_config.lua 的内容(编译为 wifi_config.lc 前)为

wifi.setmode(wifi.STATION)
wifi.sta.config{ssid="MY_SSID",pwd="MY_PASSWORD"}

wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
    print("\n\tSTA - GOT IP".."\n\tStation IP: "..T.IP.."\n\tSubnet mask: "..
        T.netmask.."\n\tGateway IP: "..T.gateway)
end)
点赞