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

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

  1. ИгорьК

    ИгорьК Гуру

  2. ИгорьК

    ИгорьК Гуру

    Еще раз повторюсь, делать клиент/сервер все на ESP-8266 да много модулей - это нестабильно.
     
  3. AlsPro

    AlsPro Нерд

    Спасибо. Заказал esp32. Сделаю сервер на ней. Теперь перед каждым вызовом connect проверяю если cl:getpeer()~=nil то закрываю старое подключение. Стабильность клиентов повысилась!
     
    ИгорьК нравится это.
  4. Oxtar

    Oxtar Нуб

    Приветствую! Прошу прощения, если данный вопрос где то задавался (тогда прошу дать ссылку), искал где только возможно. Можно ли подружить ESP8266 с китайским радиоприемником 433 МГц (PT2262, EV1527)? Есть примеры как это делать с помощью Arduino, но как быть если нужно использовать только ESP8266 (через ESPlorer и используя другие модули nodemcu)? В документации есть описание модуля rcswitch, который позволяет передавать сигнал, как с помощью данного модуля принимать сигнал с ходу не разберусь.
     
    Последнее редактирование: 19 дек 2019
  5. ИгорьК

    ИгорьК Гуру

    Примеров здесь нет.

    А как осуществляется связь с ним?
    Если это стандартные интерфейсы (SPI, UART, I2C) - то можно.
    Если это работа на прерываниях, то вряд ли.
     
    Последнее редактирование: 19 дек 2019
  6. Oxtar

    Oxtar Нуб

    Спасибо за ответ, в процессе копания многое стало понятнее. Протокол собственно EV1527, пример на 2 странице: https://oskolchip.ru/datasheet/EV1527.pdf
    Обработка в прерывании. Можно ли использовать готовый автомат в виде какого либо модуля или библиотеки ардуино? Или нужно писать его вручную с использованием прерываний, в чем трудность этого пути? Честно говоря нет четкого понимая можно ли вообще использовать сторонние библиотеки в nodmcu (по-моему нет).
     
  7. ИгорьК

    ИгорьК Гуру

    Для Lua это не вариант. Дело в том, что (1.) модуль, обеспечивая wifi и ряд других собственных процессов, прерывает ход программы, (2) интерпретатор Lua также отъедает прерывания, пользователю остаются остатки "с барского стола". По моему опыту, в среде Lua стабильно работать на прерываниях не получается.

    Легче - в среде Ардуино для ESP-8266, там нет прерываний, что под цифрой 2.

    Сторонние библиотеки от Ардуино в среде Lua, конечно, напрямую использовать невозможно. Можно лишь, для скорости, вникать в их логику и брать ее для написания своей библиотеки. Я так делал несколько раз (и каждый раз убеждался, что в ардуиновских библиотеках лажи немеряно, ну или мне такие попадались).

    Я не утверждаю, что работать с прерываниями в Lua совсем нельзя: https://nodemcu.readthedocs.io/en/master/modules/gpio/#gpiotrig

    Однако, пока не отработают прерывания двух верхних уровней - ваше будет ждать своей очереди. А дальше зависит от ситуации.
     
    Последнее редактирование: 19 дек 2019
  8. Oxtar

    Oxtar Нуб

    Спасибо за ответ. Подумаю над альтернативными способами решить задачу.
     
  9. alp69

    alp69 Форумчанин

    Имею ворох esp12. Задался вопросом - стОит ли переходить на esp32? В чем принципиальная разница между esp8266 и esp32 для самодельщика?
     
  10. AlsPro

    AlsPro Нерд

    Как я понял - в большей производительности. Под сеть выделено отдельное ядро.
     
    alp69 нравится это.
  11. ИгорьК

    ИгорьК Гуру

    Мне важны две вещи: больше ОЗУ и свободный UART.
     
    DetSimen и alp69 нравится это.
  12. Ferdinand

    Ferdinand Нерд

    Что я делаю не так?
    Нужно выполнить действие, в зависимости от условия в функции.
    При вызове функции status, не соблюдается ни одно условие ((

    Код (C++):

    function status ()
        if gpio.read(pin3) > 0 then
            print('on')
        else
            print("off")
        end
     
     
  13. ИгорьК

    ИгорьК Гуру

    1) pin3 - Это как-то объявлено?
    2) Это в функции status() "end" не хватает или просто здесь не дописано?
     
  14. Ferdinand

    Ferdinand Нерд

    Полный скетч


    Код (C++):

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

    print("Сигнал на ноге ключа", gpio.read(sensor))

    function on (t)
        gpio.write(pin3, gpio.HIGH)
        timer_light = tmr.create()
        timer_light:register(5000, tmr.ALARM_SINGLE,
        function (t) gpio.write(svet, gpio.LOW);
        print("off");
        t:unregister() end)
        timer_light:start()
    end

    function status ()
        if gpio.read(pin3) > 0 then
            print('on')
        else
            print("off")
    end

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

    do
    print("Загружено!")
    end
     
     
  15. ИгорьК

    ИгорьК Гуру

    Я не увидел где применяется функция status(). Возможно со смартфона не разглядел.
     
  16. Ferdinand

    Ferdinand Нерд

    На данном этапе, функция status, вызывается в "ручную", в ESPlorer.
    Ее задача, выполнять то или иное действие от логической сигнала на pin3.
    Пока это print.
     
  17. ИгорьК

    ИгорьК Гуру

    Добавьте к ней (функции) первой строкой печать значения того что она читает и посмотрите меняется ли значение при изменении состояния ноги.
    Если ничего не меняется - смотрите соединения.
     
  18. Ferdinand

    Ferdinand Нерд

    Нет, не хочет.
    Даже простой вариант:

    Код (C++):

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

    function status ()
        if gpio.read(pin3) > 0 then
            print('on')
        else
            print("off")
    end

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

    swc Гик

    У Вас pin3 установлен на вывод. Вы с него читаете.
     
  20. Ferdinand

    Ferdinand Нерд

    НА пин 3, у меня мосфет.
    При подаче на него питания, он разве не должен быть логической 1 ?

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