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

Можно ли отключить красный светодиод на модуле?

alexhi

Member
Здравствуйте!
Подскажите кто знает по таким вопросам:
Есть модуль версии 01 с прошивкой с LUA
1.Можно ли программно из скрипта отключить красный светодиод на модуле(хочу запитать модуль от аккм. отпаивать не "кошерно") Если можно то как.
2.Можно ли в программе при инициализации в Init.lua писать:
wifi.ap.config({ssid="ALEX",pwd="1802345RTSGH"})
не приведет ли это к снижению ресурса FLASH ( проверяется ли перед записью если записываемое совпадает с имеющимся во FLASH ,то запись не происходит) Или просто в тупую записывается во FLASH. Спасибо.
 

CHERTS

Moderator
Команда форума
1. Програмно нет, только выпаивать или резать дорожку.
2. Можно, но зачем делать это каждый раз при старте? Никаких проверок на совпадение с имеющимися данными в прошивке nodemcu нет. Правильну будет делать так, при первом старте писать во flash какой-либо флаг, что конфигурация установлена, потом при следующей загрузке (перезагрузке) проверяем этот флаг, если он есть, то wifi.ap.config не делаем, если флага нет, то делаем wifi.ap.config. Ну а вообще товарищам nodemcu нужно реализовать функцию чтения параметров wifi ap, для того чтобы можно было сверять данные.
 

alexhi

Member
Спасибо,жаль что нет программного доступа к отключению.Придется резать и на других модулях :)
По второму сейчас примерно так и делаю,просто хотелось убрать вариант с записью/чтением флага из файла,памяти и так мало. Да, функция чтения параметров wifi конечно не помешала бы. Сделал термометр который работает от двух батареек AAA раз в 35 мин шлет температуру на email, вот и озаботился светодиодом. Я его сразу отрезал,но думал как то можно отключить. У меня в режиме sleep модуль потребляет порядка 10мкА. Работает с 29.12.2014
 

CHERTS

Moderator
Команда форума
Сделал термометр который работает от двух батареек AAA раз в 35 мин шлет температуру на email, вот и озаботился светодиодом. Я его сразу отрезал,но думал как то можно отключить. У меня в режиме sleep модуль потребляет порядка 10мкА. Работает с 29.12.2014
Какой датчик используете? В deepsleep режиме вроде должен потреблять еще меньше. Нет желания выложить код на github.com для общественности?
 

alexhi

Member
DS18b20. Насчет потребления наверное возможно сделать и меньше,у меня там еще подтягивающие резисторы висят(макетка).Наверно резисторы можно выкинуть,оставив только на датчике. Сюда и на github.com обязательно выложу на неделе,немного "причешу", а то сами знаете чуть что, "ссаными" тряпками исхлещут в момент :). Там вообщем то все стандартно проснулся измерил, отослал на бесплатный сайт c (php) Там мой php скрипт принимает ,добавляет еще температуру в городе-герое Клину :) и отсылает мне на почту.Все. Сначала в качестве внешнего сервера попробывал narodmon.ru, и thingspeak.com, но показалось не гибко.Своим скриптом можно сделать больше.
Вот как письма смотрятся:
sensor@sensor.com
11:24 (0 мин. назад)



кому: мне
Температура трубы = 14C В Клину -1..1C В Махмутларе =6..8C 14.01.15 10:24:56
sensor@sensor.com
11:59 (0 мин. назад)



кому: мне
Температура трубы = 14C В Клину -1..1C В Махмутларе =6..8C 14.01.15 10:59:23

