Как восстановить бесконечный цикл nodemcu

Я допустил ошибку при загрузке init.lua с бесконечным циклом на моей плате nodemcu / ESP8266.

Затем плата продолжит перезагрузку без выполнения каких-либо других инструкций.

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

person jezuz    schedule 08.07.2015    source источник


Ответы (6)


Пробовал перепрошить плату

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

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

И после этого исправьте мой код и загрузите его снова, и теперь он отлично работает

person jezuz    schedule 11.07.2015
comment
Именно по этой причине всегда проверяйте код в файле с именем, отличным от init.lua. - person Mark McGinty; 09.08.2015
comment
+1 к последнему комментарию. Установите однократный tmr.alarm (), чтобы приложение запускалось через 2-3 секунды. в вашем init.lua. Этого времени достаточно, чтобы отправить file.remove () для удаления файла init.lua, если вы застряли в панике. - person TerryE; 07.09.2015
comment
@jezuz, для чего нужна первая строка с командой run? Я выполнил только команду write_flash и получил желаемый результат. - person Arthur Hebert-Ryan; 22.01.2016
comment
Я обнаружил, что с помощью флешера PyFlash с опцией очистки прошивки сделал это. - person Danny Staple; 01.04.2017
comment
Чтобы исправить проблему, мне пришлось сделать erase_flash перед записью флеш-памяти. - person Hritik; 28.01.2021

--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.

person researcher01    schedule 21.03.2016

Я использую ESPlorer (приложение Java) http://esp8266.ru/esplorer/#download

Пока я возился, у меня есть только мой init.lua файл с именем init1.lua, если ESP перезагружается, это не проблема, вы просто нажимаете кнопку init1.lua, которая отображается справа (после того, как вы используете кнопку «Перезагрузить» для отображения содержимого файловой системы )

Легко и просто. Когда вы закончите, вы можете щелкнуть правой кнопкой мыши по файлу, чтобы снова переименовать его в init.lua.

person Lorne Bonnell    schedule 01.12.2015

Нет элегантного способа выздороветь.

Лучшее, что можно сделать, - это создать способ предотвратить выдачу кода в аварийной ситуации. Например, как предлагает TerryE, установите однократный таймер, используя timer.alarm в init.lua, чтобы вызвать ваш основной код с достаточно длинной задержкой, чтобы вы могли вызвать timer.stop в случае, если вы не хотите загружаться в свой основной код.

person user1816847    schedule 04.10.2015

У меня была та же проблема, и я застрял в while петле.

У меня сработала перепрошивка другой прошивкой.

person Afroze Kabeer Khan    schedule 21.09.2017

Этот ответ в основном совпадает с ответом исследователя01, но использует Таймеры 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)
person Hritik    schedule 27.01.2021