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

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

sevic

New member
Беда-беда, тогда лучше самому делитель сделать и на adc завести.. (
А я-то хотел температуру там измерять - чтоб не убить всю память на работу с ds18b20...
Ну как бы на то она и память чтобы загружать в нее что-то полезное. С аналоговым измерением через ADC все равно придется писать процедуру преобразования считанных значений, а если датчик нелинейний к температуре программная лиинеализация может превысить обьем процедуры чтения ds18b20. Я как писал выше, вынес опрос DS18B20 в отдельный файл что заметно разгрузило память. Еще, где-то читал что ADC работает только при выключенном wifi. Я как-то интереса ради пробовал readvdd33() до конекта к AP, вроде работает, возвращает что-то около 3290 . После подключения wifi к AP не пробовал, не скажу.
 

skylocker

Member
Ну как бы на то она и память чтобы загружать в нее что-то полезное. С аналоговым измерением через ADC все равно придется писать процедуру преобразования считанных значений, а если датчик нелинейний к температуре программная лиинеализация может превысить обьем процедуры чтения ds18b20. Я как писал выше, вынес опрос DS18B20 в отдельный файл что заметно разгрузило память.
Копеешный линейный LM35 не требует ничего особого в памяти :) IMHO DS18b20 имеет смысл, только если у Вас их 2 и более в одном устройстве. Но в этом случае часть памяти еще отъедается массивом их данных (ID) - терпимо, если нет задачи передавать их по сети - и вот тут начинаются танцы с бубном, ибо на все сразу (проснулся - прочитал данные температуры - отправил на сервер) памяти в nodeMCU не хватает...

Про отключение WiFi - спасибо, что напомнили, попробую отключить, а потом измерить - отпишусь.
 

skylocker

Member
Вопрос к знатокам радиоэлектроники / элементной базы:
чем лучше поочередно коммутировать к одному ADC две полезные нагрузки - LM35 и резисторный делитель (для контроля напряжения батареек)?
Требования, как я их вижу:
- питание 2 .. 3.3 вольта
- минимальные искажения (сопротивление)
- паябельность