Делал по простой причине в квартире в Клину бываю не часто,расхода воды практически нет и было ее подмерзание(труба близко к стене).Надо следить, ну сделать со временем :). Пока так. Так что к делу.
PS. На модуле надо не забыть чтобы работал deepsleep проводком соединить reset и XPD_DCDC, она с угла микросхемы можно припаяться. И надо перед уходом в sleep ногу датчика на вход перевести на вход
gpio.mode(pin, gpio.INPUT) node.dsleep(COUNTSEND) чтобы потребление уменьшить. В планах есть добавить терморегулятор с регулируемым порогом и программу по Андроид сделать для отображения и установок. Отсылку делать если только есть снижение до порога.Но сейчас раз в полчаса удобнее четко видно как сработало да и ресурс батареи заодно посмотрю.Сейчас ищу батарейку 3 вольтовую поменьше,чтобы одна была.За вашу сборку компилятора спасибо,все завелось.Хочу немного подрихтовать под себя,выкинуть всякие ADC,I2C.Оставить только uLan и так еще добавить по мелочи.Все что нужно больше, буду решать внешним STM32F0 за 0,5$ так удобнее.Модуль только для связи по WIFI. Хочу для этого "прозрачный мост " UART<-->TCP/UDP сделать.
 

alexhi

Member
Я пробывал его, но там есть такой нюанс. Многие программы которые написаны под RS232 не работают через него нормально,так как есть большие задержки при ответе.И они вываливаются по тайм ауту :( Если учитывать это то будет работать , но надо сделать обще. То есть со стороны RS232 (узкое место) надо сделать отсылку,по переполнению буфера,тайм ауту,количеству байтов в буфере и т.д. По моему pvvx сейчас делает примерно это. И еще одно.Обычно приходится работать через "прокладки" типа tcp0com ,HW и тд. создающие "виртуальный" COM порт которые вносят свои задержки.Короче надо думать :) Есть еще такой проект :
https://github.com/beckdac/ESP8266-transparent-bridge
Работает и идея хорошая настройки через telnet,но у него такая хрень. Если я из RS пихаю например HELLO то приходит H задержка и дальше ELLO. Из за этого тоже не пашет. Может "старшие" товарищи посмотрят из за чего.Автор пропал. :)Я всю "глубину глубин" не совсем понимаю. Но на мой взгляд действительно транспарентный мост "UART<-->TCP/UDP" крайне актуальная и полезная вешь.
 
Последнее редактирование:

pvvx

Активный участник сообщества
По моему pvvx сейчас делает примерно это.
Я немного не тем пока озабочен. Минимальное потребление WEB серверу не требуется. Чтобы достичь минимума, надо сначала сделать скоростную передачу. Т.к. минимум складывается из потребления в sleep + потребления на байт передачи информации. Если протокол передачи (время соединения) плохой, то потребление растет. В момент просыпания можно хоть 1A жрать - главное чтобы за этот пик Ампер модуль передал как можно больше информации и отключился.
Надо оптимизировать алгоритм соединения и исключить все задержки, связанные с передачай - ожиданием подтверждений... Дома на стенде - это просто, а в реальном инет, при удаленном сервере - тут задержки большие (до 5 секунд) и модуль будет жрать, ожидая подтверждений доставки каждого пакета TCP... Плюс время согласования со внешней AP (WiFi)... Так что тема у вас долгая, т.к. алго много. :)
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Дома на стенде - это просто, а в реальном инет, при удаленном сервере - тут задержки большие (до 5 секунд) и модуль будет жрать, ожидая подтверждений доставки каждого пакета TCP... Плюс время согласования со внешней AP (WiFi)...
Вот поэтому моя позиция в том, чтобы модуль ESP отправлял данные на сервер в локальной сети (сервер может быть хоть на чем, вплоть до рассбери, лишь бы он к розетке 220 подключался), а уже этот сервер отправлял бы данные куда нужно и как нужно или просто хранил и предоставлял какое-то удобное api доступа к данным, по тому же протоколу http.
 

pvvx

