如何恢复nodemcu无限循环

How to recover nodemcu infinite loop

我在 nodemcu/ESP8266 板上用无限循环加载 init.lua 时出错。

然后板子继续重启,没有执行任何其他指令。

i = 10
timerId = 0
timerDelay = 30000 -- Milisec
pin = 5
gpio.mode(pin,gpio.INPUT) 
repeat(    
    print(gpio.read(pin))
    i = i + 1
    end)
until i < 5

我试过刷板

python esptool.py -p /dev/tty.wchusbserial1450 run

python esptool.py -p /dev/tty.wchusbserial1450 write_flash 0x0000 ../nodemcu_latest.bin

然后修复我的代码并再次加载它,现在工作正常

没有一种优雅的恢复方式。

最好的办法是以一种方式构建,以防止您的代码在紧急情况下声明。例如,正如 TerryE 建议的那样,使用 init.lua 中的 timer.alarm 设置一个单次计时器,以足够长的延迟调用主代码,以便在您不这样做的情况下调用 timer.stop不想启动到您的主代码。

我做的是使用 ESPlorer(Java 应用程序)http://esp8266.ru/esplorer/#download

虽然我在闲逛,但我的 init.lua 文件名为 init1.lua,如果 ESP 重新启动没问题,您只需单击右侧显示的 init1.lua 按钮手边(使用 "Reload" 按钮显示文件系统内容后)

非常简单,完成后您可以右键单击该文件将其重命名回 init.lua

--This file is init.lua
local IDLE_AT_STARTUP_MS = 10000;

tmr.alarm(1,IDLE_AT_STARTUP_MS,0,function()
    dofile("program.lua")--Write your program name in dofile
end)

我确实使用这个策略来防止在出现错误时在启动时无限循环。将此文件另存为 init.lua 并将程序写入 program.lua

我遇到了同样的问题,陷入了 while 循环。

刷新不同的固件对我有用。

此答案与 but uses OO API timers 基本相同,因为上面使用的答案已于 2019 年删除。

--This file is init.lua
local IDLE_AT_STARTUP_MS = 10000;

tmr.create():alarm(IDLE_AT_STARTUP_MS, tmr.ALARM_SINGLE,function()
    dofile("program.lua")--Write your program name in dofile
end)