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

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

  1. ИгорьК

    ИгорьК Оракул Модератор

    Еще вариант объяснения.
    Если у тебя устройство, которое последовательно опрашивает датчики, оно может позволить себе по порядку обновлять данные в таблице "ключ-значение" и после цикла опроса отправлять все на брокер.

    Но если у тебя все устройство состоит лишь из ожидания событий, то ты не можешь каждому событию давать право публикации.

    Любое событие обрабатывается асинхронно и результат - запись в таблице, причем именно путем table.insert(...). То есть - таблица была пустая а теперь в ней появляется одна или несколько записей.

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

    Публикация - затратное и по времени и по памяти явление. Поэтому только один поток в коде имеет право наиболее экономно осуществлять ее, а всем остальным позволено лишь втыкать данные в таблицу.
     
    Последнее редактирование: 2 сен 2018
  2. Securbond

    Securbond Гуру

    Спасибо.. стало ещё немного понятнее работа с таблицами в LUA...
     
  3. Securbond

    Securbond Гуру

    Сделал так, может кому пригодится... нужно еще попробовать с несколькими датчиками.
    Код (Lua):

    do
    temp = {}    -- склад температуры
    pin = 4        -- нога датчиков
    del = 750    -- задержка чтения температуры

    -- callback функция обработки значений
    function myWork()

        -- нашли датчиков:
        print("Got DS18b20: "..#temp)
        -- значения датчиков
        table.foreach(temp, print)
        -- kill'em all:
        ds = nil
        package.loaded["ds18b20m"]=nil
      --   Здесь можно вызывать функции, которые обеспечат
      --       дальнейшую обработку значений датчиков.
        table.insert(topub, {'tempDS', temp[1]}) -- добавляем данные температуры в таблицу для отправки на брокер
        dat.tempDS = (temp[1]) -- записываем температуру в глобальную таблицу, вдруг пригодится
        print("tempDS: "..dat.tempDS)
        dofile('pubnow.lua')
        temp = {}    -- обнуляем таблицу temp

    end
    --ds = require('ds18b20m')
    -- Запрос температуры с передачей
    -- таблицы, callback функции, номера пина
    -- и времени задержки
    --ds.getTemp(temp, myWork, pin, del )
        -- Или создать таймер и читать температуру:
    tmr.create():alarm(30000, 1, function()
        ds = require('ds18b20m')
        ds.getTemp(temp, myWork, pin, del )
    end)

    end
     
    P.S. Для тех кто решит тупо скопировать и запустить, скажу что для запуска данного скрипта нужно прочитать желательно всю ветку выше и залить в ESP все необходимые для обработки информации файлы.
     
    Последнее редактирование: 2 сен 2018
  4. ИгорьК

    ИгорьК Оракул Модератор

    Если скрипт ничего больше не делает, можно таблицу temp сразу публиковать - из нее данные и будут изыматься.
     
  5. Securbond

    Securbond Гуру

    Игорь еще вопрос для познания дзена таблиц.
    Есть два варианта
    tabl1.JPG tabl2.JPG

    Правильно я понимаю, что в левом варианте мы сначала объявляем таблицу, потом заносим данные, а в правом сразу создаём таблицу с данными? Есть ли разница? и как правильно ?
     
  6. ИгорьК

    ИгорьК Оракул Модератор

    Оба правильно.
     
  7. ИгорьК

    ИгорьК Оракул Модератор

    NodeMCU не слишком сосредоточены пилить прошивку для ESP32. У ребят идея - Lua 5.3 для ESP-8266.
    В принципе, надо переползать на ESP32 как более перспективный модуль, но у меня никак не возникает задач под него.

    upload_2018-9-4_17-1-4.png
     
  8. Mitrandir

    Mitrandir Гуру

    Хочу просто замутить что-то типа геймбоя на nextion + esp вот думаю какой есп брать..
     
  9. ИгорьК

    ИгорьК Оракул Модератор

    Не стоит с альфой связываться, ИМХО.
     
  10. Mitrandir

    Mitrandir Гуру

    Просто есп32 чутка помощнее.
     
  11. ИгорьК

    ИгорьК Оракул Модератор

  12. Mitrandir

    Mitrandir Гуру

    В эспруино же javascript ?
    Lua или js мне пока для идеи не принципиально...
     
  13. ИгорьК

    ИгорьК Оракул Модератор

    Ну да, JavaScript. Они с Lua достаточно похожи. Различия начинаются с некоторого уровня, но глобальная логика близка.
     
  14. ИгорьК

    ИгорьК Оракул Модератор

    У меня иногда возникает желание затеять тему 'ESP32 - азы программирования на JavaScript'.
    Но спецов в JS на порядок больше чем на Lua и там обязательно появится толпа критиков :)
     
    DIYMan и Mitrandir нравится это.
  15. Mitrandir

    Mitrandir Гуру

    Да прям тут много спецов по js.. Вся движуха вокруг джаваскрипта это "не могу установить библиотеку амперки"
     
  16. ZAZ-965

    ZAZ-965 Гуру

    A С++ чем не подошел?
     
  17. DIYMan

    DIYMan Гуру

    Был бы рад такой теме, без шуток. А на "спецов" - плевать.
     
  18. ИгорьК

    ИгорьК Оракул Модератор

    Я уже высказывался как-то на эту тему... :)
    В общем, из основных претензий к C++ - библиотеки из двух файлов и слишком много точек с запятой.

    Lua этих фундаментальных недостатков лишен.
     
  19. ИгорьК

    ИгорьК Оракул Модератор

    Ребята!!!! Это шутка!!!!
     
    DIYMan нравится это.
  20. DIYMan

    DIYMan Гуру

    Да я понял, что шутка. Но! Считаю, что твои темы крайне полезны для форума.
     
    Mitrandir нравится это.