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

Решено Подключение и управление ESP8266 с другого конца земли

Gebiys

New member
Доброго времени суток! Есть ESP8266 (NodeMCU) и несколько подключенных к нему датчиков. Дома я спокойно могу получать к нему доступ и управлять всей системой, но вот когда устройство находится уже за пределами локальной сети, то возникают проблемы. Возможно ли при помощи существующих библиотек ESP сделать следующую систему: Есть ESP8266, есть сервер. ESP можно запустить в любой точке земли. Далее там вводят данные подключения к своей WIFI сети, ESP посылает POST запрос на главный сервер, адрес которого будет указан в прошивке и далее уже происходит взаимное общение ESP и сервера. Проблема в том, что непонятно, как с сервера получить доступ к ESP, если он не находится в локальной сети?
 

CodeNameHawk

Moderator
Команда форума
Проблема в том, что непонятно, как с сервера получить доступ к ESP, если он не находится в локальной сети?
Многие роутеры умеют пробрасывать порт в локальную сеть.
Второй способ, сама есп с заданным интервалом запрашивает внешний сервер.
 

Gebiys

New member
Многие роутеры умеют пробрасывать порт в локальную сеть.
Второй способ, сама есп с заданным интервалом запрашивает внешний сервер.
Спасибо за ответ! Без проброски портов и исключая второй вариант невозможно получить доступ к ESP? Я хочу сделать так, чтобы от пользователя требовалось меньше телодвижений (в идеале: ввел данные входа wifi сети и все. Без всякой проброски портов.)
 

nikolz

Well-known member
Спасибо за ответ! Без проброски портов и исключая второй вариант невозможно получить доступ к ESP? Я хочу сделать так, чтобы от пользователя требовалось меньше телодвижений (в идеале: ввел данные входа wifi сети и все. Без всякой проброски портов.)
если ESP сервер:
Домашний хостинг сайтов с динамическим IP
Связываем домен и динамический IP
Удаленный доступ при динамическом IP или Настраиваем DynDNS в Linux
Сервер на динамическом ip или как сделать статический ip адрес из динамического - ITFound.ru
ну и т д
------------------------
если ESP клиент,
то либо ставим у себя (т е в другой точке мира) север
либо размещаем свой сервер в дата центре
либо отсылаем данные в облако
либо используем сервера для IOT
шлем смс с ESP
 

CodeNameHawk

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

Сергей_Ф

Moderator
Команда форума
@Gebiys а чем вариант с с внешним сервером не угодил? Никаких телодвижений от пользователя не надо и золотая рыбка не требуется!
 

Gebiys

New member
@Gebiys а чем вариант с с внешним сервером не угодил? Никаких телодвижений от пользователя не надо и золотая рыбка не требуется!
Быстродействие ограничено промежутком запросов к серверу и я не особо понимаю, как здесь реализовывать обновление прошивок. Также я не смогу, наверное, перезагрузить устройство, на случай его зависания. Поэтому я хотел организовать двухстороннюю связь, где можно мгновенно, по инициативе любой из сторон совершать действия. Все упирается только в удобство подключения.
 

Сергей_Ф

Moderator
Команда форума
@Gebiys на случай зависания вы сможете использовать ТОЛЬКО встроенный watchdog. Обновление без проблем по команде сервера. На счёт "мгновенно" - это точно к золотой рыбке. Во всех остальных случаях, есть конкретный числовой параметр в минутах, секундах, милисекундах и микросекундах. Хотя последнее, при интернет-соединении совсем не актуально.
 
Последнее редактирование:

Gebiys

New member
@Gebiys на случай зависания вы сможете использовать ТОЛЬКО встроенный watchdog. Обновление без проблем по команде сервера. На счёт "мгновенно" - это точно к золотой рыбке. Во всех остальных случаях, есть конкретный числовой параметр в минутах, секундах, милисекундах и микросекундах. Хотя последнее, при интернет-соединении совсем не актуально.
Спасибо за совет насчет WatchDog. Сейчас наткнулся на UPnP для ESP8266 (по логике он сам даст команду роутеру перенаправить порты), заинтересовался, но после прочитал, что UPnP не стоит использовать по причине его ненадежности и отсутствия в большинстве роутеров.. Вы знакомы с этим?
 

Сергей_Ф

Moderator
Команда форума
@Gebiys даже если вы его прокините на роутере, за NAT провайдера вы как его пробрасывать будете? Или вы думаете, что у всех "белый" ip? Вам без сервера в Интернете по любому не обойтись. А если он будет, то незачем пробрасывать порт.
Upnp в роутере может быть и отключен. А вы хотели без лишних телодвижений.
 

Gebiys