Активный участник сообщества
Вот поэтому моя позиция в том, чтобы модуль ESP отправлял данные на сервер в локальной сети (сервер может быть хоть на чем, вплоть до рассбери, лишь бы он к розетке 220 подключался), а уже этот сервер отправлял бы данные куда нужно и как нужно или просто хранил и предоставлял какое-то удобное api доступа к данным, по тому же протоколу http.
Да решаемые эти все проблеммы. При оптимизации просыпания/засыпания можно поддерживать постоянный контакт с внешней AP. Это не так и сложно. Если этот режим настроен, то и просыпание с согласованием идет в нем. После соединения с AP уже далее смотрим какая задержка до сервера и данные отсылаем не как в WEB сервере (там специфика другая), а пачкой пакетов на всю возможную память, переходим в низкопотребляющий режим ожидания подтверждения уже всей пачки (тут мы только принимаем и передатчик не жрет) и дождавшись - передаем далее. Но далее обычно не бывает, т.к. таким путем обычно мы можем передать за 65килобайт за раз (зависит исключительно от размера TCP/HTTP окна сервера (размера его TCP стека) и пропускной способности внешней сети). У експлореров в win-де окно обычно за 128кило :) У текущей конфигурации Lwip на ESP8266 - около 5800 байт :) Но так, как передаваемый пакет известен, то кешировать его в памяти не требуется и всегда можно отдать кусок, который не дошол и сервер перезапросил. В итоге надо писать свой TCP/IP блок, а не пользоваться Lwip.
Но тут, в данной теме, блок всего в пару байт и вообще ничего не требуется. Т.е. надо выкинуть всю SDK и её либы - они не нужны для данного дела, передачи пару байт в час с одного датчика. Нужно сформировать один пакет UDP и иметь фильтр приема ответа на прием однотипного подтверждающего пакета UDP. Можно и без потверждения - пять раз проснуться и передать пакет UDP с пару байтами от датчика (т.к. ошибку связи модуль всё равно не разрулит). :) В итоге задача выливается в то, как отрезать SDK. Парольную защиту и все другие шифрующие процедуры и использовать OPEN AP. Всё равно с неё нечего брать - в ней роутить толко те пакеты UDP от ESP8266... На сегодня это можно сделать, заткнув все ненужные вызовы процедур в прошивке процедурами return, оставив только вроде libmain.a и libnet80211.a :)
 
Последнее редактирование:

alexhi

Member
Понятно. Успехов. Пока для своей задачи напиcал на Lua вот такой редиректор UDP<-->COM.
Все что приходит на порт 7777 модуля по сети (UDP) передается в UART,все что приходит в UART передается устройству сделавшему запрос. Потестировал под Андроид и под PC.
Код:
--!!!!nodemcu_512k_20150106
PORT=7777 pin=3
gpio.mode(pin, gpio.INPUT)
tmr.alarm(1,5000, 1, function()
if wifi.ap.getip()~=nil  then
if gpio.read(pin)==1 then
tmr.stop(1) print("WIFI_UDP_RS232 V1.1 06.01.2015")
else
tmr.stop(1) print("Telnet V1.1") dofile("telnet.lua")
end end end)
uart.setup( 0,9600, 8, 0, 1, 0 )
srv=net.createServer(net.UDP)
srv:eek:n("receive", function(srv, pl) tmr.wdclr() uart.write(0,pl) end)
srv:listen(PORT) uart.on("data",0,function(data)srv:send(data)end, 0)
По старту проверяю GPIO0, и если в течении 5 сек ее закоротить, то выходим в telnet.(до подачи питания коротить ее нельзя!!!) Лучше использовать Putty,а не виндовый телнет клиент.Тут можно сделать настройки,удалить прогу и т.д В качестве UDP клиента пользую бесплатную Hercules SETUP. Под Андроид свои проги(давал в разделе Умный дом)
Внимание! При запуске программы она переходит в режим моста и не отвечает на Lua команды, не пугайтесь так должно быть. Если надо ее удалить,то либо при старте file.remove("init.lua") или из телнет.

