• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Luatool

Victor

Administrator
Команда форума
Утилита для загрузки lua скриптов во флеш память ESP8266 с прошивкой NodeMcu
Скачать с github

Позволяет заливать текстовые файлы, содержащие lua-скрипты, во флеш память.
 

hav0k

New member
чот не могу залить init.lua

./luatool.py -p /dev/tty.SLAB_USBtoUART -f init.lua -t init.lua

Хотя вроде 1 раз залилось и в коде вписывал, пока не разбирался почему не пашет. Вообще идея отказаться от ком порта и получается освободится 1 gpio(4) с синеньким светодиодом. Но я так не могу его зажечь.

Идея проста: 1 кнопка 1 выход через (твердотельное реле) и больше нет распаянных gpio, а тут и светодиод есть. Консоль прокинуть по tcp.
 

hav0k

New member
В чем то и дело что выводися lua код и ок. Не понял как но как то в старый раз загрузился.

Взял голый моудь.

Код:
lua: cannot open init.lua
NodeMcu 0.9.2 build 20141120  powered by Lua 5.1.4
Код:
 ~/p/lua/luatool/luatool/ [master*] ./luatool.py -p /dev/tty.SLAB_USBtoUART -f init.lua -t init.lua
Downloader start
start writing...
print('init.lua ver 1.2 mymy')
All down.
 ~/p/lua/luatool/luatool/ [master*]
вырубаю питание, врубаю в логе.

Код:
lua: cannot open init.lua
 

Victor

Administrator
Команда форума
приложите еще, пожалуйста, сам LUA файл, который вы пытаетесь загрузить
 

hav0k

New member
Код:
print('init.lua ver 1.2 mymy')
--wifi.setmode(wifi.STATION)
--print('set mode=STATION (mode=',wifi.getmode(),')')
--print('MAC=',wifi.sta.getmac())
--print('set wifi')
-- wifi config start
--wifi.sta.config("ssid","MasterPassword")
-- wifi config end
--gpio.mode(4,gpio.OUTPUT)
--gpio.write(4,gpio.HIGH)
Файлик 1 строчка. Я чуть попозже потыркаю. А он сразу пишет во флеш? Хотя майн грузит нормально.
 

Victor

Administrator
Команда форума
я понял, что одна строчка - я хотел увидеть какие у вас там коды перевода строки и попробовать ваш файлик загрузить у себя
 

hav0k

New member
Ща выложу форком в гитхаб. Если не путаю то только \n.

Готово.

Походу дела проблема с \r\n. Под виндой писалось это дело?
 
Последнее редактирование:

hav0k

New member
file.remove("init.lua") тоже не прокатывает.


UPD: Похоже дело было в питании
 

Victor

Administrator
Команда форума
да нет, /r/n не при делах
попробовал именно ваш файл залить на чистую прошивку и прошивку с уже существующим init.lua - каждый раз все ок.
тестировал на последней прошивке 20141125.
На всякий случай добавил еще паузы кое-где, на тот случай, если у вас комп "ну очень быстрый".
Качайте с гита свежую версию и пробуйте.
 

hav0k

New member
Нечаянно подключил к 5 вольтам и все отработало, не спалил даже. :).
Видимо стабилизатор 1117 3.3 оказался нерабочим и выдавал не 3.3.

Тестер дома остался скоро проверю чудо платку купленную в местном магазе.

Нашел репо в гите https://github.com/cendev/nodeMCU-lua-uploader-over-TCP-IP. Там кода то 10 строк, а сервер наподобие этого.

Код:
file.open("server.lua","w+")
s=net.createServer(net.TCP)
s:listen(8888,function(c) c:on("receive",function(c,pl) print(pl) pcall(loadstring(pl)) end) end)
file.close()
Думаю вешь то нужная, иначе приходится консоль постоянно дергать, чтобы файлик залить.
 
Последнее редактирование:

Victor

Administrator
Команда форума
Новая версия luatool 0.4

Из основных изменений: теперь после отправки каждой строки файла проверяем ответ от LuaMCU (раньше просто с небольшими паузами между строчек было)
 

hav0k

New member
О хорошая новость.

Вот чудо платка выдавала 2.8 вольт и 3.3 v, за место (3.3 и 5 соответственно). При 2.8 вольт чип работает, но не записывает нечего во флеш и при открытии файла с 'W' ошибка.

Так что проблема была у меня. Сори что дергал.
 

Victor

Administrator
Команда форума
О хорошая новость.

