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

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

  1. swc

    swc Гик

    1. gpio.mode(pin3, gpi:confused:UTPUT, gpio.PULLUP) -> gpio.read(pin3)
    2. Перед чтением - установить режим gpiо.INPUT
    3. Ваша задача может быть решена правильным способом, а именно: прерывание по событию изменения уровня на пине.
     
  2. Ferdinand

    Ferdinand Нерд

    Вы имеете ввиду так?


    Код (Lua):

    sensor=4
    pin3=3
    gpio.mode(sensor, gpio.INPUT, gpio.PULLUP)
    gpio.mode(pin3, gpio.OUTPUT, gpio.PULLUP)

    function status ()
           gpio.mode(pin3, gpio.INPUT, gpio.PULLUP)
        if gpio.read(pin3) > 0 then
            print("on")
        else
            print("off")
    end

    gpio.trig(sensor, "up", status)
     
    То так, то же не работает.

    Код (Lua):

    sensor=4
    pin3=3
    gpio.mode(sensor, gpio.INPUT, gpio.PULLUP)
    gpio.mode(pin3, gpio.OUTPUT, gpio.PULLUP)

    function status ()
              print(gpio.read(pin3))
    end

    gpio.trig(sensor, "up", status)
     

    Но если вот так, то все print выводит (но, это так, для проверки)
    Видимо дело в написании самой функции, не могу понять где проблема (
     
  3. swc

    swc Гик

    Попробуйте так: if gpio.read(pin3) == gpio.HIGH then ...
    С Новым годом!
     
  4. ИгорьК

    ИгорьК Гуру

    Несколько слов о версиях NodeMCU.

    К настоящему времени актуальная версия NodeMCU основана на SDK 3.0.1. То есть, за прошедшее время, SDK эволюционировала дважды c версий версии 1.Х.Х и 2.Х.Х.

    NodeMCU отзывалась своевременно, но при этом вносились и небольшие изменения в некоторые системные функции.

    Весь код, который делался во время актуальности каждой версии являлся на тот момент рабочим, однако гарантировать это на продолжительном участке времени не возможно.

    В частности, в первых версиях модуля MQTT в функции вызова соединения с брокером mqtt.client:subscribe() был обязательным аргумент "автоконнект" как выбор "1/0", потом он стал факультативным, и, наконец, он просто исчез.

    Таким образом, нынче скрипты, где при вызове функции передается этот аргумент будут вызывать ошибку и перезагрузку устройства, если попытаться запустить из на последнем SDK.

    Не исключено, что существуют и иные ситуации, аналогичные этой.

    Что делать?
    1. Признать, что такова реальность. Совсем недавние скрипты могут через некоторое время начать брыкаться.
    2. Сохранять в папках со скриптами актуальные на момент их написания прошивки NodeMCU.
    3. Если произошло такое - не пугаться и смотреть логи.

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

    Код (Lua):
    con:connect(brk, port, 0, 0, subscribe, merror)
    и чуть уточняем ее (два нуля заменяем на один "false"):

    Код (Lua):
    con:connect(brk, port, false, subscribe, merror)
    Все заработает снова.
     
    Последнее редактирование: 16 янв 2020
    swc нравится это.
  5. parovoZZ

    parovoZZ Гуру

    Раз не выполняется преемственность, то Си и только Си.
     
  6. ИгорьК

    ИгорьК Гуру

    Чем тебя покормить, тролль?
     
  7. Ferdinand

    Ferdinand Нерд

    Спасибо, но нет. Не хочет совсем (((
    Возможно есть другой способ, сравнения логического выхода с результатом?
     
  8. swc

    swc Гик

    Попробуйте пин поменять. Бывают нюансы.
     
  9. drow

    drow Нуб

    Добрый день.
    Подскажите пожалуйста, делаю сборку на https://nodemcu-build.com/index.php и в ней не работает вызов ни одного модуля, к примеру когда вызываю file, получаю:
    "stdin:1: attempt to index global 'file' (a nil value)"
    Использую ESPlorer v0.2.0-rc5, при этом если прошиваю обратно старой прошивкой (есть и 2017 и 2018 годов когда игрался с ним) с того же nodemcu-build.com то все нормально работает. Это общая проблема или что то не так у меня с самими esp8266 или с ESPlorer или руки не оттуда?
    Спасиьр
     
  10. alp69

    alp69 Форумчанин

    Администрация форума заблокировала автора этой темы. Извините, обратитесь к администраторам... Они, наверное, более сведущи в этих вопросах...
     
    SergeiL нравится это.
  11. Доброго времени суток!
    Возможно ли средствами ESP8266 Lua организовать MySQL запрос и передавать данные на удаленный сервер с БД?
    Можно ли 1000 раз в секунду опрашивать 64шт. 16-ть бит АЦП по SPI?
     
  12. microsystems

    microsystems Нерд

    АЦП какие именно? У всех разное быстродействие.
     
  13. parovoZZ

    parovoZZ Гуру

    Можно.
     
  14. microsystems

    microsystems Нерд

    Если осторожно.
     
  15. alp69

    alp69 Форумчанин

    Некорректно задан вопрос. Из-за того, что отсутствуют определяющие исходные данные, вопрос воспринимается так же как вопрос "можно ли выпрыгнуть из самолета без парашюта". Однозначный с первого взгляда ответ "можно" тоже неоднозначен. Выпрыгнуть из самолета можно только (как минимум) находясь в самолете. Ну и далее - исход прыжка будет разный. И это зависит от условий. Самолет летит, катится по земле или стоит? А может он вообще в бетон замурован?.. Если летит, то с какой скоростью, над какой поверхностью? Если стоит - какое расстояние от площадки спрыгивания до точки приземления? Ну и далее еще вагон и маленькая тележка вопросов, включая главный вопрос "что должно быть результатом прыжка?"
     
    Последнее редактирование: 7 фев 2020
  16. AlsPro

    AlsPro Нерд

    Добрый вечер. У меня вопрос, на который я не могу найти ответ. Есть 6 модулей ESP8266 и 1 модуль ESP32. На последнем сделана точка доступа и остальные модули к ней коннектятся (не одновременно). Четыре ESP8266 из 6 коннектятся без проблем. А две - вообще не подключаются.
    Все прошиты одинаковой прошивкой, подключаются к другой esp8266, к роутеру но не к esp32.
    При этом esp32 выводит такой лог:
    I (175930) wifi: new:<7,0>, old:<7,0>, ap:<7,1>, sta:<255,255>, prof:7
    I (175930) wifi: station: 38:2b:78:04:3a:db join, AID=1, bg, 20
    I (179940) wifi: station: 38:2b:78:04:3a:db leave, AID = 1, bss_flags is 131104, bss:0x3ffc7840
    I (179940) wifi: new:<7,0>, old:<7,0>, ap:<7,1>, sta:<255,255>, prof:7
    I (219490) wifi: max stations already connected to ap! <station>38:2b:78:04:3a:db, AID = 0
    Можно ли их подружить и в чем причины такого поведения?
     
  17. alp69

    alp69 Форумчанин

    Достигнуто максимально мозможное количество поддерживаемых клиентов.
    Кстати, какая прошивка?
     
  18. AlsPro

    AlsPro Нерд

    Только вот как оно достигнуто с 1 клиентом, и то не смог подключится. Прошивка с https://nodemcu-build.com
     
  19. AlsPro

    AlsPro Нерд

    Пробовал 4 рабочих одновременно - все окей, а 2 оставшихся платы никак не подключаются
     
  20. alp69

    alp69 Форумчанин

    В даташите (п.1.2, п.3.5.2) указано, что возможности esp32 ограничены четырьмя виртуальными интерфейсами Wi-Fi.
    Причина та же, что и "почему не цепляются 5й и 6й модули" - очевидно время аренды ip-адреса предыдущими модулями не истекло и esp32 ждет ранее подключавшихся клиентов. Поковыряйте https://nodemcu.readthedocs.io/en/master/modules/wifi/. Для подключения пятого и шестого модулей (не по численности, а по номеру в "стае") возможно поможет стоп/старт DHCP. Но принципиально это картину не поменяет. Модуль просто забудет старые коннекты. Но при достижении четырех клиентов, остальных опять бортанет.
    Даташит прилагаю.
     

    Вложения:

    Последнее редактирование: 19 фев 2020