Все, что я нашел по словам "ключи и мультиплексоры" - это либо TC4W53FU (мануал http://media.digikey.com/pdf/Data Sheets/Toshiba PDFs/TC4W53FU.pdf).
Из достоинств:
- переключение двух каналов на 1 вход одной управляющей ногой.
- удобный корпус sop8-p-1.27 (1.27 вполне себе паять можно, у остальных конкурентов между ног 0.5 мм)
Недостатки:
- питание заявлено от 3 вольт
- какое-то бешеное сопротивление скоммутированного канала (50-500 Ом)
- непонятные лично мне, ламеру, ноги Vee и Vcc при отсутствующем GND

Есть еще варианты использовать двойные ключи типа TC7WG126FK (мануал http://www.alldatasheet.net/datasheet-pdf/pdf/213996/TOSHIBA/TC7WG126FK.html) или TC7WBL3305CFK (мануал http://www.toshiba.com/taec/components2/Datasheet_Sync/201404/DST_TC7WBL3306CFK-TDE_EN_10619.pdf).
Из достоинств:
- широкий диапазон напряжения питания (1.65 .. 3.6 Вольт)
- приемлемое сопротивление канала (6 Ом)
Из недостатков
- оч. мелкий корпус
- придется задействовать две ноги ESP для выбора (и в коде тоже чудить лишнего выключая оба и затем подключая нужный)

Цена у всех вроде бы около 15-20 руб/шт. (согласно http://www.eltech.spb.ru/catalog/unit/p/110/id/klyuchi_i_multipleksori).

Может есть еще варианты или я вообще не туда копаю?

UPD: нашел MAX4626 - MAX4628, до 1 Ома при 3 Вольтах и корпус с ~1mm между ногами, но всего один канал - нужно две микросхемы паять.. А каждая рублей по 70 будет ((

UPD 2: нашел analog devices adg839 (http://www.analog.com/ru/products/switches-multiplexers/analog-switches-multiplexers/adg839.html) - 0.6 Ом во всем диапазоне температур, честное переключение одной ногой, 63 цента при больших партиях (у нас 75-90-200 руб, на али - около 150 за штуку)
 
Последнее редактирование:

skylocker

Member
Как и обещал, отписываюсь по поводу node.readvdd33() :

при отключенном WiFi (wifi.sta.disconnect()) работает стабильно, без ребутов. На моем ESP-12 выдает 670-684 при двух свежих батарейках (~2.88V) и 793-807 при трех батарейках за стабилизатором (3.3V).
 

sevic

New member
Как и обещал, отписываюсь по поводу node.readvdd33() :

На моем ESP-12 выдает 670-684 при двух свежих батарейках (~2.88V) и 793-807 при трех батарейках за стабилизатором (3.3V).
Странно.. У меня вычитывалось что-то около 3298, т.е. я полагал, что это в милливольтах. А указанные Вами значения это что? По поводу переключения входа да, adg839 выглядит подходящим. Отрицательные температуры схема мерять не должна? Для этого LM35 надо подключать по схеме дифференциального выхода, а это означает еще один канал измерения...
 

skylocker

Member
У меня вычитывалось что-то около 3298, т.е. я полагал, что это в милливольтах. А указанные Вами значения это что?
Ах, если бы я знал, что это ))
А у Вас ESP-12 выдает 3298?

Про измерение отрицательных температур - откажусь, т.к. дифф входа нет в ESP..
 

Roman

New member
Всем привет. Делаю небольшое устройство на esp8266, которое опрашивает датчик и отдает данные через http запрос. ESPшка подлключается к роутеру в режиме STATION и потом я задаю ей статический ip адрес. Проблема в следующем - постоянно пропадает связь с роутером. Все как бы работает, на команду =wifi.sta.getip() выдает ip адрес. Смотрю лог роутера устройство реально не подключено, хотя сразу после вулючения оно конектится и работает отлично. Мой init.lua:

wifi.setmode(wifi.STATION)
wifi.sleeptype(wifi.NONE_SLEEP)
wifi.sta.config("my_ap","password")
wifi.sta.connect()
wifi.sta.setip({ip="192.168.1.10",netmask="255.255.255.0",gateway="192.168.1.1"})
dofile("main.lua")

После того как связь пропала посылаю команду wifi.sta.connect() и все опять ОК. Роутер вроде нормальный, думаю может устройство уходит в какой то sleep mode, не знаю. Пробовал добавлять команду wifi.sta.autoconnect(1) - не помогает. Может есть у кого то подобный опыт?
 

skylocker

Member
Есть какой-то более-менее равный временной интервал - когда связь рвется (по логу или замерам времени)?
Если да, то имеет смысл посмотреть в настройки роутера - в сторону IP address Lease Time (есть подозрение, что ESP может не отправлять запрос DHCP releasing).
 

JustACat

Moderator
Команда форума
Кстати, да, Roman, а можете попробовать не назначать IP в самом модуле, а присваивать его по DHCP прямо на маршрутизаторе. Обычно на всех роутерах есть функция закрепления IP адреса за конкретным устройством по MAC-адресу. Если такое реализовать - отвалы будут или нет?
Можно еще поставить в код основной периодический PING роутера через какие-то интервалы, раз в час, например.
 

nikolz

Well-known member
Добрый день, Всем!
провел некоторые эксперименты по оценке быстродействия.
--------------------------------------
Исходные данные:
модуль этот http://nodemcu.com/index_cn.html
---------------------------------------
Исследуем работу с DS18B20
------------------------------
1) сначала сделал скрипт примера
так как в существующей библиотеке работы c 1-wire не используются прерывания, то процессор фактически занять 800 ms при 12 битовой точности.
------------------------
2) подключил 2 датчика для проверки идентичности преобразования. в результате систематическая ошибка в пределах 1-2 бит т е 0.0625-0.125
-----------------------------
3) после этого написал драйвер с использованием прерываний.
В результате время загрузки процессора составило 40 ms вместо 800 ms по примеру из пакета.
---------------------------
Кроме того, получились следующие времена:
tmr.now(); --23 мкс
string.char(ow.read(pin)); --1836 мкс
ow.crc8(string.sub(data,1,8)) --115 мкс
ow.reset(pin); ow.select(pin, adT); ow.write(pin,rom,1); -- 6800 мкс
------------------------------------
 
А работа с DS18B20 по прерываниям была бы наверно интересна многим.
Не поделитесь?
 

nikolz

Well-known member
Если смогу скомпилировать вне флеш или добавить драйвера в прошивку nodemcu,
то выложу в свободный доступ.
 

nikolz

Well-known member
по последним измерениям получилось:
для 18B20 затраты времени на одновременное
преобразование и опрос 3 датчиков составляет 40 мс.
максимальная частота дискретизации 1 Гц для 3-5 датчиков.
Это без использования CИ (все исключительно на LUA).
------------------------------
Для BMP180 время чтения информации с датчика составляет 5 ms.
-----------------------------
 
Спасибо за ответ. Но ничего не понял... Это мы про СИ или LUA?
Вроде тема про lua скрипты, о какой компиляции "вне флеш" идет речь?
Вопрос по другому: есть ли работающий по прерываниям lua-модуль взамен ds18b20.lua?
 

TRO

Member
Кстати, может кто в курсе, есть ли утилита для компьютера чтобы скомпилировать код? Или только посредством заливки в модуль, и в нем уже компилить?
 

nikolz

Well-known member
утилиты для компа нет.
Вот разбираюсь почему половина кода после транслятора в байт-код на компе совпадает с файлом lc,
а половина нет.
Вроде кросcплатформенное и байт код.
Какие есть идеи?
 
Сверху Снизу