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

Нужна помощь Понимание принципа отправки данных esp8266

Bulat

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

Задача: соединить esp8266 с DS18B20 и слать сигнал на мобильное приложение. Без всяких arduino и raspberry.

Как я понял, напрямую на телефон слать сигнал не получится.
Тогда получается, что нужна wi-fi сеть, к которой будет подсоединяться esp8266,
через эту сеть идет сигнал на некий сервер, который уже шлет данные на мобильное приложение.

Правильную ли логику я выстроил? Есть ли более простые реализации?
Так же в гугле и на aliexpress нашел множество различных модулей на базе esp8266, подскажите, что может еще лучше подойти к моей задаче?
 

Юрий Ботов

Moderator
Команда форума
Можно так: esp8266 настроить как точку доступа, на ней же поднять tcp сервер который получает данные от ds18b20.
ИМХО проще всего смоделировать на LUA, но можно столкнуться с необходимостью разбивки на модули и принудительной загрузки/выгрузки модулей.
Лично я бы написал такое по Arduino IDE для esp8266, тем более что все куски из которых это собирается (инициализация точки доступа, сервер, интерфейс к DS) есть в прилагаемых к нему сэмплах.
 

nikolz

Well-known member
Добрый день. Я очень слабо разбираюсь в теме микроконтроллеров, поэтому заранее прошу прощения за глупые вопросы.

Задача: соединить esp8266 с DS18B20 и слать сигнал на мобильное приложение. Без всяких arduino и raspberry.

Как я понял, напрямую на телефон слать сигнал не получится.
Тогда получается, что нужна wi-fi сеть, к которой будет подсоединяться esp8266,
через эту сеть идет сигнал на некий сервер, который уже шлет данные на мобильное приложение.

Правильную ли логику я выстроил? Есть ли более простые реализации?
Так же в гугле и на aliexpress нашел множество различных модулей на базе esp8266, подскажите, что может еще лучше подойти к моей задаче?
я делал такое на ESP01 и nodemcu.
для отладки покупайте nodemcu (от 190 до 350 руб) + кабель USB ->микро USB
-----------------------------------
можно сделать и прямо на телефон для этого к ESP надо добавить блютус (+100 руб)
-------------------------
В любом варианте придется нырять в изучение микроконтроллеров.
Либо купить готовую игрушку.
 

nikolz

Well-known member
Зачем? Почему бы не использовать Soft AP, как сказал @Юрий Ботов?
Можно и точку доступа - будет WIFI, т е сетевое соединение
можно блютуз - будет прямое соединение со смартфоном и малое потребление
можно NRF - тоже будет сеть и малое потребление, но к смартфону появится добавка.
--------------------------------------
Все зависит от решаемой задачи.
 

Bulat

New member
Не могли бы вы более подробно описать принцип работы через tcp сервер на самом esp8266?
Я так понял, arduino ide - это sdk для разработки, на котором можно написать и tcp сервер и алгоритм отдачи данных?

@Юрий Ботов написал, что могут возникнуть проблемы с разбивкой на модули и принудительной загрузки/выгрузки модулей,
я так понял памяти на устройстве мало, и все модули(tcp, отправка данных) не могут одновременно располагаться в памяти?

@nikolz ищу решение для устройства размерами 3-4 см максимум, которое будет слать данные на телефон, где лучше устройство будет сложнее, а мобильное приложение более простым.
 

Bulat

New member
@nikolz каким образом подсоединяется bt устройство? нужно будет брать готовый модуль типа hc-04, или есть отдельные bt передатчики? тогда какой смысл использовать esp8266, ведь можно взять hc-04, на него залить прошивку для сопряжения и передачи данных?

