• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Lua скрипты и модули

Vasiks

Member
Просто подтяжку используйте - программную (при инициализации порта указывайте pullup = gpio.PULLUP) или аппаратную (резистор к питанию).
Программную не пробовал. А на счёт аппаратной не ясно. У меня на выходе висит реле, через оптрон. Когда пин в HIGH - реле замкнуто, когда я читаю пин, он переходит в LOW и реле размыкается. Как тут аппаратную подтяжку использовать? Резистор прилепить, чтоб всегда HIGH был? А управлять им как тогда?
 
Ответ принят. Нужен для тех же целей - конфигурация. При 3 бита попадалось, про "..keep HIGH.." - не видел...
Да и читать комменты к NodeMCU-devkit - это не для первичного знакомства...
Что получается, esp-01 - никакой пин нельзя подать на землю ДО подачи питания. Или есть варианты?

Далее GPIO16 - на рис платы есть, а в каких-то документах(http://esp8266.ru/esp8266-pin-register-strapping/#pins-list) - нет. Так написано, нам не написано. Меня ЭТО не устраивает... А не сам reset.
 

skylocker

Member
У меня на выходе висит реле, через оптрон. Когда пин в HIGH - реле замкнуто, когда я читаю пин, он переходит в LOW и реле размыкается. Как тут аппаратную подтяжку использовать? Резистор прилепить, чтоб всегда HIGH был? А управлять им как тогда?
Для начала, Вы уж определитесь - что у Вас - вход или выход :) Зачем читать состояние управляющей цепи реле, если Вы и так его всегда знаете?
 
Читать было бы не плохо, но схема ЭТОГО процессора делать этого НЕ позволяет.
Для чего? Чтобы не использовать лишнюю переменную при ПЕРЕключении.
А можно глянуть на вашу схему оптронной развязки?
 

skylocker

Member
Да и читать комменты к NodeMCU-devkit - это не для первичного знакомства...
Достаточно просто посмотреть на https://raw.githubusercontent.com/nodemcu/nodemcu-devkit/master/Documents/NODEMCU_DEVKIT_SCH.png
Уверен, все будет понятно и просто.
Так написано, нам не написано. Меня ЭТО не устраивает... А не сам reset.
Теперь я ничего не понял :)
Смотрим на распиновку самой микросхемы - там у GPIO16 написано WAKE с чертой сверху (я не спец, но думаю это - признак одиночного импульса) - при соединении с nRST (RST с чертой сверху) получаем импульс с WAKE на RST и, как следствие, ребут.
 

skylocker

Member
Читать было бы не плохо, но схема ЭТОГО процессора делать этого НЕ позволяет.
Для чего? Чтобы не использовать лишнюю переменную при ПЕРЕключении.
А можно глянуть на вашу схему оптронной развязки?
У меня нет схемы, как с помощью оптрона сделать из одного GPIO одновременно и вход, и выход. Признаться, сомневаюсь, что такие схемы существуют в природе (приведите, плз, свою)..
Да и вообще - не вижу проблемы потратить бит (для выравнивания в машинное слово - 1-2-4 байт) вместо паяния оптрона :)
 
Мы с вами о разных вещах... Все перепуталось... Оптрон здесь вообще не причем...
 

Vasiks

Member
Первый раз вопрос относительно чтения состояния пина был озвучен мной: http://esp8266.ru/forum/threads/lua-skripty-i-moduli.27/page-3#post-683
Это вопрос относительно пина, когда он в состоянии OUTPUT. Можно долго филосовствовать на данную тему, придумывать разные костыли вроде переменной или сохранения состояния в файл, но ответ я уже получил: читать состояние пина (если он выход) без изменения его статуса с 1 на 0 НЕВОЗМОЖНО. Всем спасибо, что хотел - узнал.
P.S. Нет у меня схемы реле с оптроном, это просто тупо реле на 5 вольт со встроенной опторазвязкой, от ардуино.
 
Ну хоть с одним разобрались
Вниманию Vasiks.
Все понял. Спасибо. Модуль может долго не прожить, а может и прожить...
Вниманию skylocker.
1. про GPIO16. Даже для него в описании node.key() ни слова о том, что нельзя включать при нажатой кнопке. Я о том, что ОПИСАНИЕ не позволяет начать работу с модулем быстро.
2. какой пин esp-01 можно подать на землю ДО подачи питания?
PS. черта с верху некого сигнала обозначает ИНВЕРСИЮ. RST с чертой reset будет по нулю, без черты - по единице на входе....
 

skylocker

Member
1. про GPIO16. Даже для него в описании node.key() ни слова о том, что нельзя включать при нажатой кнопке. Я о том, что ОПИСАНИЕ не позволяет начать работу с модулем быстро.
А кто сказал, что нельзя? Посмотрите в схему - при включении node.led на GPIO16 будет LOW для светодиод загорится - как, впрочем, и при нажатии на кнопку.
2. какой пин esp-01 можно подать на землю ДО подачи питания?
На GPIO0 можно подавать GND для заливки прошивки :)
А вообще, я бы не ориентировался на ESP-01 как на основу для построения чего-то. Это - плата для начального прототипирования (думаю, 2.54 ноги неспроста), не более - GPIO мало, ADC нет, deep sleep невозможен, форм-фактор с 8 большими ногами неудобен при использовании модуля на сторонней плате и т.д.

