• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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.
 
Сверху Снизу