Сегодня научимся обращаться к ESP8266 из любого места в любое время. А также разберём пример небольшого демонстрационного скетча. Для примера возьмём наиболее частую ситуацию, когда WiFi-модуль находится в домашней сети и подключен к роутеру, наряду с другими устройствами, такими как компьютеры, телефоны, телевизоры и т.д.
При организации удалённого доступа перед нами возникает 2 проблемы, решение которых займёт не более 5 минут вашего драгоценного времени. 1-я проблема: Динамический IP-адрес, выделяемый интернет-провайдером нашему маршрутизатору, т.е. роутеру, в момент его подключения к сети интернет. Эта проблема заключается в том, что, в наше отсутствие, дома, например, могут отключить электричество, а когда его заново включат, провайдер выделит домашнему маршрутизатору отличный от предыдущего, неизвестный нам IP-адрес.
Конечно, можно заказать у провайдера услугу статического, т.е. выделенного, IP-адреса. Но у большинства провайдеров эта услуга платная, а лишних денег, как известно, не бывает. 2-я проблема - множество устройств подключенных к роутеру. Все они, в сети Интернет, имеют одинаковый IP-адрес, который провайдер выделяет роутеру, при его подключении.
Далее маршрутизатор сам контролирует обмен пакетами данных в сети, т.е. определяет какому устройству что посылать. Сама проблема заключается в том, что нам необходимо настроить обмен пакетами таким образом, чтобы при удалённм обращении к ESP8266 наш домашний роутер понимал, что мы хотим пообщаться именно с этим устройством.
Итак, за дело! Для начала давайте загрузим скетч примера по ссылке в описании под этим видео и откроем его в программе Arduino IDE. Теперь на некоторое время оставим его в покое и займёмся решением первой проблемы. Вопрос с динамическими IP-адресами нам поможет решить бесплатный интернет-сервис динамического DNS.
Что это такое... В двух словах, это сервис который выделяет нам доменное имя, привязывает его к нашему IP-адресу и позволяет периодически обновлять этот IP-адрес, по мере необходимости, при его смене нашим интернет провайдером. Т.е. этим интернет-сервисом нам выделяется постоянный интернет-адрес, по которому мы сможем обращаться к нашей домашней сети.
Чтобы наша сеть была постоянно доступна по этому адресу, нам необходимо периодически сообщать сервису наш текущий IP-адрес. Но не беспокойтесь, в ручном режиме этого делать не придётся. За нас этим будет заниматься ESP. На самом деле бесплатных сервисов динамических DNS существует множество. Первым попавшимся мне стал сайт hldns.ru.
С ним мы и будем работать. Открываем браузер. Заходим на сайт hldns.ru. Здесь в правой части экрана ставим галочку, подтверждая, что мы не робот, вводим email на который нам свалится письмо со ссылкой на активацию аккаунта, а также письмо с уникальной ссылкой для обновления IP и инструкциями. Затем выбираем имя поддомена для нашего адреса, используя буквы латинского алфавита и цифры.
Выделенный впоследствии сервисом адрес будет представлять из себя доменное имя третьего уровня, т.е. то что мы вводим в это поле, точка hldns, точка ru. Ставим галочку, подтвержая то, что мы согласны с правилами использования сервиса и нажимаем на кнопку "Произвести регистрацию". Затем переходим в наш почтовый ящик, находим письмо со ссылкой активации и кликаем на неё.
Переходим обратно в почту. Дожидаемся пока нам на ящик свалится письмо с инструкциями. Открываем его. В этом письме нас интересует уникальная ссылка для обновления IP-адреса, а также вот этот фрагмент письма. При переходе по ссылке обновления IP-адреса, в случае его успешного обновления, сервер возвращает нам наш текущий IP.
Если обновление по какой либо причине не удалось, то сервер возвращает нам код ошибки. Как раз возможные когды ошибок и описаны здесь. К примеру, как видим, если мы будем обновлять наш IP чаще, чем раз в 5 минут, сервер вернёт нам код ошибки 101. Теперь копируем из ссылки для обновления IP буквенно-цифровой уникальный ключ.
От конца ссылки и до последнего слэша, т.е. косой черты. Переходим в наш скетч и вставляем его вместо точек в значение константы ip_update_get. Всё! Первая из проблем решена. Теперь давайте вместо точек в значении константы ssid, забьём в скетче название нашей домашней WiFi сети, к которой будем подключаться, а затем вместо точек в значении константы password забьём пароль для подключения к домашней сети.
На коде скетча подробно останавливаться не буду, т.к. подробно расписал всё в комментариях. Опишу лишь несколько моментов. Все подключаемые в данном скетче библиотеки входят в стандартный пакет ESP8266 для Arduino IDE, дополнительно ничего устанавливать не нужно. В этом месте скетча мы указываем адрес порта, по которому будем обращаться к ESP8266.
К этому моменту еще вернёмся чуть позже. Здесь мы выводим локальный айпишник нашей ESP8266, т.е. адрес модуля в домашней сети. Здесь выводим MAC-адрес модуля. В этой строке говорим о том, что при обращении сетевого клиента к корневой папке поднятого на ESP8266 веб-сервера должна вызываться функция root (она описана ниже).
А в этой строке вызывается функция ip_update, которая также описана ниже и предназначена для обновления IP-адреса маршрутизатора в сервисе динамического DNS. В блоке loop мы просто ожидаем обращения сетевого клиента к веб-серверу модуля. Функция ip_update обращается к серверу DynDNS, передавая ему параметры, необходимые для обновления IP-адреса и выводит ответ сервера в монитор серийного порта.
Эту функцию можно портировать в Ваши проекты, вместе с константой, определяющей адрес хоста сервера DynDNS и константой с параметрами для обновления адреса. B функции root описано то, что в итоге мы должны увидеть в браузере, когда всё настроим и обратимся к ESP8266 из Интернет по зарегистрированному в сервисе DynDNS адресу.
Т.е. отображение в окне браузера надписи "Web-server ESP8266" будет означать успешное завершение нашей сегодняшней работы. Вот и всё. Подключаем ESP8266 к компьютеру, при необходимости переводим его в режим программирования и отправляем скетч на компиляцию и загрузку. Затем открываем монитор серийного порта.
Напоминаю, что в ответе сервера мы увидим текущий IP нашей домашней сети только в том, случае, если обновление адреса прошло успешно. Если вместо айпишника видим код 101, значит с момента последнего обновления прошло менее пяти минут. Далее нас интересует IP-адрес нашего модуля в домашней, т.е. локальной сети.
Копируем его и открываем в браузере интерфейс администрирования роутера. Обычно он доступен по адресу 192.168.0.1 или 192.168.1.1. Надеюсь, что у вас есть данные для доступа в интерфейс. Если настройки ройтера с момента его покупки не менялись, то вполне вероятно, что для доступа подойдут заводские логин и пароль.
Они могут быть указаны либо на самом роутере, либо на коробке от него, либо в инструкции. Либо по названию и модели роутера дефолтные данные для доступа в интерфейс настроек можно поискать в Интернет. Далее... У разных роутеров могут быть разные интерфейсы, но принцип везде один и тот же. Нас интересует настройка переадресации портов.
Ищем... У меня этот раздел доступен в разделе "Интернет", "Переадресация портов". Здесь необходимо включить переадресацию или убедиться в том, что она включена и добавить правило переадресации. Указываем "Имя службы" как ESP8266 или как вам вздумается. В диапазоне портов указываем 10200, как прописано у нас в скетче.
Тут хотелось бы заметить, что некоторые номера портов, например, такие как 80, 8080, 20, 21 могут вызывать конфликты внутри сети. Безопасно использовать, например, диапазон от 10200 до 10300. Поэтому в скетче указан порт 10200. Его мы указываем и здесь. Вставляем локальный IP-адрес, который скопировали в мониторе серийного порта.
Далее "Добавить" и "Применить". У меня роутер одному и тому же устройству постоянно выдаёт один и тот же айпишник. Но если у вас не так, то целесообразно закрепить текущий IP-адрес за устройством. Это можно сделать в разделе настроек DHCP-сервера роутера. У меня эти настройки находятся в разделе "Локальная сеть".
Здесь нам необходимо создать правило для модуля, указав его имя или MAC-адрес и айпишник. MAC-адрес также выводится модулем в монитор серийного порта. Можно там посмотреть. Нажимаем "Добавить" и "Применить". Теперь забиваем в адресной строке браузера адрес, который мы создали в службе динамического DNS.
Через двоеточие без пробелов указываем номер порта, по которому маршрутизатор переадресует нас на веб-сервер устройства, т.е. 10200, и... Вуаля! Теперь по этому адресу и номеру порта поднятый на нашей ESP8266 веб-сервер доступен из любой точки мира и с любого устройства, подключенного к Интернет. Вместо этой надписи мы можем выводить показания датчиков или интерфейс для взаимодействия с модулем.

&

Если понравилось видео, ставьте лайк! Если в результате просмотра вы узнали, как решить проблему, которую вы хотели, но не могли решить до этого, то с вас пиво. Если остались вопросы, пишите в комментариях. А на сегодня это все.