Возможно, я не правильно понял суть устройства esp8266, поправьте, пожалуйста:
esp8266 - микроконтроллер с wifi, у которого есть контакты для подключения, например, датчика температуры, память для прошивки и wifi передатчик, который может слать сигнал по wifi сети(сторонней, типа wifi роутера, или поднять самостоятельно wifi сеть, к которой, например, сможет подключиться телефон(.
 

Сергей_Ф

Moderator
Команда форума
esp8266 - микроконтроллер с wifi, у которого есть контакты для подключения, например, датчика температуры, память для прошивки и wifi передатчик, который может слать сигнал по wifi сети(сторонней, типа wifi роутера, или поднять самостоятельно wifi сеть, к которой, например, сможет подключиться телефон(.
все верно. В зависимости от компетенции, выбираете инструмент и делаете сами или ищете готовое решение.
Лично я бы написал такое по Arduino IDE для esp8266, тем более что все куски из которых это собирается (инициализация точки доступа, сервер, интерфейс к DS) есть в прилагаемых к нему сэмплах.
100% поддерживаю. Для новичка самое то.
 

nikolz

Well-known member
Дело в том, что Вы не сформулировали задачу, поэтому невозможно точное решение.
Попробую рассказать на конкретном примере, который я приводил ранее.
Это самое простое решение . Рассказываю о стороне ESP. Я подключал его по wifi к компьютеру(винда), а не к мобильнику(андроид).
все сделано на луа.
Вот текст основной программы:
Код:
pds=1; --pin 1-wire  DS18B20
adT={} -- таблица адресов датчиков 1-wire
pam=2; --pin AM2302
gpio.mode(pam, gpio.OUTPUT); gpio.write(pam, gpio.HIGH)
scl=4; --pin  BMP180(SCL,SDA=SCL+1)
oss=0;
T0=0; -- номер датчика
TM=0; -- time
--TM=tmr.now();print(tmr.now()-TM);
local ae={{96,209,111,6,0,0,149},{199,186,111,6,0,0,45}}
------1--2--3--4-5--6-7--8-9-10-11-12-13-14-
TD={3,0,0,0,2,0,0,4,0,0, 0,0,1, 0}; -- таблица результатов
ssid,pwd,port="xxxx","yyyyy",9991; --логин пароль и порт
--print("open="..T2-T1..",load="..T3-T2..",run="..T4-T3..",del="..T5-T4..",всего="..T5-T1.."\n")
--open=264387,load=53946,run=347933,del=86,всего=666352
--T1=tmr.now();
dofile("nk_start.lc") -- dofile=603200
--gpio.mode(3,gpio.INPUT) --кнопка рестарт
--print(1);
---------------------
function cb()
T1=tmr.now()-T1;
collectgarbage()
print("1,"..node.heap());
T0=T0+1; --номер датчика
--if gpio.read(3)==0 then node.restart(); end;
T1=tmr.now();
dofile('nkDS.lc');
T2=tmr.now()-TM;
m=6 -- номер позиции в таблице результатов для данного датчика
dofile('cb2302.lc');
--print("2,"..node.heap());
m=9 -- номер позиции в таблице результатов для данного датчика
dofile('get_tp.lc');  -- вычисление температуры и давления BMP180
--print("3,"..node.heap());
T4=tmr.now()-TM;
m=14 -- номер позиции в таблице результатов для данного датчика
TD[m]=adc.read(0);
--print("4,"..node.heap());
--sk:on("receive", function(sck,p) print(p) end )
--TM=math.floor(0.001*(tmr.now()-TM));
--sk:send(ss,function(s) end); sk:close(); sk=nil; end )
---local sk=net.createConnection(net.TCP,0)sk:connect(9992,"192.168.0.108")sk:on("connection",WF)
-- a udp client
cu:connect(9992,"192.168.0.108");
cu:send(T0..';4;'..table.concat(TD,";")..';'..node.heap())--..",T1="..T1)
T1=tmr.now();
T1=math.floor(0.001*(tmr.now()-T1));
print(T0..';4;'..table.concat(TD,";")..';'..node.heap());
end
tmr.alarm(1,2000,1,cb)
-------------------------
В этой программе делается следующее:
K ESP подключены три датчика температуры DS, датчик температуры и влажности AM2302,
датчик BMP180 - температуры и давления.
-----------------------
Датчики опрашиваются с интервалом 2 секунды ( минимум 0.2 сек) и информация передается на компьютер по протоколу UDP.
При приеме очередной порции данных компьютер может послать команду на изменение режима работы.
-----------------------------
Каждый датчик оформлен в виде модуля который вызывается dofile.
В результате объем занятой памяти практически не зависит от числа типов датчиков.
Т е можно добавить еще и другие датчики (освещенности, ультразвука, перемещения и т д)
-------------------------
Для работы с телефоном надо сделать приложение на телефон такое же как сделано на компе.
На компе приложение тоже написано на луа. Выводит графики и и таблицы.
-----------------------
В результате все сделано на ESP и на Луа. Ограничений памяти нет.
Для Датчиков температуры тестировал режим когда известны их адреса и автоматическое обнаружение. Все работает. число датчиков тоже может быть увеличено.
====================
примерно так.
 

Сергей_Ф

Moderator
Команда форума
Для работы с телефоном надо сделать приложение на телефон такое же как сделано на компе.
это не обязательно, если нужно просто смотреть, то достаточно браузера. Любого.
На esp, естественно, нужно будет поднять http сервер.
 

nikolz

Well-known member
это не обязательно, если нужно просто смотреть, то достаточно браузера. Любого.
На esp, естественно, нужно будет поднять http сервер.
--------------------
Конечно Вы можете делать как хотите.
Использование браузеров и http серверов - это громоздко и медленно.
Меня это не устраивает.
---------------------------------
Я рассказал как делаю я.
когда будет желание, то напишу под андроид приложение для отображения в том числе и графиков.
Без каких либо публичных серверов и брокеров.
Это будет в десятки раз быстрее и легче.
Я разрабатываю не умный дом, а интеллектуальные измерительные приборы.
Например, сейчас закончил разработку спектрометра на ESP (тоже писал) .
 

nikolz

Well-known member
глупо с этим спорить, однако браузерный вариант дает универсальность. Можно смотреть откуда угодно и с чего угодно.
Т е Вы опять про всеобщее счастье?
----------------------
Т е прилетаете вы на гаити. Вы были на гаити?
И смотрите какая температура в унитазе дома в Магадане. Верно?
Или показываете всем, как у Вас включается и выключается чайник( а воду в него забыли налить)
Это все обломовщина какая-то.
----------------------------
Универсальная система - это такая система, разработчик которой не имеет ни малейшего представления для чего она реально нужна.
 

Сергей_Ф

Moderator
Команда форума
Вы опять про всеобщее счастье?
Почему опять? Вы же не знаете задачи ТС и мои. Мне, например, мобильное приложение неприемлемо. Мне нужен браузер для настройки, для работы мне ничего не нужно. Автономная работа у моего устройства. В чем проблема?
 

ivdok

New member
[off]@nikolz А как у вас заработал UDP? Все пакеты, которые я отправлял с клиента, на пэхе дропались. Объявляение UDP-сервера сильно отличается синтаксисом от TCP в NodeMCU? [/off]
 

nikolz

Well-known member
Почему опять? Вы же не знаете задачи ТС и мои. Мне, например, мобильное приложение неприемлемо. Мне нужен браузер для настройки, для работы мне ничего не нужно. Автономная работа у моего устройства. В чем проблема?
согласен, проблем нет.
 

nikolz

Well-known member
[off]@nikolz А как у вас заработал UDP? Все пакеты, которые я отправлял с клиента, на пэхе дропались. Объявляение UDP-сервера сильно отличается синтаксисом от TCP в NodeMCU? [/off]
[off]@nikolz А как у вас заработал UDP? Все пакеты, которые я отправлял с клиента, на пэхе дропались. Объявляение UDP-сервера сильно отличается синтаксисом от TCP в NodeMCU? [/off]
-----------------------
выкладываю кусок в котором есть и TCP и UDP и сервер и клиент. Выкладываю как есть
TCP закомментирован.
Делал больше года назад. Возможно уже устарело.
От TCP отказался так как была утечка памяти.
---------------------------
Код:
-----------------------
wifi.setmode(wifi.STATION)
--local cfg={["ssid"]=ssid,["pwd"]=pwd}
--wifi.ap.config(cfg);
wifi.sta.config(ssid,pwd);
wifi.sta.connect();
------------------------------
while ip==nil do ip=wifi.sta.getip() end
print("ip="..tostring(ip))
--str="";
--sv=net.createServer(net.TCP,10)
--sv:listen(port,ip,function(c)
-- function s_output(str) if(c~=nil) then c:send(str) end end
--node.output(s_output, 0)   -- re-direct output to function s_ouput.
--c:on("receive",function(c,l) node.input(l)   end)          -- works like pcall(loadstring(l)) but support multiple separate line
--c:on("disconnection",function(c) node.output(nil) end)        -- un-regist the redirect output function, output goes to serial
-- print("Welcome to NodeMcu world.")
-- c: on("receive",function(c,p) str=p;c:send(">") end )
--end)
-----------------
--local WF=function(sck)
--local ss=T0..';'..jd..';'..table.concat(TD,";")..';'..node.heap();
--sck:send(ss); sck:close(); sck=nil;
--end
-----------------------------
-- a udp server
s=net.createServer(net.UDP)
s:on("receive",function(s,c) print(c) end)
s:listen(port)
--------------------------------
cu=net.createConnection(net.UDP);
cu:on("receive",function(cu,c) end);
 

Bulat

New member
@nikolz Спасибо большое за пример tcp/udp сервера. как я понял по коду - есть библиотека net, которой уже готова реализация tcp и udp серверов на esp8266?

@nikolz@ivdok@Сергей_Ф Я пытался вначале в целом с возможностями esp8266 разобраться, потому что знаю, что на специализированных форумах всегда отправляют читать мануалы, и не любят глупые прямые вопросы новичков).

Задача следующая: нужно измерять температуру каждые 30 секунд и отправлять данные на телефон в приложение. esp8266 может это делать через wifi соединение. arduino и прочие исключаются из-за требований в размере. Устройство планируется массовое.

Сегодня в процессе обдумывания возникла следующая проблема: так как ssid и пас задаются изначально в прошивке, это значит, что мне надо знать ssid и пас на момент прошивки. Вариант заставить привести домашнюю сеть юзеров к одинаковому названию и пасу, увы, не одобрен заказчиком. Это плохо, потому что я теперь не вижу реализации задачи через esp8266. Может ли esp8266 сам поднять локальную wifi сеть? Или мб как-то можно передать данные для wifi соединения без прошивки устройства?
 

Сергей_Ф

Moderator
Команда форума
ssid и пас задаются изначально в прошивке, это значит, что мне надо знать ssid и пас на момент прошивки. Вариант заставить привести домашнюю сеть юзеров к одинаковому названию и пасу, увы, не одобрен заказчиком. Это плохо, потому что я теперь не вижу реализации задачи через esp8266. Может ли esp8266 сам поднять локальную wifi сеть?
Вы шутите? Мы же только об этом и говорили последние сообщений десять. Можно и имя сети и пароль ввести на этапе настроек устройства (не прошивки), можно свою сеть поднять с уникальным именем без пароля, с одинаковым паролем или с уникальным паролем. Всё в Ваших руках.
Задача следующая: нужно измерять температуру каждые 30 секунд и отправлять данные на телефон в приложение.
Извините, но это не задача. Это то, как Вы видите её реализацию. Например, совершенно не ясно для чего это, как Вы собираетесь питать устройство и т.д.
 

nikolz

Well-known member
@nikolz
Задача следующая: нужно измерять температуру каждые 30 секунд и отправлять данные на телефон в приложение. esp8266 может это делать через wifi соединение. arduino и прочие исключаются из-за требований в размере. Устройство планируется массовое.

Сегодня в процессе обдумывания возникла следующая проблема: так как ssid и пас задаются изначально в прошивке, это значит, что мне надо знать ssid и пас на момент прошивки. Вариант заставить привести домашнюю сеть юзеров к одинаковому названию и пасу, увы, не одобрен заказчиком. Это плохо, потому что я теперь не вижу реализации задачи через esp8266. Может ли esp8266 сам поднять локальную wifi сеть? Или мб как-то можно передать данные для wifi соединения без прошивки устройства?
 
Сверху Снизу