плохо работает датчик двери wifi на esp8266 lua nodemcu

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить
Электрический кот
Аватара пользователя
Сообщения: 1057
Зарегистрирован: Ср мар 17, 2010 18:19:09
Откуда: новосибирск

Сообщение shinji2009 »

привет. собрал вот такой датчик
http://www.simpleiothings.com/10-diy-door-sensor/
и он короче не работает долго. виснет. после 12 часов примерно.
понял примерно что виснет sensor.lua. я расставил в нём команды вывода на печать текста lolNN чтобы понять где он виснет. но когда он зависает, в лог терминала ни один lol не выводится. дебаг выдаёт что да, контакт к земле притянули. а скрипт на месте стоит. как будто зависает всё на одной команде
gpio.trig(buttonPin,"down", debounce(onChange))
я нашёл вот такой баг на гитхабе https://github.com/nodemcu/nodemcu-firmware/issues/874 по описанию очень походит на то что имею я. решением написано использовать команду ICACHE_RAM_ATTR для работы с gpio. но я не знаю как её вставить в скрипт, не могу найти примеров её применения в lua скрипте.

пытался спрашивать на вроде бы специализированном форуме, там как-то глухо https://esp8266.ru/forum/threads/ploxo- ... wifi.1714/

помогите?

скрипты
simpleiothings.zip
(7.39 КБ) 162 скачивания
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1057
Зарегистрирован: Ср мар 17, 2010 18:19:09
Откуда: новосибирск

Сообщение shinji2009 »

короче мне на гитхабе пояснили что это только если на сях писать тогда этот атрибут можно вставлять. в луа скриптах он не используется. и посоветовали спросить на форуме. лол
Реклама
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Чт июл 24, 2014 00:25:25

Сообщение Igor3 »

shinji2009 писал(а):привет. собрал вот такой датчик
http://www.simpleiothings.com/10-diy-door-sensor/
и он короче не работает долго. виснет. после 12 часов примерно.
Вы к wifi(!) прикручиваете охранный датчик, причём не на нанотехнологиях, а на сермяжном герконе, задайте себе вопрос:”зачем?”- и всё встанет на свои места :). Микроскопом тоже можно забивать гвозди, но неудобно, причём электронным – только втроём!
Электрический кот
Аватара пользователя
Сообщения: 1073
Зарегистрирован: Вт май 22, 2012 19:29:06

Сообщение Foton-4n »

Wi-Fi и датчики охраны :shock:.

Микроскоп гвозди зачем? Лучше ДУ через 4G сделать звонить девайсу и работать через голосовое меню будет аналог.

Но геркон то что в нём плохого? По надёжности он превосходит все нанотехно, вариант с тем что кто то магнитом может подмагнитить его при открывании маловероятен. Хотя датчик всё же надо юзать более надёжный в плане воздействий.
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Чт июл 24, 2014 00:25:25

Сообщение Igor3 »

Foton-4n писал(а):Но геркон то что в нём плохого? По надёжности он превосходит все нанотехно,
Я ровно это и сказал – единственное, что сделано правильно – это геркон – он единственный здесь на месте :). А про нанотехнологи – это шутка ( в смысле, что можно было здесь использовать мп, да еще с левой библиотекой на библиотеке, если бы он давал хоть какой-то выигрыш, ради которого можно поступиться надёжностью – например, определял количество входящих, либо детектировал их намерения, путём считывания мыслей :), а ТС не понял...и заминусовал (Галелея, помницца тоже сначала много минусовали...)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Соберите свежую прошивку NodeMCU тут (ссылка)
Там предлагают выбрать сборку прошивки от любого из двух авторов (master или dev).
Выбирайте от автора dev (NodeMCU версии 2.0)
Не забудьте указать корректный e-mail, так как на него придет ссылка на готовую свежесобранную прошивку.
Ниже можно выбрать модули, которые Вы хотите включить в прошивку. GPIO уже включен по умолчанию.

Я пользуюсь именно этой версией. Девайс у меня опрашивает датчик DHT-22 (AM2302),
модуль поддержки которого активно работает с GPIO. Девайс работает уже месяц без единого зависания и перезапуска.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1057
Зарегистрирован: Ср мар 17, 2010 18:19:09
Откуда: новосибирск

Сообщение shinji2009 »

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

