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

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

  1. ИгорьК

    ИгорьК Гуру

    upload_2018-10-23_17-10-34.png


    Код (Lua):
    do
    uart.setup(1, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, {tx = 16, rx = 17})
    uart.start(1)
    tmr.create():alarm(100, 0, function()
        uart.write(1,' Hello World ')
        uart.write(1,' Its My Life ')
    end)
    uart.on(1, "data", 0,
      function(data)
        print(data)
      end)
    print('End Now')
    end
     
  2. ИгорьК

    ИгорьК Гуру

    Обновил и скомпилировал прошивку для ESP32. По модулям все то же, но явно MQTT подпилили. Может еще что.
    Шить esptool:
    Код (Bash):
    cd C:\esptool\
    py esptool.py --port COM3 flash_id
    py esptool.py --port COM3 erase_flash
    py esptool.py --port com3 write_flash -fm dio 0x1000 C:\esptool\esp32\bootloader.bin 0x8000 C:\esptool\esp32\partitions_singleapp.bin 0x10000 C:\esptool\esp32\NodeMCU.bin
     

    Вложения:

    • esp32.zip
      Размер файла:
      588,6 КБ
      Просмотров:
      252
    Последнее редактирование: 23 окт 2018
  3. В продолжение "умных светодиодов" и Art-Net
    Код (C++):
    --pin для led strip
    gpio.mode(4, gpio.OUTPUT)
    ws2812.init()
    -- гасим 100 светодиодов
    ws2812.write(string.char(0,0,0):rep(100))
    writetobuf = function(_, data)
    -- записываем данные из буфера в ленту
    -- начиная с 19 байта (с 1 по 18 служебные байты Art-Net) по 318 (100 светодиодов 300 байт)
    ws2812.write(string.sub (c, 19, 318))
    end

    udpSocket = net.createUDPSocket()
    udpSocket:listen(6454)
    udpSocket:on("receive", writetobuf)
    все работает, проверял с программой jinx-2.4 и QLC+
    порядок цветов Green,Red,Blue
     
    Последнее редактирование: 24 окт 2018
    ИгорьК нравится это.
  4. RotaryF

    RotaryF Нерд

    При попытке работы в среде ESPlorer-Lua
    , с ВМЕ280 по i2c без подачи питания на этот модуль, естественно ;) получаю ошибку:
    ets Jan 8 2013,rst cause:2, boot mode 3,6)
    ...
    уже/еще на этапе i2c.setup(0, pinSDA, pinSCL, i2c.SLOW)
    Вопрос:
    как программно эту ошибку обработать?
    Ну и еще интересно, как расшифровывается информация этого системного сообщения?
     
  5. ИгорьК

    ИгорьК Гуру

    Пользуйтесь ESPCut
     
  6. RotaryF

    RotaryF Нерд

    Благодарю, попробую, но раньше с ESPCut не работал поищу мануал
     
  7. ИгорьК

    ИгорьК Гуру

    Все то же самое
     
  8. RotaryF

    RotaryF Нерд

    OK
    Все то же самое я и получил:

    ets Jan 8 2013,rst cause:2, boot mode: (3,7)

    load 0x40100000, len 32328, room 16
    tail 8
    chksum 0x4a
    ...

    Как средствами Lua [+IDE] эту ошибку обработать?
    Не хочу чтобы система валилась в случае отказа датчиков.
    Я хочу создать код этой ошибки (от i2c.setup никаких кодов не получаю) и отреагировать на него в Lua-модуле каким либо "своим" образом.
     
  9. ИгорьК

    ИгорьК Гуру

    pcall наше все
     
  10. RotaryF

    RotaryF Нерд

    Понимаю, но с системой пока управиться не могу.
    Если ESPCut имеет какие-то преимущества над ESPlorer в этом плане, буду "копать" в этой среде
     
  11. ИгорьК

    ИгорьК Гуру

    Esplorer (!у меня - остальные молчат!) выдает в модуль периодически такую хрень, что не поймешь ты накосячил или нет.
    В Lua pcall() единственный защищенный вызов для проверки любой глупости.
    Но поскольку вы не выкладываете код - ничего иного посоветовать не возможно.
     
  12. RotaryF

    RotaryF Нерд

    Игорь, Вы итак занимаетесь большой просветительской деятельностью, чтобы грузить Вас всякими мелочами. К тому же, перекладывание своей работы на других (если это не менеджерская область) рождает плохие привычки у подопечных. :eek:
    Покопаюсь малость, чтобы дошли элементарные вещи, а там посмотрим.
    Благодарю за помощь
     
  13. ИгорьК

    ИгорьК Гуру

    В менеджерской области свою работу переложить на других не возможно, поскольку объекты управления у вас и "других" всегда разные. Если кто то считает такое возможным, он не понимает чем управляет.
     
    parovoZZ нравится это.
  14. RotaryF

    RotaryF Нерд

    Одно из юмористических "определений" менеджера ~ это тот, кто заставляет работать других :)
     
  15. ИгорьК

    ИгорьК Гуру

    И да и нет.
    Обеспечивает ресурс, способный работать.
    А ресурс может работать, когда (1.) компетентен,(2.) вовлечен и (3) имеет такую возможность.
    Это и есть объект управления менеджера.
     
    parovoZZ нравится это.
  16. RotaryF

    RotaryF Нерд

    Вот что, я думаю, не сильно напряжет эксперта, так это ответы на такие вопросы по Lua-NodeMCU:
    1) в одной из программ использовалась такая конструкция:
    -- создаем СОБЫТИЕ - постоянный таймер на 5 секунд
    tmr.create():alarm(5000, 1, function(t) ...
    Что дает применение недокументированной(?) 1 вместо tmr.ALARM_AUTO (если я правильно понимаю)?
    2) В классической cron-маске можно указывать интервал, скажем по * 2-5 * * * обработка запускается при попадании в интервал с 2 часов до 5 часов. В NodeMCU указание интервала в cron-маске недопустимо.
    Какие простые приемы существуют для преодоления этой ситуации?
     
  17. ИгорьК

    ИгорьК Гуру

    "1" проще запомнить и напечатать без ошибок, нежели "tmr.ALARM_AUTO"
    "0" - однократный запуск.

    Не думал над этим.
     
  18. RotaryF

    RotaryF Нерд

    Понятно, Игорь.
    Благодарю за доходчивые и оперативные ответы
     
  19. RotaryF

    RotaryF Нерд

    Придется вернуться к "нашим баранам", досаждает мне i2c.setup.
    Как бы я ее ни вызывал, в т.ч. pcall(), результат - вылет программы по
    ets Jan 8 2013,rst cause:2, boot mode: ...
    при отключенном питании на ВМЕ280 (мое понимание моделирования реальной ситуации).
    Слямзил у Roberto Ierusalimschy фрагмент кода:

    local ok, msg = pcall(function()
    pinSDA=6
    pinSCL=5
    i2c.setup(0, pinSDA, pinSCL, i2c.SLOW)
    if unexpected_condition then error(21) end
    end)
    if ok then -- при выполнении защищенного кода ошибок нет
    print (ok)
    else -- защищенный код вызвал ошибку
    print (ok, msg)
    end

    Если я вызываю эту i2c.setup с неверными параметрами, прим, 1ый параметр строка, pcall отрабатывает (правда своеобразно). А вот при корректном вызове но "плохом поведении" самого модуля ВМЕ280, никакой pcall не помогает. Это внутренняя ошибка самого i2c.setup, приводящая к свалу моей системы. Как ее отловить?
     
  20. ИгорьК

    ИгорьК Гуру

    Что значит "плохое поведение"?