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

Вопрос Помогите советом, как увязать несколько ESP между собой

PitStop009

New member
Доброго времени суток! Прошу о помощи знатоков. Подскажите, в какую сторону копать?

У меня имеется роутер, с выходом в интернет. К нему подключены несколько ESP разных моделей, в зависимости от выполняемых задач:
1. В котельной - замеряет параметры котла: темпрературу вход и выход, расход теплоносителя, производит расчеты текущей мощности, динамику и выдает порядка десяти расчетных переменных. Работает с прерыванием!
2. В ванной - управляет климатом. Выдает пять расчетных переменных.
3. Три ESP исполнены в виде часов на MAX7219 с графикой, с проводными датчиками температуры, влажности, освещенности, берут время на сервере и тп.
4. На улице - сбор метеоданных и отправка на народный мониторинг.

Это не предел их количества. Все ESP имеют индикацию на матрицах MAX7219 и показывают только свои параметры. На некоторых сделан Web Server и просматриваются с телефона по отдельности

Встал вопрос, как оптимальнее организовать обмен переменными (какой лучше выбрать способ), чтоб каждая ESP имела полный набор всех данных с других ESP и могла их отображать на экране (не обязательно все, но имела такую потенциальную возможность) Обмен данными должен происходить периодически, не реже одного раза в минуту. Много просматривал вариантов и путем GET запросов, и сокеты и передача в облако. Боюсь, что не потяну высокотехнологичную связь типа "умный дом", хотелось бы поэтапно увязывать их между собой. Все программы написаны в Arduino IDE на С++. С другими языками никогда не работал.

Заранее спасибо.
 

nikolz

Well-known member
Доброго времени суток! Прошу о помощи знатоков. Подскажите, в какую сторону копать?

У меня имеется роутер, с выходом в интернет. К нему подключены несколько ESP разных моделей, в зависимости от выполняемых задач:
1. В котельной - замеряет параметры котла: темпрературу вход и выход, расход теплоносителя, производит расчеты текущей мощности, динамику и выдает порядка десяти расчетных переменных. Работает с прерыванием!
2. В ванной - управляет климатом. Выдает пять расчетных переменных.
3. Три ESP исполнены в виде часов на MAX7219 с графикой, с проводными датчиками температуры, влажности, освещенности, берут время на сервере и тп.
4. На улице - сбор метеоданных и отправка на народный мониторинг.

Это не предел их количества. Все ESP имеют индикацию на матрицах MAX7219 и показывают только свои параметры. На некоторых сделан Web Server и просматриваются с телефона по отдельности

Встал вопрос, как оптимальнее организовать обмен переменными (какой лучше выбрать способ), чтоб каждая ESP имела полный набор всех данных с других ESP и могла их отображать на экране (не обязательно все, но имела такую потенциальную возможность) Обмен данными должен происходить периодически, не реже одного раза в минуту. Много просматривал вариантов и путем GET запросов, и сокеты и передача в облако. Боюсь, что не потяну высокотехнологичную связь типа "умный дом", хотелось бы поэтапно увязывать их между собой. Все программы написаны в Arduino IDE на С++. С другими языками никогда не работал.

Заранее спасибо.
Простейший вариант на основе MQTT
Протокол MQTT: концептуальное погружение
по схеме Звезда
В центре брокер MQTT
модуль который генерит параметры является издателем
а остальные , которые читают параметры, подписчиками.
 

PitStop009

New member
Простейший вариант на основе MQTT
Протокол MQTT: концептуальное погружение
по схеме Звезда
В центре брокер MQTT
модуль который генерит параметры является издателем
а остальные , которые читают параметры, подписчиками.

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

svs2007m

Active member
Возможно приложение Blynk подойдет:)
Можно показания всех ESP объединить под единой графической оболочкой . Множество всевозможных виджетов (кнопки. индикаторы. графики, таблицы, картинки и т.д. ), между собой общаются через виджет мост.
Правда если нет своего локального сервера то через их облако будет дороговастенько;)
 

CodeNameHawk

Moderator
Команда форума
Встал вопрос, как оптимальнее организовать обмен переменными (какой лучше выбрать способ), чтоб каждая ESP имела полный набор всех данных с других ESP и могла их отображать на экране (не обязательно все, но имела такую потенциальную возможность)
Лучше тот способ, который работает.

Нет разницы как вы будете передавать, важно, чтобы работало.

1.Работая локально, назначаете одно есп сервером и остальные есп (клиенты) посылают информацию на сервер и получают информацию о других есп.
2.Так как вам предложили, через сторонние серверы, будет работать так как они это видят.
3.Создать свой сервер на бесплатном хостинге и все есп будут обращаться к нему.

Напишите в личку, пришлю приглашение на бесплатный хостинг.
 

PitStop009

New member
Лучше тот способ, который работает.

Нет разницы как вы будете передавать, важно, чтобы работало.

