ESP-8266/ESP32 NodeMCU Lua: азы программирования.

Тема в разделе "ESP8266, ESP32", создана пользователем ИгорьК, 25 июл 2017.

  1. obuhanoe

    obuhanoe Гик

    Небольшой проект есть на Lua, уменьшенная копия Автополива для домашнего использования.

    Усегда готов :)
     
  2. obuhanoe

    obuhanoe Гик

    Одна из причин хочу отказаться от SIM800L и заменить взаимодействие через WIFI
     
  3. b707

    b707 Гуру

    а Луа-то тут причем? вы думаете WiFi нельзя из С++ программ использовать? :)
     
  4. obuhanoe

    obuhanoe Гик

    хочу добавить в свой список знания языков Lua

    не думаю, а знаю что можно.

    Я сам разработчик. но из другой области - Oracle, MSSQL, Postrgre и т.д.
     
  5. ИгорьК

    ИгорьК Гуру

    Таки это другое дело. Берите отсюда проект и все что касается mqtt у вас уже есть. Пройдите логикой от -_init.lua до main.lua и оставьте необходимое.
     
  6. obuhanoe

    obuhanoe Гик

    По мере создания скелета программы, буду вникать в информацию по Вашим ссылкам.

    Еще такой вопрос - визуализация данных на скриншотах это что?

    Спасибо.
     
  7. ИгорьК

    ИгорьК Гуру

    Частично встроенные средства Home Assistant, частично внедренная в него же Графана с базой InfluxDB. В базу данные поступают через mqtt, их забирает соответствующий плагин NodeRed.
     
    obuhanoe нравится это.
  8. Inoy

    Inoy Нуб

    Добрый день, пытаюсь собрать прошивку вместе с файловой системой (через докер образ). Куда нужно скопировать файлы чтоб они скомпилировались вместе с кодом? прошивка появляется, прошивается и работает но с пустой FS (сохранял lua фалы в /nodemcu-firmware/local/fs/). Или это возможно сделать только в LFS? Или это как-то по другому делается? Получилось собрать через luac.cross в img но как его поместить в SPIFFS не разобрался.
     
    Последнее редактирование: 21 июн 2022
  9. ИгорьК

    ИгорьК Гуру

    Давайте распутаем ваш вопрос.
    1. Компиляция прошивки - изготовление интерпретатора языка. Он компилируется и заливается в модуль самостоятельно.

    2. При компиляции (п.1) можно заказать место для LFS - специальной области памяти, куда выкидывается часть БУДУЩЕГО кода программы для уменьшения расхода оперативной памяти.

    3. Если "заказано" наличие LFS, то изготовление этого LFS из файлов программы - отдельная процедура.

    Теперь ваш вопрос заново.
     
  10. ИгорьК

    ИгорьК Гуру

    1. Загружаем в модуль как обычный файл.
    2. Вызываем команду
    Код (Lua):
    node.LFS.reload("ИмяФайла.img")
    3. Если имидж скомпилирован правильно - модуль перегрузится, если не правильно - фигвам.
    4. Удаляем файл имиджа.
     
  11. Inoy

    Inoy Нуб

    Я хочу записать lua файлы вместе с основным кодом написанным на C. Как я понимаю мне нужно их собрать в соответствии с форматом SPIFFS и записать с определенного адреса в памяти. Я нашел проект - https://github.com/moononournation/nodemcu-webide. Там фалы уже находятся в прошивке nodemcu-webide-4m.bin.gz. Пытаюсь сделать такой же файлик. Я понимаю что можно сделать склейку в FLASH_DOWNLOAD_TOOLS но не могу нормально подготовить файл и не пойму с какого адреса записывать.

    Основная цель, сделать аналогичной проект - https://shiotiny.ru/eldraw/eldraw.html
    Только открытый.
     
  12. ИгорьК

    ИгорьК Гуру

    Не помогу. Так не делал.
     
  13. Inoy

    Inoy Нуб

    Я собрал два файла через докер.
    0x00000.bin и 0x10000.bin
    еще там полная прошивка есть nodemcu_float_release_20220621-1807.bin
    Много сайтов перевернул, не нашел как включить внутрь файлы
    Тут есть - https://nodemcu.readthedocs.io/en/release/spiffs/ текст
     
  14. ИгорьК

    ИгорьК Гуру

    Какаие? Те что написаны на Сях как модули? Это отдельная тема, мне не ведомая. (Не понимаю смысла писать на Си для NodeMCU, проще это делать тогда без Lua в соответствующем фреймворке. Но здесь ничего не утверждаю.)

    Если это касается lua файлов проекта для подгрузки в LFS, то на странице 55 подробно рассказано как подготовить и применять для этого VS Code.
     
  15. Inoy

    Inoy Нуб

    Я пытаюсь максимально упростить путь пользователя.
    Первый этап:
    1. Пользователь загружает с сайта файл Firmware.bin и программу PyFlasher.exe
    2. Прошивает программой PyFlasher файл Firmware.bin в ESP
    3. Заходит на ESP и настраивает сеть и учетную запись

    Файлы lua должны уже находится в прошивке Firmware.bin

    На втором этапе все собирается в программу наподобие EspEasy Flasher, только по проще (пользователь сразу и прошивает и настраивает ESP в программе)
    [​IMG]
     
  16. ИгорьК

    ИгорьК Гуру

    Чего за него переживать :)

    Насколько мне помнится, единственный путь закатать одним файлом прошивку в ESP - из консоли с помощью esptool скачать весь образ с работающей платы и тем же esptool переместить на новый модуль.
    Но сам так никогда не поступал и точнее не посоветую.
     
  17. ИгорьК

    ИгорьК Гуру

    MQTT. Иногда устройства после потери соединения с брокером но при наличии соединения с сетью не могут его восстановить, приходится перегружать.

    Открыл Америку - нашел причину.
    Соединение, как следует из документации, осуществляется шаблоном:
    Код (Lua):
     m:connect(broker, port, false, subscribe, error)
    Где, error - функция, вызываемая в случае любых проблем с соединением.

    Таки страшная тайна! Эта функция, когда теряется ИМЕННО существующее соединение, вызывается дважды подряд! Результат, в зависимости от реализации, функция восстановления соединения может инициировать два последовательных подключения к брокеру, где устанавливаются оба соединения, но брокер, увидев задвоение, выкидывает модуль со всеми его причудами в помойку. А дальше - опять двойной вызов соединения. Вот и вся недолга.

    Отсюда, небольшая переделка кода повторного соединения категорически решает все проблемы.

    (Как увидел. Совпадение двух случайностей. Установил тестовый брокер на виндовую машину и вручную включал/выключал его. Вывел на печать код ошибки потери соединения (который, положа руку на сердце нафиг не нужен). В результате и наблюдал два вызова функции, причем код ошибки второго вызова... Ну, посмотрите сами. )

    upload_2022-6-23_12-2-33.png
     
    Последнее редактирование: 23 июн 2022
    serg3295, DetSimen и arkadyf нравится это.
  18. Inoy

    Inoy Нуб

    [​IMG]
    Благодарю, все получилось. Прошил - все файлы появились
     
  19. Inoy

    Inoy Нуб

    Всем привет. Сейчас в поисках реализации протокола WebDAV на скрипте lua. Может кто-то встречал?
    Пока только на С нахожу под nodeMCU

    Еще где-то видел хеш таблицы для логирования и поиска данных, ссылку не могу найти.
     
  20. obuhanoe

    obuhanoe Гик

    Игорь, у Вас получилось на esp32 (модуль time) - установить TimeZone?
    Если установить вот так:
    Код (Text):
    time.settimezone('EST-3')
    То значение возвращается, как будто и не устанавливали TZ.