Вот код телнет сервера он стандартный из примеров:
Код:
s=net.createServer(net.TCP,1000)
s:listen(23,function(c)
function s_output(str)
if(c~=nil)
then c:send(str)
end
end
node.output(s_output, 0)
c:eek:n("receive",function(c,l)
node.input(l)
end)
c:eek:n("disconnection",function(c)
node.output(nil)
end)
print("Telnet V1.1")
end)
Кому интересно пробуйте.
PS. Еще похоже при записи файлов во Flash,не убираются лидирующие пробелы и размер файла становится больше.(может показалось) Поэтому для экономии места :) во Flash лучше писать без отступов.Проверьте кому не лень плиз.Если так, то просьба если можно к Victor (ESPLoader) добавить чекбокс убрать лидирующие пробелы в записываемый файл. И быстрее запись будет и место во Flash сохраним. Все равно исходники скрипта с форматированием остаются , а вычитывание файла из флеш довольно редкая операция (зачем?)

Не понял как код вставить :( </code> работает ?
 
Последнее редактирование:

pvvx

Активный участник сообщества
alexhi - вы на нас внимание не обращайте :) у нас другие задачи. Мне например надо опрашивать более 10 датчиков в одном мобильном устройстве и передавать с модуля при наличии связи, а не когда вздумается и чтобы питалось "святым духом" (можно к примеру от солнечной батареи)... Т.е. lua там никак.
 
Последнее редактирование:

alexhi

Member
Вот поэтому моя позиция в том, чтобы модуль ESP отправлял данные на сервер в локальной сети (сервер может быть хоть на чем, вплоть до рассбери, лишь бы он к розетке 220 подключался), а уже этот сервер отправлял бы данные куда нужно и как нужно или просто хранил и предоставлял какое-то удобное api доступа к данным, по тому же протоколу http.
Да я примерно так тоже думаю. В качестве сервера возьму 7" планшет на Андроид ( они сейчас недорогие) на нем напишу прогу которая слушает датчики и отображает актуальную информацию.При критических ситуациях (пролив воды,дым и т.д отсылает письма и " верещит голосом") Я примерно такое под Андроид делал на RFM12B (433Mhz),тут еще удобнее не надо мостов "433Mhz" <-->Wifi.


Как то так. Конечно над батарейным питанием или хотя бы с "буфером" с батареей надо думать. Хотя некоторые вещи и так достаточно очевидны и должны работать. Например логика работы датчика пролива. К датчику подключена батарея,в цепи питания ставим полевик. (цепь питания разомкнута) Его затвор и исток контакты. Если между ними попала вода включается модуль отсылает несколько команд "ПРОЛИВ" и падает в слип и это повторяется раз в 30 сек. Батареек должно хватить надолго по идее.(Если хозяин не идиот :) При этом планшет говорит голосом пролив и отсылает письмо. Также можно подать команду на закрытие эл. шарового крана подачи воды.
 

pvvx

Активный участник сообщества
При критических ситуациях (пролив воды,дым и т.д отсылает письма и " верещит голосом")
А Андроид зачем? Со всеми описанными задачами модуль сам справится. :)
Планшет нужен только в качестве экрана настройки.
 

pvvx

Активный участник сообщества
Работает и идея хорошая настройки через telnet,но у него такая хрень. Если я из RS пихаю например HELLO то приходит H задержка и дальше ELLO. Из за этого тоже не пашет. Может "старшие" товарищи посмотрят из за чего.Автор пропал. :)Я всю "глубину глубин" не совсем понимаю. Но на мой взгляд действительно транспарентный мост "UART<-->TCP/UDP" крайне актуальная и полезная вешь.
Мост "UART<-->TCP/UDP" давно работает в библиотеке WEB сервера. Там есть мелочь, связанная с большими скоростями (более 3Mbaud).
Большинство TCP терминалов, при вводе в них текстового буфера, посылают первый пакет TCP с одним символом, а далее пакеты с пачками... :)
Для посылки непрерывного потока из TCP терминала используйте команду передачи файла.
 

alexhi