1.Работая локально, назначаете одно есп сервером и остальные есп (клиенты) посылают информацию на сервер и получают информацию о других есп.
2.Так как вам предложили, через сторонние серверы, будет работать так как они это видят.
3.Создать свой сервер на бесплатном хостинге и все есп будут обращаться к нему.

Напишите в личку, пришлю приглашение на бесплатный хостинг.

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

Может есть у кого пример кода, как запросом через роутер, не обращаясь к интернету перекинуть переменную. Трудности с составлением запроса и его расшифровки. Надо передавать переменные типа float и int.
 

svs2007m

Active member
Если у Вас EPS множатся как "грибы после дождя" то лучше приобрести Китайский одноплатник. Запилить на нем сервер и т.д. Даже без внешнего Инета все будет обмениваться и работать.:)
 

PitStop009

New member
Если у Вас EPS множатся как "грибы после дождя" то лучше приобрести Китайский одноплатник. Запилить на нем сервер и т.д. Даже без внешнего Инета все будет обмениваться и работать.:)
Часы берут время и погоду в инете, без него нельзя. ESPшки уже наплодились. Давно все работает, все устройства самодостаточны, все с дисплеями, на всех все видно и очень удобно, но только в рамках своих функций. Хочется на любых часах в любой комнате в фоне наблюдать параметры работы котла.
По ходу еще возникает вопрос, как wifi дружит с аппаратными прерываниями. Расходомер на котле подключен по входу прерывания и за минуту проходит около 1300 импульсов...
 

pvvx

Активный участник сообщества
Часы берут время и погоду в инете, без него нельзя.
Погода должна быть от местной метеостанции с ESP c Arduino и автомобильным АКБ. (Трактор в сторонке для зарядки...)
Часы от GPS с тарелкой на крыше из детских санок... :)
ESPшки уже наплодились. Давно все работает, все устройства самодостаточны, все с дисплеями, на всех все видно и очень удобно, но только в рамках своих функций.
Кого вы удивите - 600 рупь и
GSM 850/900/1800/1900 МГц, Дисплей: TFT, MTK6261 533 МГц, от 8MB RAM, 8MB Falsh, 8 GB SD card, WiFi, Bluetooth, камера: 0.3 м, автономное питание, приемник FM вроде, ...
Пример: 389.96руб. 62% СКИДКА|2019 Смарт часы с Bluetooth для Iphone, телефонов, huawei, samsung, Xiaomi, Android, поддержка 2G, SIM, TF карта, камера, умные часы, PK, X6, Z60-in Смарт-часы from Бытовая электроника on AliExpress
Хочется на любых часах в любой комнате в фоне наблюдать параметры работы котла.
Значит уверенности в работе такие слепки на ESP и Arduino не дают?
По ходу еще возникает вопрос, как wifi дружит с аппаратными прерываниями. Расходомер на котле подключен по входу прерывания и за минуту проходит около 1300 импульсов...
C ESP всё плохо дружит, но можно чип ESP приложить/приклеить к какой современной платке... На сегодня это будет оптимальнее - заодно ностальгия о больших и жирных кристаллах..
 

pvvx

Активный участник сообщества
Завтра в каждом настенном выключателе будет монитор с пачкой сенсоров и а 'котле' уже давно... А вы всё о устаревших чипах WiFi мечтаете... :)
 

PitStop009

New member
Завтра в каждом настенном выключателе будет монитор с пачкой сенсоров и а 'котле' уже давно... А вы всё о устаревших чипах WiFi мечтаете... :)
К сожалению, в самой богатой стране мира, где газ - народное достояние, котел стоит дровяной! Благо, что он современный, мощный и с хорошим КПД. Но тут и возникает проблема постоянного его контроля. Именно контроля, так как управление ручное, и дрова сами в печку не прыгают. Дом большой - до котла идти далеко.
 

CodeNameHawk

Moderator
Команда форума
@PitStop009 принцип работы с внешним сервером может быть таким:
есп отправляет данные на сервер.
Пример как отправить :
Код:
char koc_pod_s[7];
char koc_obr_s[7];

float kotel_pod; //temperatura podachi
float kotel_obr; //temperatura obratki

//Iz float poluchaem stroku

dtostrf(kotel_pod, 0, 1, koc_pod_s);
dtostrf(kotel_obr, 0, 1, koc_obr_s);

char temp[100]; //buffer na 100 znakov


// v temp gotovim stroku s dannymi dlja otsylki
snprintf(temp, 100, "http://adres.com/temp.php?A=%s&B=%s", koc_pod_s, koc_obr_s);