New member
@Gebiys даже если вы его прокините на роутере, за NAT провайдера вы как его пробрасывать будете? Или вы думаете, что у всех "белый" ip? Вам без сервера в Интернете по любому не обойтись. А если он будет, то не зачем пробрасывать порт.
Я планирую взять vds и на нем будет php сервер, который должен принимать и отдавать команды на esp, которые могут находится где угодно. К esp может быть подключен rfid считыватель, при срабатывании которого будет посылаться запрос на сервер с номером карты и должен исходить ответ обратно. Esp сможет спокойно посылать команды на сервер, адрес которого будет в прошивке. Но как сам сервер сможет определять адрес Esp (которых может быть много) и посылать туда команды по своей инициативе? Именно из-за этого я начал думать над вопросом: как сделать esp доступной в интернете и тут поехало.. Из варианта связи Esp "в одну сторону" (до сервера) я понял примерно так: на сервере будет база данных, в которой будут в зависимости от команд меняться значения, esp будет периодически опрашивать эту БД и считывать ее значения, исходя из которых она будет уже производить определенные действия. Возможно я не так понял этот вариант и есть более простое решение.
 

nikolz

Well-known member
Я планирую взять vds и на нем будет php сервер, который должен принимать и отдавать команды на esp, которые могут находится где угодно. К esp может быть подключен rfid считыватель, при срабатывании которого будет посылаться запрос на сервер с номером карты и должен исходить ответ обратно. Esp сможет спокойно посылать команды на сервер, адрес которого будет в прошивке. Но как сам сервер сможет определять адрес Esp (которых может быть много) и посылать туда команды по своей инициативе? Именно из-за этого я начал думать над вопросом: как сделать esp доступной в интернете и тут поехало.. Из варианта связи Esp "в одну сторону" (до сервера) я понял примерно так: на сервере будет база данных, в которой будут в зависимости от команд меняться значения, esp будет периодически опрашивать эту БД и считывать ее значения, исходя из которых она будет уже производить определенные действия. Возможно я не так понял этот вариант и есть более простое решение.
Этот варианте и есть мессенджер типа MQTT. Т е ESP присылают сообщения которые записываются в базу данных, а любой желающий кто подписался на его сообщения читает новые сообщения.
У Вас немного иначе. У вас нет посторонних читателей .
тогда ESP нет надобности читать в базе данных.
Алгоритм может быть такой
ESP присылает сообщение и в нем содержится идентификатор .
По идентификатору сервер определяет кто это.
В ответ сервер посылает команду и переводит ESP в нужный режим (прошивка сброс настройка и т д)
Для того чтобы ESP не зависал ставится внешний WDT на таймере TPL5110 с питанием от батарейки 3 вольта(батарейки хватит лет на 100) . Если ESP должно просыпаться более чем через 2 часа то можно поставить внешний RTC.
 

Gebiys

New member
@sharikov не факт, что это то что ТС нужно.
Этот варианте и есть мессенджер типа MQTT. Т е ESP присылают сообщения которые записываются в базу данных, а любой желающий кто подписался на его сообщения читает новые сообщения.
У Вас немного иначе. У вас нет посторонних читателей .
тогда ESP нет надобности читать в базе данных.
Алгоритм может быть такой
ESP присылает сообщение и в нем содержится идентификатор .
По идентификатору сервер определяет кто это.
В ответ сервер посылает команду и переводит ESP в нужный режим (прошивка сброс настройка и т д)
Для того чтобы ESP не зависал ставится внешний WDT на таймере TPL5110 с питанием от батарейки 3 вольта(батарейки хватит лет на 100) . Если ESP должно просыпаться более чем через 2 часа то можно поставить внешний RTC.
Да, я изучал MQTT, но это не то. Вариант с идентификатором очень даже подходит, я примерно так и рассуждал (у каждого устройства будет свой ключ, который будет сверяться), но меня мучил вопрос, на какой адрес будет отправляться ответ от сервера?
 

nikolz

Well-known member
Да, я изучал MQTT, но это не то. Вариант с идентификатором очень даже подходит, я примерно так и рассуждал (у каждого устройства будет свой ключ, который будет сверяться), но меня мучил вопрос, на какой адрес будет отправляться ответ от сервера?
Когда приходит сообщение от ESP то в нем есть IP отправителя. Обычно в колбеке на полученное сообщение вытаскивается этот IP и по нему отправляется ответ.
Все это есть в библиотеках по сокету. Если сообщения короткие (менее 1500 байт), то лучше использовать UDP с подтверждением (я так делаю).
 

Gebiys

New member
Когда приходит сообщение от ESP то в нем есть IP отправителя. Обычно в колбеке на полученное сообщение вытаскивается этот IP и по нему отправляется ответ.
Все это есть в библиотеках по сокету. Если сообщения короткие (менее 1500 байт), то лучше использовать UDP с подтверждением (я так делаю).
Значит здесь уже проброс портов не нужен. Верно? Links2004/arduinoWebSockets
websocket - NodeMCU Documentation
 
Последнее редактирование:

nikolz

Well-known member
Значит здесь уже проброс портов не нужен. Верно? Links2004/arduinoWebSockets
websocket - NodeMCU Documentation
нет. проброс портов надо когда вы хотите из вне попасть во внутреннюю сеть без приглашения.
А когда Вы из внутренней сети идете в интет - это обычное дело и ваc из инета пропускают без проблем так как вас ждут.
 
Сверху Снизу