как узнать айпи esp32
ESP32: Wi-Fi
Для работы с Wi-Fi понадобится встроенная библиотека WiFi.h (исходники). В большинстве примеров вам надо знать имя сети и пароль от него. После окончания работы желательно вызывать метод WiFi.disconnect(true);.
Базовый минимальный пример
Сначала рассмотрим базовый пример для общего понимания. Все пояснения в комментариях.
Теперь можно писать более сложные примеры.
Получить IP-адреса
В пассивном режиме без входа в сеть вы получите IP-адрес, равный 0.0.0.0. Если нужно получить реальный адрес, то скетч нужно переписать. Добавим возможность входа в сеть, используя учётные данные.
Теперь вы получите реальный IP-адрес. Узнав адрес через WiFi.localIP(), вы можете в командной строке ввести команду ping ESP_ADDRESS (подставьте ваш адрес), чтобы убедиться, что устройство находится в сети. Пригодится для отладки примеров.
Метод WiFi.getHostname() возвращает имя платы espressif. По идее по этому имени тоже можно обращаться через команду ping espressif, но у меня этот вариант не заработал.
Также привёл другие вызовы функций, которые встречаются в библиотеке.
Другой вариант получения IP-адреса через лямбда-функции.
Ещё один пример получения IP-адреса разными способами. На этот раз обойдёмся без лямбда-функции. Как и в предыдущем примере мы отслеживаем событие SYSTEM_EVENT_STA_GOT_IP и при его наступлении вычисляем адрес.
Узнать настройки Wi-Fi модуля
Для скетча нам не понадобится вводить пароль от Wi-Fi, достаточно просто включить сам Wi-Fi на плате и узнать его Mac-адрес, запустить диагностику, узнать локальный адрес.
WiFiScan
Встроенный пример Examples/WiFi/WiFiScan служит для сканирования WiFi-сети. Выводит число найденных точек и их названия.
В скетче используются следующие функции:
Сканируем WiFi-сеть. Расширенный вариант
Чтобы просканировать текущую WiFi-сеть, нам понадобятся учётная запись для входа в неё (идентификатор и пароль). После успешного входа запускаем сканирование через функцию WiFi.scanNetworks(), которая вернёт информацию о всех точках доступа с сопутствующими свойствами.
Для удобства часть кода поместим в отдельные функции: scanNetworks() и connectToNetwork() (её можно использовать при использовании контроллера в качестве веб-клиента.
В мониторе порта выводится следующая информация (часть данных я убрал в целях безопасности).
Точка доступа
Плата ESP32 может работать как точка доступа. Для первого знакомства получим базовую информацию о точке доступа через доступные функции. Мы можем установить собственные значения для SSID и пароля (пароль можно даже не указывать, чтобы сеть была открытой).
После загрузки скетча мы получим IP-адрес платы. В настройках компьютера или смартфона должна появиться созданная точка доступа. Кстати, когда пробовал вариант с паролем, то точка доступа не создалась почему-то.
Отслеживаем момент подключения и отключения устройства к точке доступа
За соответствующие события отвечают SYSTEM_EVENT_AP_STACONNECTED и SYSTEM_EVENT_AP_STADISCONNECTED.
После загрузки скетчка в настройках телефона найдите созданную точку доступа и присоединитесь к ней. Момент подключения будет обнаружен и в мониторе порта появится сообщение о соединении.
Mac-адрес для точки доступа
В первом примере с получением настроек модуля мы вычисляли Mac-адрес через функцию WiFi.macAddress. Существует также функция WiFi.softAPmacAddress(), когда плата работает в режиме точки доступа.
Включаем поддержку IPv6
Мы можем включить поддержку IPv6 и получить адрес в этом формате. Включение поддержки IPv6 происходит при помощи функции softAPenableIpV6(). Вызовем функцию при событии SYSTEM_EVENT_AP_START, когда активируется точка доступа.
После включения поддержки в событии SYSTEM_EVENT_AP_STA_GOT_IP6 (получение адреса) узнаём IPv6-адрес.
Сколько устройств подключено к точке доступа
Узнать число устройств, которые в данный момент подключены к точке доступа, можно через функцию softAPgetStationNum(). После запуска скетча подключите телефон и другие устройства к точке доступа, чтобы увидеть изменения.
Как настроить точку доступа на ESP32 для веб-сервера
В сетях Wi-Fi микроконтроллер ESP32 может работать и как станция, и как точка доступа, и в обоих режимах одновременно. В этом руководстве мы покажем, как настроить ESP32 в качестве точки доступа с использованием среды программирования Arduino IDE.
В большинстве проектов мы подключали микроконтроллер ESP32 к беспроводному маршрутизатору. При этом появляется доступ к ESP32 через локальную сеть. Тогда маршрутизатор служил точкой доступа, а ESP32 был настроен как станция. А для управления микроконтроллером ESP32 необходимо было подключиться к маршрутизатору (локальной сети).
Но если вы настроите микроконтроллер ESP32 как точку доступа (как в местах общественного беспроводного доступа), вы сможете подключиться к ESP32 с помощью любого устройства с интерфейсом Wi-Fi без необходимости соединения с маршрутизатором.
Простыми словами, когда вы настраиваете ESP32 как точку доступа, вы создаёте свою собственную сеть Wi-Fi, а находящиеся поблизости устройства с интерфейсом Wi-Fi (станции) могут подсоединяться к микроконтроллеру (например, смартфон или компьютер).
Здесь мы покажем, как настроить ESP32 как точку доступа для своего проекта с веб-сервером. В этом случае вам не понадобится подключаться к маршрутизатору для управления микроконтроллером ESP32. Так как ESP32 не подключается далее к более широкой сети (в отличие от маршрутизатора), она называется мягкая точка доступа (soft Access Point).
Установка ESP32 в Arduino IDE
Для среды Arduino IDE существует дополнение, которое позволяет программировать микросхему ESP32 посредством этой среды и её языка программирования.
Код для создания точки доступа на ESP32
В этом примере мы модифицируем веб-сервер на микроконтроллере ESP32 из прошлого руководства, чтобы добавить возможность работы в качестве точки доступа. То, что мы здесь представим, должно отлично работать с любым примером, представляющим собой веб-сервер на ESP32.
Загрузите приведённый ниже код, чтобы настроить микроконтроллер ESP32 как точку доступа.
5 экспериментов с WiFi на ESP32
Платы ESP32 весьма популярны в виду низкой цены, неплохой вычислительной мощности (процессор 200МГц), развитого SDK с поддержкой как MicroPython так и Arduino IDE, наличием GPIO c поддержкой периферии (SPI, I2C и пр) и беспроводной связи (WiFi, Bluetooth). Сегодня мы посмотрим, что можно сделать на такой плате ценой всего лишь около 12$.
Мы рассмотрим разные варианты использования WiFi, от простого коннекта к сети до WiFi-сниффера. Для тестов понадобится любая плата с ESP32 (лучше с OLED-экраном, как на картинке) и Arduino IDE.
Для тех кому интересно как это работает, продолжение под катом.
Я не буду писать, как подключить библиотеки ESP32 к Arduino IDE, желающие могут посмотреть здесь. Отмечу лишь, что у данной платы есть особенность — для загрузки кода из Arduino IDE нужно во время заливки нажать и подержать кнопку Boot. В остальном, использование платы ничем не отличается от обычных Arduino.
Теперь приступим к коду. Все примеры кода полностью готовы к использованию, их можно просто скопировать и вставить в Arduino IDE.
1. Подключение к WiFi и получение точного времени
Раз уж на плате есть WiFi, самое простое что мы можем сделать, это подключиться к существующей WiFi-сети. Это общеизвестно, и работало еще на ESP8266. Однако просто так подключиться и ничего не делать неинтересно, покажем как загрузить точное время по NTP. С помощью нижеприведенного кода нашу плату с ESP несложно превратить в настольные (или для гиков 100lvl наручные:) часы.
Код довольно прост, интересно что поддержка NTP уже встроена в стандартные библиотеки, и ничего доустанавливать не нужно. Для работы OLED-экрана нужно установить библиотеку SSD1306.
Переменные ssid и password нужно будет заменить на параметры реальной точки доступа, в остальном, все работает «из коробки».
2. WiFi точка доступа
Разумеется, мы можем не только подключиться к точке доступа, но и создать свою. В данном примере мы запустим мини веб-сервер, открыть который можно например, со смартфона. Отдельно можно отметить обработку события SYSTEM_EVENT_AP_STACONNECTED, что позволяет узнать, сколько клиентов подключалось к нашей точке доступа.
Фото того, как это работает, показано на КДПВ.
При запуске программы на экране будет отображено имя точки доступа и IP-адрес. Подключившись со смартфона к точке доступа, можно в браузере набрать IP и увидеть содержимое web-страницы.
Сервер будет работать и без OLED-экрана, в этом случае отладочную информацию можно смотреть с помощью Serial Monitor в Arduino IDE.
3. WiFi точка доступа с DNS
Предыдущий пример можно улучшить, если активировать поддержку DNS. В этом случае не придется вбивать IP, вместо него можно использовать полноценное имя, например www.myesp32.com.
В исходнике используется класс WebServer, который позволяет сделать код обработки запросов гораздо короче.
4. WiFI Sniffer
Еще один интересный пример использования WiFi приведен на странице https://github.com/ESP-EOS/ESP32-WiFi-Sniffer. WiFi на ESP32 можно перевести в так называемый promiscuous mode, что позволяет незаметно мониторить пакеты WiFi, не подключаясь к самой сети. В частности, можно видеть MAC-адреса находящихся поблизости устройств:
Это может пригодиться например, для «умного дома», чтобы узнать когда владелец вернулся домой. Некоторые компании используют MAC-адреса устройств для мониторинга посетителей, чтобы потом показывать им в гугле таргетированную рекламу.
5. WiFi Packet Monitor
Другой пример использования promiscuous mode — графический мониторинг активности канала, также как и в предыдущем случае, подключения к самой сети не требуется.
Исходный код был взят здесь, из него была убрана поддержка записи на SD (на плате её все равно нет) и был исправлен баг с графической библиотекой. Переключать номер канала для мониторинга можно либо нажатием кнопки (на плате её тоже нет:) либо посылкой соответствующего числа через Serial Monitor в Arduino IDE.
Одна плата ESP32 может мониторить только 1 канал, но при дешевизне этих плат вполне можно сделать вот так:
Источник: github.com/spacehuhn/WiFiSatellite
Заключение
Как можно видеть, в плане соотношения возможностей и цены, ESP32 довольно интересны, и в любом случае, намного функциональнее обычных Arduino. Эксперименты с WiFi также довольно занимательны, на плате можно держать не только вполне функционирующий веб-сервер (даже с поддержкой websockets), но и изучить работу WiFi и MAC более детально.
В целом, модули ESP32 интересны тогда, когда возможностей Arduino уже не хватает, а использовать Raspberry Pi с Linux еще избыточно. Кстати, вычислительные возможности ESP32 позволяют использовать даже модуль камеры, так что плату можно использовать в качестве беспроводного видеозвонка или прототипа для домашней системы видеонаблюдения.
Arduino.ru
Но вопрос не в этом. Несколько иной будет вопрос. Я уже знаю, что для того, чтобы достучаться извне-к ардуине ethernet (или esp32-в моем конкретном случае), находящейся за роутером-нужен проброс портов, настройка DDNS, регистрация на noip.com.
У меня же сейчас, суть сервиса заключается в том, что (пошагово):
1) esp32 подключается к wifi сети роутера;
Ок, я тоже так думал-сейчас глянул свой внешний ip- он 37. что то там. А внутренний как раз 192.168.*
САМ ВОПРОС: есть ли некий простой автоматический способ дать возможность достучаться к любой esp32, находящейся за роутером-из внешнего интернета- без настройки всяких сложных вещей? 🙂
P.S. Будут пользовать условно «домохозяйки». Поэтому все эти страшные слова-темный лес для них. Я то-настрою. Они- гарантированно нет.
Тоже вполне по-моему. Временной лаг может и будет-но не сильный.
Тогда даже не надо достукиваться до esp32. Она сама всё что надо- с сервера забирает.
Какой файлик, господи. Стандартный сервер сообщений, поддерживает постоянное соедниение, никакой задержки. Тот же пресловутый mqtt.
Ну вот. И это будет самое простое. Зачем стучать с той стороны-если можно с этой 🙂
Интерес энтомологический: а два доллара в месяц за VPS в Амстердаме или Франкфурте, который решит все подобные траблы, это большая брешь в бюджете?
Поясните свою мысль. И причем тут VPS? Сервис то «железный». То бишь вебсайт+железные устройства у пользователей.
Поясните свою мысль. И причем тут VPS? Сервис то «железный». То бишь вебсайт+железные устройства у пользователей.
VPN туннель от твоего роутера на VPS, например на OpenVPN. Проброс порта с реального IP на VPS-ке на внутренний IP твоего ESP32. Я где-то полгода назад тут это показывал. Но нормальному админу показывать не надо, это с закрытыми глазами и после поллитра текилы строится за полчаса.
Для начала: я вам не тыкал. Это раз.
Второе-не надо пытаться грубить и показать что дох..я умный. Есть что сказать по делу, спокойно-говорим. Нет-идем мимо.
Я нигде словом не обмолвился, что я «супер-пупер-админ-решаю-всё-за-2-секунды». Я-спросил совета.
Для начала: я вам не тыкал. Это раз.
Второе-не надо пытаться грубить и показать что дох..я умный. Есть что сказать по делу, спокойно-говорим. Нет-идем мимо.
Я нигде словом не обмолвился, что я «супер-пупер-админ-решаю-всё-за-2-секунды». Я-спросил совета.
Бате своему советы давай, если знаком, это раз.
Вобщем, проходи мимо человек, не загораживай свет 🙂
Я твоих советов, «динозавр» сраный вроде как не спрашивал 🙂
Тема собственностью не является.
каждый волен писать что считает необходимым.
если написанное неприемлемо приходит модер и разбирается
достучаться инициативно не может, пакет от сервера придет только как ответ на пакет изнутри сети
то, что Вам надо называется белый IP и проброс порта. Гуголь в помощь
VPN сложно для домохозяек, не годится.
VPN сложно для домохозяек, не годится.
А ты так понял, что у ТС и устройства у домохозяек и фронт-енд? Я то подумал, что устройства в известном месте. Может я не прав.
Уникально именовать можно, например, перед отдачей девайса клиенту, прописывая в память какой-нибудь GUID, сгенерённый той же виндой, или любым онлайн-сервисом генерации, коих как говна за баней.
В esp32 есть глобально уникальный MAC-адрес.
Кстати да (насчет MAC адреса)!
А в целом, в любом случае-всем спасибо за то, что нашли время зайти и отписаться! 😉
Уже копаю плотно MQTT.
Места расположения железных устройств заранее неизвестны, владельцы-условные «домохозяйки». Которые если на сайт зайти сумеют-и то спасибо. Настроить что то сложное-вообще никак им:-))))
Но arp не везде пролезает, чтобы работать по мас ам
если железка за файрволом, то она на маскарадинге и внешний клиент может обратиться внутрь за фв только имея внешний ip и протоптанный внутрь форвардинг.
кстати часто интернет юзеры имеют внешний адрес роутера из диапазона 10.0.0.0 и это означает, что они уже во внутренней подсети и тут форвардинг должен протаптывать провайдер
тут уже девайс сидит за двумя маскарадингами
Но arp не везде пролезает, чтобы работать по мас ам
Структуру нарисуйте, о которой гоаорите, с адресами и протоколами
То есть, юзеру не потребуется пробрасывать порты на роутере?
Просто повторюсь-это будет домохозяйка-которая не сможет:-)
То есть, юзеру не потребуется пробрасывать порты на роутере?
Структуру нарисуйте, о которой гоаорите, с адресами и протоколами
То есть, юзеру не потребуется пробрасывать порты на роутере?
ЭЭм, а VPN клиент сам по себе волшебно где-то поднимется?
В общем пытаюсь поднять MQTT подключение.
Накопал мануал-пытаюсь на его основе сотворить нечто свое :-)))
Ругается на строку 030(эта конструкция мне незнакома) и на строку 046 (это знакомо-но пока не пойму, почему).
Ругаеца-то какими словами?
void callback( const MQTT::Publish &pub)
Ругаеца-то какими словами?
void callback( const MQTT::Publish &pub)
Выглядит это так(поправил):
А потом закомментил этот кусок кода, глянуть, где еще есть косяки(то что я закомментил, не должно вызвать ошибку вроде) и вылезло вот это еще:
Два сообщения запостилось-удалил одно.
скорее всего какой то заголовочный файл в котором обьявлен тип MQTT не подключен. Ищи, где обьявляется этот тип и подключай #include-ом
ESP32_MQTT_2:30:21: error: ‘MQTT’ does not name a type
говорит о том, что в доступных программе файлах нигде не описан тип MQTT. Пока не найдешь заголовочник, где он описан, и не подключишь его, дальше тебя не пустют
Ок, буду дальше копать.
Всё, удалось поднять MQTT!
В конце концов надоели мне все эти глюки-и пошел гуглить. В рунете ничего сносного не нашел-а в буржунете моментально!
Короче говоря, если кто в будущем будет копать эту же тему, вот тут лежит полностью рабочий код: https://iotdesignpro.com/projects/how-to-connect-esp32-mqtt-broker
Все сделал по мануалу как там и без проблем настроилось подключение и сообщение в esp32 с внешнего интернета проходят без проблем!
Как сказал бы чукча «моя счастлива» :-))))
Как сказал бы чукча «моя счастлива» :-))))
Ну а тебе что говорили? 😉 Всё правильно сделал 😉
Всем доброго, еще раз!
Сейчас ломаю голову вот над чем-может кто подскажет чего.
Может конечно чего не знаю или не понимаю. В общем, как всегда- любому совету буду рад.
Установить можно на VPS/VDS/etc.
При покупке http/email/dns хостинга ничего кроме оплаченного использовать не получится.
Спасибо! Подозревал нечто такое.
Заодно спрошу еще такую штуку-может есть какое простое решение-если кто в курсе:
Вкратце, для чего нужно: мои железки на базе esp32 будут находится у абсолютно разных людей. Хочу, чтобы при коннекте к домашней wifi- esp32 коннектилась к серверу mqtt, регилась автоматом на нем и для нее заводился там аккаунт(при коннекте передается ее MAC-адрес, как уникальное имя+ сгенеренный уникальный пароль. Все это происходит автоматом, «под капотом»-невидимо для пользователя).
Зачем это надо: убрать с пользователя чисто технический геморрой по максимуму. Приконнектился к wifi-и управляй esp32 с сайта. А как там и что происходит «под капотом»- до барабана. Вот так хочу выстроить. Программистов, чтобы собрать систему уже нашел. Только вот думаю, может готовое есть?
Интересует именно серверная часть для vps. Насчет скетча для esp32- там все прозрачно и понятно.
Управление ESP32/ESP8266 с помощью веб-сервера и физической кнопки
В этом руководстве рассмотрим, как управлять выходами ESP32 или ESP8266 одновременно с помощью веб-сервера и физической кнопки. Состояние вывода обновляется на веб-странице независимо от того, было ли оно изменено с помощью кнопки или сервера.
Платы ESP32 / ESP8266 будут программироваться с использованием Arduino IDE. Найти информацию о том, как установить ESP32 в Arduino IDE вы можете здесь:
Обзор проекта
Давайте посмотрим, как должен работать проект.
Таким образом, здесь мы покажем, как управлять одним и тем же выводом, используя веб-сервер и кнопку одновременно. Всякий раз, когда состояние вывода изменяется, веб-сервер обновляется.
Схема
Прежде чем продолжить, необходимо собрать схему со светодиодом и кнопкой. Подключим светодиод к GPIO 2, а кнопку к GPIO 4.
Требуемые детали
Вот список деталей, необходимых для сборки схемы:
Схема ESP32
Схема ESP8266 NodeMCU
Вам необходимо установить следующие библиотеки:
Код веб-сервера для ESP
Скопируйте следующий код в свою Arduino IDE.