//otsylaem, jeto dlja versii plat 2.4.2, no rabotaet i s novymi

            HTTPClient http;

            Serial.print("[HTTP] Begin.\n");
            // configure traged server and url

            http.begin(temp); //HTTP

            int httpCode = http.GET();

            // httpCode will be negative on error
            if (httpCode > 0)
            {
                // HTTP header has been send and Server response header has been handled
                Serial.printf("[HTTP] GET code : %d\n", httpCode);

                // file found at server
                if (httpCode == HTTP_CODE_OK)
                {
                    String payload = http.getString();
                    Serial.println(payload);
                }
            }
            else
            {
                Serial.printf("[HTTP] GET failed, error : %s\n", http.errorToString(httpCode).c_str());
            }

            http.end();
файл temp.php получает данные и например записывает в файл.
Код:
<?php

if(!empty($_GET))
  {
  
//    var_dump($_GET['A']);
//    var_dump($_GET['B']);

      $kocpod = $_GET['A'];
      $kocobr = $_GET['B'];

//puluchili dannye

//tut mozno zapiasat v fail ili v bazu dannyh
}
Как записать PHP.SU - PHP. Работа с файлами

Остальные есп могут читать данные в записанном файле(просто читая файл http://adres.com/dannye.txt) и выводить на экран.

Насчет, успеет ли есп работать с прерываниями и WiFi не знаю, у меня работает связка есп с атмега16.
 

RomaTST

New member
Добрый день!
Прошу прощения что вытаскиваю эту тему, но как бы логическое продолжение.
Задача та же, имеется хостинг с PHP и SQL. Базу создал, php-скрипт для записи данных в базу написал, в браузере всё работает.
Пытаюсь примерно вышеуказанным способом записать с ESP32, вроде как и ошибки нет, HTTP 200, но в базу не записывает и в мониторе такой текст: <html><body><script type="text/javascript" src="/aes.js" ></script> и дальше что необходим браузер с поддержкой Javascript. Как всё это обойти? Так понимаю что хостер добавляет скрипты к моим страницам?
 

semper-7

New member
Добрый день!
Прошу прощения что вытаскиваю эту тему, но как бы логическое продолжение.
Задача та же, имеется хостинг с PHP и SQL. Базу создал, php-скрипт для записи данных в базу написал, в браузере всё работает.
Пытаюсь примерно вышеуказанным способом записать с ESP32, вроде как и ошибки нет, HTTP 200, но в базу не записывает и в мониторе такой текст: <html><body><script type="text/javascript" src="/aes.js" ></script> и дальше что необходим браузер с поддержкой Javascript. Как всё это обойти? Так понимаю что хостер добавляет скрипты к моим страницам?
Хостинг смените. У меня на beget.ru аналогично php страница, все работает уже много лет. Система отопления. Cейчас несколько модулей ESP-12. Ранее был ардуино c enc28j60. Всего 9 датчиков температуры, из них 2 удаленных, 2 насоса. В доме 2 wi-fi роутера.
 

semper-7

New member
Нельзя организовывать связь между устройствами за пределами внешней локальной сети. Вообще в системе умного дома должно быть одно главное устройство, которое должно общаться с внешним миром и опрашивать подчиненные устройства. Ведь инет не всегда работает. В случае его отсутствия целостность системы нарушается.
 

Маззик

New member
Все ESP имеют вайфай, подключаешь их к роутеру, а кодом долбишься на PHP страничку в интернете. Первым запросом берешь данные на ESP вторым отправляешь на страничку мониторинга, чтобы на народный мониторинг не выкладывать. Я данные отправлял себе на страничку PHP на своем сайте записывал в базу mysql, php обработчик пример есть. При получении данные php на сервере отправляет email с данными. Так же ESP вполне может парсить данные для себя с помощью GET запроса. Вот каждую ESP отдельно настроить на отправку и прием данных с интернета. Я правда не спец, но примерчик разобрал попробовал, все шикарно работает
PHP где то был если не нагуглишь могу поискать
 

semper-7

New member
Все ESP имеют вайфай, подключаешь их к роутеру, а кодом долбишься на PHP страничку в интернете. Первым запросом берешь данные на ESP вторым отправляешь на страничку мониторинга, чтобы на народный мониторинг не выкладывать. Я данные отправлял себе на страничку PHP на своем сайте записывал в базу mysql, php обработчик пример есть. При получении данные php на сервере отправляет email с данными. Так же ESP вполне может парсить данные для себя с помощью GET запроса. Вот каждую ESP отдельно настроить на отправку и прием данных с интернета. Я правда не спец, но примерчик разобрал попробовал, все шикарно работает
Все работает пока есть инет. Надо предусмотреть возможность автономной работы, если данные используются не только для народного мониторинга, но и для принятия решений, например для включения насоса. В таком случае см. мой пост выше.
 

semper-7

New member
У меня в системе отопления все ESP настроены как STA. Одно ESP главное и управляет насосами. остальные ESP датчики температуры. На них установлен сервер TCP. На главном TCP клиент. Главное опрашивает подчиненые, затем отправляет GET запрос на страницу php. Если инет прерывается - все работает, только данные на страницу не отправляются.
 
Сверху Снизу