Вот чудо платка выдавала 2.8 вольт и 3.3 v, за место (3.3 и 5 соответственно). При 2.8 вольт чип работает, но не записывает нечего во флеш и при открытии файла с 'W' ошибка.

Так что проблема была у меня. Сори что дергал.
Ну, благодаря вам, я собрался, наконец-то, переписать тупую запись с паузами на нормальную передачу с проверкой ответа от прошивки, так что вам спасибо!
 

hav0k

New member
Есть проблема в паузе.
В функции writeln после s.write(data) поставил time.sleep(1). И заработало.

ЗЫ Без ошибок записалось с паузой не менее 0.3 скорость порта 9600.


Код:
 ~/p/lua/handyswith/ ./luatool.py -p /dev/tty.SLAB_USBtoUART
Downloader start
Set timeout 3
Set interCharTimeout 3
Stage 1. Deleting old file from flash memory
->file.open("main.lua", "w") -> ok
->file.close()

ERROR
send string    : 'file.close()'
expected echo  : 'file.close()'
but got answer : ' file.close()'

Traceback (most recent call last):
  File "./luatool.py", line 139, in <module>
    writeln("file.close()\r")
  File "./luatool.py", line 57, in writeln
    raise Exception('Error sending data to LuaMCU\r\n\r\n')
Exception: Error sending data to LuaMCU
Код:
 ~/p/lua/handyswith/ ./luatool.py -p /dev/tty.SLAB_USBtoUART
Downloader start
Set timeout 3
Set interCharTimeout 3
Stage 1. Deleting old file from flash memory
->file.open("main.lua", "w") -> ok
->file.close() -> ok

Stage 2. Creating file in flash memory and write first line->file.remove("main.lua") -> ok
->file.open("main.lua", "w+") -> ok

Stage 3. Start writing data to flash memory...->file.writeline([[print("lua script loaded by luatool 0.4")]]) -> ok
->file.writeline([[print('main.lua ver 1.1')]]) -> ok
->file.writeline([[-- web config]]) -> ok
->file.writeline([[ip="91.201.52.76"]]) -> ok
->file.writeline([[name="esp8266.ru"]]) -> ok
->file.writeline([[port=80]]) -> ok
->file.writeline([[-- web config]]) -> ok
->file.writeline([[function getHTTPreq()]]) -> ok
->file.writeline([[print('send GET to http server...')]]) -> ok
->file.writeline([[conn=net.createConnection(net.TCP, false)]]) -> ok
->file.writeline([[conn:on("receive", function(conn, payload) print('http server answer:'..payload) end)]]) -> ok
->file.writeline([[conn:connect(port,ip)]]) -> ok
->file.writeline([[conn:send("GET / HTTP/1.1\r\nHost: "]]) -> ok
->file.writeline([[..name.."\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")]]) -> ok
->file.writeline([[end]]) -> ok
->file.writeline([[tmr.alarm(1000, 1, function()]]) -> ok
->file.writeline([[if wifi.sta.getip()=="0.0.0.0" then]]) -> ok
->file.writeline([[print("connecting to AP...")]]) -> ok
->file.writeline([[else]]) -> ok
->file.writeline([[print('ip: ',wifi.sta.getip())]]) -> ok
->file.writeline([[getHTTPreq()]]) -> ok
->file.writeline([[tmr.stop()]]) -> ok
->file.writeline([[end]]) -> ok

Stage 4. Flush data and closing file->file.writeline([[end)]]) -> ok
->file.flush() -> ok

--->>> All down <<<---
->file.close() -> ok%[
 
Последнее редактирование:

Victor

Administrator
Команда форума
v0.5 добавил новые опции:
-r, --restart - авторестарт после загрузки
-d, --dofile - автозапуск загружаемого файла после загрузки
 

hav0k

New member
Виктор благодарствую.

У меня получаются команды всегда такого вида -f xxx.lua -t xxx.lua. В основном локальное имя файла равно имени на датчике. Думаю загружать с 1 параметром, а второй параметр требуется когда имя файла отличается.
 

Victor

Administrator
Команда форума
Виктор благодарствую.

У меня получаются команды всегда такого вида -f xxx.lua -t xxx.lua. В основном локальное имя файла равно имени на датчике. Думаю загружать с 1 параметром, а второй параметр требуется когда имя файла отличается.
да, это неплохая идея. есть еще пара предложений, так что похоже, что в выходные я буду занят :)
 

hav0k

New member
Есть подвижки? После многочисленных заливок в устройство иногда не отрабатывает пауза 0.3. поменял на 0.4.
 
Сверху Снизу