我在我的 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
I tried flashing the board
python esptool.py -p /dev/tty.wchusbserial1450 run
python esptool.py -p /dev/tty.wchusbserial1450 write_flash 0x0000 ../nodemcu_latest.bin
And after that fix my code and load it again and now works fine
--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
我所做的是使用 ESPlorer(Java 应用程序)http://esp8266.ru/esplorer/#download
当我在闲逛时,我只init.lua
调用了我的文件init1.lua
,如果 ESP 重新启动没问题,您只需单击init1.lua
右侧显示的按钮(在使用“重新加载”按钮显示文件系统内容之后)
很好很简单,完成后,您可以右键单击文件将其重命名为init.lua
.
此答案与researcher01 的答案基本相同,但使用OO API 计时器,因为上面使用的计时器在 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)
我遇到了同样的问题并且陷入了while
循环。
刷新不同的固件对我有用。
没有一种优雅的恢复方式。
最好的办法是建立一种方法来防止您的代码在紧急情况下声明。timer.alarm
例如,正如 TerryE 建议的那样,使用in设置一个一次性计时器init.lua
来调用您的主代码,并有足够长的延迟,您可以timer.stop
在不想启动到主代码的情况下调用。