Member
А Андроид зачем? Со всеми описанными задачами модуль сам справится. :)
Планшет нужен только в качестве экрана настройки.
Я наверно что то пропустил, модуль уже может воспроизводить звуковые сообщения? (Шимом наверное можно что то скобянить ,но хз)Я говорю о том, что например если модуль является датчиком протечки воды то хотелось бы мне сидящему где то это сообщили приятным женским голосом :) Из планшета или моего смартфона (все алармы должны в локалке быть броадкаст) А не просто воем сирены (как в стандартных датчиках протечки воды из Леруа Мерлен) Но я не настаиваю,как говорится каждый извращается как может :)
 

pvvx

Активный участник сообщества
Но я не настаиваю,как говорится каждый извращается как может :)
Ну дык с Lua вы никогда не дождетесь "срабатывания датчика" и "приятным женским голосом". Lua использует espconn, а она зависучая. Это наверно не исправят никогда. И я не настаиваю - "каждый извращается как может" :)
Когда портировщики Lua напишут, что избавились от espconn, то тогда сможете убрать сообщение из планшета-андроида, приятным женским голосом, "вставай - модуль опять повис и не отвечает".
 
Последнее редактирование:

alexhi

Member
:) Понятно, что использовать модуль в управлении ядерным реактором было бы верхом неблагоразумия,но для решения многих задач даже в нынешнем виде он вполне "покатит" У меня например он уже месяц пашет от батарейки присылая сообщение о температуре на почту каждые полчаса :) Хотя написано на том же Lua за десять минут левой ногой. И даже если он пропустит мне сообщение я не очень на него обижусь. Насчет Lua соглашусь, после C он немного непривычен, хотя есть и полезные фичи. Тут как и везде как говорил наш барабанщик "не имей Амати, а умей играти". Наговнокодить , по большому счету можно на чем угодно,было бы желание :) Сейчас я два своих проекта перевел на модуль, и отошел от самой больной темы изготовления красивой морды прибора,заменив ее приложением для смартфона. Так что не все так трагично.
Те же немцы пишут для своих пром.контроллеров на "птичьем" языке STEP и ничего.Все работает как надо.Потому что для производства так удобнее.
Думаю китайцы делают все правильно, они захватили рынок этим модулем,а уж имея такое бабло думаю найдут и программеров чтобы допилить.Китайцы работают с "колес". А мы, ругая китайцев (иногда заслуженно :) не смогли создать даже своего процессора или смартфона,кругом импорт. Сплошной дер и треп. Все стараются быть творцами, а делать некому. Наша беда по моему в том, что мы всегда стараемся создать свои "нетленки" забывая о том, что завтра они могут быть просто никому не нужны. Ну это так лирика , пока перерыв в работе :)
 

pvvx

Активный участник сообщества
:) Понятно, что использовать модуль в управлении ядерным реактором было бы верхом неблагоразумия,но для решения многих задач даже в нынешнем виде он вполне "покатит" У меня например он уже месяц пашет от батарейки присылая сообщение о температуре на почту каждые полчаса :) Хотя написано на том же Lua за десять минут левой ногой.
...
Ну это так лирика , пока перерыв в работе :)
Не то сравниваете - работа и производство - это одно, а хобби - это другое. Lua слишком примитивна и не интересна. Датчик, передающий и накапливающий 16 аналоговых показаний (с подписями и пересчетами, калибровками и прочим) с усреднением в пол часа (минимальная дискретность для сохранения) по тысчам точек и собственным циклическим буфером для хранения накопленных показаний за последний год, выводом всего этого в графиках со своего WEB HTTP с разными заданными усредняющими фильтрами, да прочее журналирование и т.д. уже десяток лет как работает у меня и его цена на сегодня практически близка к ESP8266 с аналогичными пичендалами. Жрет только меньше и всё. :) Один MCU 16 бит + flash 2Mb. Вот вам и лирика.
И главное - на его создание ушло меньше времени, чем уже вожусь с ES8266.
 
Последнее редактирование:
Сверху Снизу