• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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платформенное и байт код.
Какие есть идеи?
 
Сверху Снизу