PS. черта с верху некого сигнала обозначает ИНВЕРСИЮ. RST с чертой reset будет по нулю, без черты - по единице на входе....
Точно! Проходили же в институте :) Забыл уже все. Спасибо.
 

MSW

New member
Добрый день!
Имеется в наличии ESP-01
прошил nodeMCU через esptool.py
Код:
./esptool.py -p /dev/ttyUSB0 -b 57600 write_flash 0x000000 nodemcu_latest.bin
NodeMCU 0.9.5 build 20150108 powered by Lua 5.1.4

подключаюсь к своему роутеру и пробую из примеров код вкл/выкл светодиода:
Код:
wifi.setmode(wifi.STATION);
wifi.sta.config("ASUS","");
wifi.sta.autoconnect(1);

gpio.mode(4, gpio.OUTPUT);
gpio.write(4, gpio.LOW);

tmr.alarm(0, 1000, 1, function() 
    ip = wifi.sta.getip()
    if ip~=nil then
        print(ip)
        tmr.stop(0)
        HTTPd()
    else
        print("no connect")
    end
end)

function HTTPd()
    srv=net.createServer(net.TCP);
    srv:listen(80,function(conn) 
        conn:on("receive", function(client,request)
            print(request);
            local buf = "";
            local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
            if(method == nil)then 
                _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
            end
            local _GET = {};
            if (vars ~= nil)then 
                for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do 
                    _GET[k] = v;
                end 
            end
            buf = buf.."<h1> Hello, NodeMcu.</h1><form src=\"/\">Turn PIN1 <select name=\"pin\" onchange=\"form.submit()\">";
            local _on,_off = "","";
            if(_GET.pin == "ON")then
                  _on = " selected=true";
                  gpio.write(4, gpio.HIGH);
            elseif(_GET.pin == "OFF")then
                  _off = " selected=\"true\"";
                 gpio.write(4, gpio.LOW);
            end
            buf = buf.."<option".._off..">OFF</option><option".._on..">ON</opton></select></form>";
            client:send(buf);
            client:close();
            collectgarbage();
        end)
    end)
end
после рестарта подключается к роутеру, получает ип, ип задаётся в настройках dhcp на роутере по mac esp-01.
Код:
node.restart()
> ����<2�R8����z9��H�
NodeMCU 0.9.5 build 20150108  powered by Lua 5.1.4
> no connect
192.168.1.20
проблемка в том что не всегда браузером можно достучатся на плату, а если получается то не всегда она переключает, то есть при выборе изменения состояния браузер пытается перезагрузить страницу но не заканчивается эта попытк, тоесть плата не отвечает...
может подскажите, как можно решить это или это глобальная нестабильность вызванная данной прошивкой, или вообще самого устройства? может лучше ставить компилятор изучать и писать на с? :)
 

NeoroN

Member
Эта нестабильность глобальная - неясно от чего зависит. У меня тоже не каждый раз отвечает, не сразу запускается. Пичаль.
 

MSW

New member
Я не понял что это значит, можете перевести для меня?
похоже то что теперь при чтении состояния вывода он не будет сбрасываться сначала в ноль, как это было раньше и приходилось вводить внутренние переменные что бы в них запоминать включен высокий или низкий уровень на выводе
 

PIKI

New member
похоже то что теперь при чтении состояния вывода он не будет сбрасываться сначала в ноль, как это было раньше и приходилось вводить внутренние переменные что бы в них запоминать включен высокий или низкий уровень на выводе
Ну вот, еще один последователь теории, по которой выведенный в режиме OUTPUT сигнал должен "заклиниться" на выводе, и при чтении с этой ноги в режиме INPUT вернуть записанное "выводом" состояние. Кратко - белиберда. INPUT нужен для того, чтобы увидеть внешний входной сигнал, а не свой внутренний, выданный накануне.
 

MSW

New member
Ну вот, еще один последователь теории
я такие выводы сделал все навсего изучив сообщения форума, по этому записывать меня в какие то последователи по крайне мере поспешно и не обосновано, но да ладно, не суть дело, вместо этого лучше скажите правильно ли я понял суть фикса или нет, это более интереснее чем какие то последователи
 

PIKI

New member
я такие выводы сделал все навсего изучив сообщения форума, по этому записывать меня в какие то последователи по крайне мере поспешно и не обосновано, но да ладно, не суть дело, вместо этого лучше скажите правильно ли я понял суть фикса или нет, это более интереснее чем какие то последователи
Ну что же, перевод: "изменение в том, что теперь применение оператора "gpio.read()" НЕ переводит порт в режим ввода автоматически." Значит, раньше переводило, что не было хорошо.
Исследуйте сами старую и новую прошивки и меньше принимайте на веру все сказанное другими. Тогда ваши выводы будут уже подтверждены фактами, а не словами "похоже на то..."
 

skylocker

Member
Небольшой offtopic - скажите, может я просто не нашел, но.. мануал (https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en) с 30 декабря не обновляется, ветка, созданная специально для ведения мануала (https://github.com/nodemcu/nodemcu-wiki), пустая. На заглавной странице на gitgub - только короткое описание - что в последнем релизе.

Ни описания нового API, ни use-cases по новым фичам... Это болезнь роста или я просто не нашел нового описания API?
 
Сверху Снизу