тем не менее я уже разобрался. не сказать что я нашёл в чём был глюк, потому что программа написана правильно. просто видимо эту программу никто не тестил на новых прошивках, а на старых она может и не глючила. я нашёл вариант который не виснет. спасибо)
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Не знаю. Я на последнней прошивке от master поймал какой-то странный глюк с GPIO, который не проявляется на прошивке dev.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Электрический кот
Аватара пользователя
Сообщения: 1057
Зарегистрирован: Ср мар 17, 2010 18:19:09
Откуда: новосибирск

Сообщение shinji2009 »

оу. ну тогда большое спасибо. надо будет потестить. ибо https://esp8266.ru/forum/threads/ne-rab ... jmer.1795/
Электрический кот
Аватара пользователя
Сообщения: 1057
Зарегистрирован: Ср мар 17, 2010 18:19:09
Откуда: новосибирск

Сообщение shinji2009 »

не, с dev вообще не работает. пишет PANIC: unprotected error in call to Lua API (ifttt.lua:66: already connected)

там у меня conn:connect(80,ip)

всё что находил по этой ошибке - пишут таймер мол какой-то не остановлен. какой таймер? хз

они что-то поменяли в обоих ветках, теперь моя программа не работает на новых билдах. прекрасно, просто прекрасно

убрал команды которые не нравились lua, добился работы на новой прошивке с dev ветки. всё равно gpio глючит :3
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

А какой GPIO пин используется для опроса датчика СМК? Я, к примеру, старался не трогать пины, на которых имеется какая-нибудь периферия, вроде SPI или UART, если их поддержка добавлена в билд. Дома на этой штуке у меня работает датчик DHT-22, подключенный к GPIO5.
На GPIO5 (ножка D1 на девборде NodeMCU v2. она же под номером 1 в Lua) нет никакой периферии, потому этой ноге ничто не мешает.
И еще. Старайтесь подальше держаться от анонимных функций в качестве аргумента. Тут используется старый движок Lua, у которого ингода наблюдаются глюки при парсинге скрипта.

Код: Выделить всё

function onChange()
    if gpio.read(buttonPin) == 0
    then 
        count = count + 1
    
        tmr.alarm(6,timerThreshold,0,function() 
        resetCounter()
        print("Time limit reached. Restarting Counter...")
        end)
        
        if count == sensorThreshold
        then 
            print("(" .. count .. ") sensor inputs counted! Sending Alert!")
            dofile("ifttt.lua")
        else 
            print("(" .. count .. ") sensor inputs counted...")
        end        
    end
end
можно переделать так:

Код: Выделить всё

exceptionExec = 
{
    function() 
        resetCounter();
        print("Time limit reached. Restarting Counter...");
    end,
    function()
        print("bla-bla-bla occured");
    end,
};

function onChange()
    if(gpio.read(buttonPin) == 0) then
       count = count + 1;
    
        tmr.alarm(6,timerThreshold,0,exceptionExec[1]);
        
        if(count == sensorThreshold) then 
            print("(" .. count .. ") sensor inputs counted! Sending Alert!");
            dofile("ifttt.lua");
        else 
            print("(" .. count .. ") sensor inputs counted...");
        end        
    end
end
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Электрический кот
Аватара пользователя
Сообщения: 1057
Зарегистрирован: Ср мар 17, 2010 18:19:09
Откуда: новосибирск

Сообщение shinji2009 »

используется buttonPin = 2 ( GPIO4 )
да у esp на всех контактах что-то висит)
в билде вообще ничего нет кроме стандартных 7 модулей но uart среди них есть. его же нельзя отключить? или если отключу то модуль перешиваться перестанет?

спасибо, попробую другие пины. попробую ваш скрипт.
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Прошивкой ПЗУ занимется загрузчик. Потому, если не будет поддержки UART в прошивке, то возможно (не проверял просто),
невозможно будет залить только скрипты в память, но возможность прошить сам чип всегда есть.
Ну а GPIO4 - это вроде свободная нога. Чуть попозже попробую залить ваши скрипты на свою плату и проверить.

UPD: Нашел небольшое несоответствие с API в коде.

Код: Выделить всё

function debounce (func)
    local last = 0
    local delay = 10000

    return function (bounceCheck) -- Конкретно эта функция
        local now = tmr.now()
            if now - last < delay
            then return
            end
        last = now
        return func(bounceCheck)
    end
end
Дело в том, что Callback функция для gpio.trig должна иметь следующий вид:

Код: Выделить всё

function GpioXIntCallback(pinLevel, intTimestamp)
    -- где
    -- pinLevel - состояние ноги на момент прерывания
    -- intTimestamp - это по сути значение из tmr.now. То есть, значение таймера на момент возникновения прерывания
end
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Ответить

Вернуться в «Практика»