как узнать ip esp8266
как узнать IP, посоветуйте
Legantmar
New member
Опыт работы с контроллерами esp8266 более 2 лет.
Извиняюсь за многобукв, но не знаю как короче объяснить «проблему» ))
Предисловие:
Планирую коммерческое устройство подсоединяемое к роутеру пользователя с выходом в интернет (нужны NTP часы).
Проблема:
У всех роутеров различается третий сегмент IP адреса, примеры
192.168.0.1, 192.168.1.1, 192.168.100.1, 192.168.200.1 и другие..
Как я себе видел решение:
Пользователь при первом включении (esp встает в точку доступа) подключается к устройству, например, с телефона.
На странице настроек задает имя и пароль своего роутера.
После перезагрузки esp подключается к роутеру (включает режим клиента), определяет IP адрес который выдал роутер (при необходимости меняет последний сегмент). И при этом сохраняет режим точки доступа. (т.е. находится в двойном режиме WI-FI)
Пользователь снова заходит с телефона на точку доступа (esp) и смотрит IP адрес по которому esp подключился к роутеру.
Далее может управлять с любого компьютера подключенного к роутеру.
Проблема:
В таком режиме полностью отваливается WI-FI при запросе html страниц буквально через 5-10 минут. Независимо откуда заходит пользователь, напрямую с телефона (на точку доступа esp) или через роутер (esp клиент).
Проблема точно не в блоке питания и не в стабилизаторе 3,3В. Проверял на 3 экземплярах. У всех одинаковые симптомы (подозрение на сам контроллер и мою схему включения). (При этом в режиме приема get запросов без выдачи html ответов живет дольше, чем если каждый раз загружать в браузер html страницы с контроллера)
Посоветуйте свое решение.
Спасибо за внимание.
Сканировать IP-адрес ESP8266
При подключении к маршрутизатору ESP переходит в режим STA и не создает AP до тех пор, пока не будет найден WiFi, к которому он был подключен ранее. Теперь, когда ESP подключен к маршрутизатору, маршрутизатор назначает IP-адрес ESP, через который будет отправляться команда HTTP. На последовательном мониторе он показывает IP-адрес, которому он назначен, но что, если приложение управляет ESP, нет последовательной связи. Как приложение узнает IP-адрес, назначенный конкретному ESP8266? Каким образом приложение может сканировать маршрутизатор? Или любой другой способ сделать это? Если к маршрутизатору подключено несколько ESP, как определить IP-адрес конкретного ESP.
4 ответа
mDNS также известен как Zeroconf или Bonjour в зависимости от того, с кем вы разговариваете.
Ядро Arduino ESP8266 (если вы программируете ESP8266 напрямую) имеет примеры mDNS. Если вместо этого вы используете интерфейс командной строки AT, вам нужно будет прочитать руководство, чтобы узнать, как отправлять пакеты UDP на адреса многоадресной рассылки.
Вы можете жестко запрограммировать требуемый IP-адрес для ESP8266. (Это может быть невозможно все время). Вот пример кода: https://www.arduino.cc/en/Reference/WiFiConfig
Если вы не являетесь жестким IP-адресом, вы можете прочитать IP-адрес ESP с помощью функции WiFi.localIP () в Arduino.
Относительно mDNS это решение, но, к сожалению, оно имеет ограничение, как в настоящее время не поддерживается платформой Android.
Мое предложение состоит в том, чтобы продолжать прослушивать порт UDP во всем диапазоне IP-адресов сети, как и в токене, и когда вы нашли правильный ответ пакета UPD вместе с этим IP /MAC-портом устройства внутри этого повторно воспроизведенного пакета, тогда вы будете хорошо идти.
Несомненно, это займет немного времени, но только один раз или до тех пор, пока IP-адрес не будет изменен.
AT команды ESP8266 уровня TCP/IP
ESP8266 в своей конфигурации по умолчанию загружается в режим последовательного модема. В этом режиме вы можете общаться с ним с помощью набора AT-команд. AT-команды ESP8266 можно разделить на три категории: базовые, уровень Wi-Fi и уровень TCP/IP. Ниже приведен список всех AT команд уровня TCP/IP, поддерживаемых ESP8266, с объяснением, что они делают, и как их использовать.
Модуль ESP-12E на базе ESP8266
Варианты команд
Примечание:
AT команды уровня TCP/IP
Список команд
AT команды
DNS Fail
ERROR
AT+CWJAP=»SSID»,»password» // доступ в интернет
AT+CIPDOMAIN=»iot.espressif.cn» // работа DNS
AT+CIPSTART – установить TCP соединение, UDP передачу или SSL соединение
Установление TCP соединения
Если TCP соединение уже установлено, то отклик будет:
Установление UDP передачи
Если UDP передача уже установлена, то отклик будет:
Установление SSL соединения
Если TCP соединение уже установлено, то отклик будет:
Если соединение не может быть установлено или происходит разрыв во время передачи данных, система возвращает:
Если данные были переданы успешно, система возвращает:
В случае неудачи система возвращает:
SEND FAIL
Входит в режим прозрачной передачи с 20-миллисекундным интервалом между пакетами и максимальной длиной пакета 2048 байт.
Данная команда может использоваться только в режиме прозрачной передачи, который требует одиночного соединения.
Если соединение не может быть установлено или происходит разрыв во время передачи данных, система возвращает:
Если данные были переданы успешно, система возвращает:
В случае неудачи система возвращает:
Если соединение не установлено, или еще есть данные, ожидающие отправки, отклик будет следующим:
Сохранить одно TSP соединение во флеш-памяти
Сохранить UDP передачу во флеш-памяти
Как узнать ip esp8266
Экспериментирование проводилось с использованием Wi-Fi модуля ESP-01 и точки доступа DIR-320NRU (использовались материалы статей [1, 3, 4]).
[Одиночное подключение (ESP8266 в качестве клиента TCP)]
1. Настройка режима WiFi. Переведите ESP-01 в режим станции.
В этой команде 3 означает softAP и режим станции. Ответ:
Примечание: настроенный режим сохраняется в энергонезависимой памяти. Т. е. если сейчас выключить и снова включить питание модуля ESP, то модуль автоматически перейдет в режим станции. Чтобы узнать текущий режим модуля, введите команду «AT+CWMODE?».
2. Перезагрузите модуль, чтобы настройка вошла в действие:
3. Подключение к точке доступа Wi-Fi (например, это может быть домашний роутер наподобие DLink DIR-320):
В этой команде вводятся идентификатор точки доступа (ssid) и пароль (password). Ответ:
Примечание: SSID и пароль обязательно должны быть заключены в двойные кавычки. SSID и пароль команды также запоминаются в энергонезависимой памяти, и после выключения и включения питания произойдет автоматическое подключение к точке доступа и получение IP-адреса.
4. Как узнать IP-адрес, который получил модуль от точки доступа.
Устройство ESP-01 получило IP от роутера. Можно протестировать командой ping:
5. С помощью специальной сетевой утилиты на компьютере создайте сервер. Это может быть программа NetAssist.exe [2]. Например, создайте сервер на TCP-порт 8080 с IP адресом 192.168.0.53.
После этого дайте команду ESP подключиться к этому серверу в качестве клиента:
В этой команде через запятую протокол, IP сервера, номер порта. Ответ:
6. Передача данных.
В этой команде задана длина передаваемых данных в байтах (в этом примере 4 байта). Модуль ESP выдаст приглашение >. Введите 4 любых символа, Enter нажимать не надо (в этом примере введены буквы QWER).
Примечание: если количество отправляемых байт будет больше, чем заданный размер (в этом примере 4), то после лишние байты переданы не будут. Если нужно снова передать данные, то команду AT+CIPSEND=N нужно ввести повторно.
В окне программы NetAssist.exe будут отображаться принятые данные, которые передал модуль ESP-01 (в виде HEX-кодов ASCII, потому что стоит галочка Receive As HEX).
7. Прием данных (передача данных от утилиты NetAssist.exe).
Введите текст для передачи (например «http://microsin.net»), и нажмите кнопку Send (поле ввода и кнопка находятся в нижней части окна программы NetAssist.exe).
[Прозрачная передача данных (Transparent transmission)]
1. Установка режима WiFi (режим станции, т. е. сетевого клиента, который может подключиться к точке доступа).
2. Подключение к точке доступа Wi-Fi:
3. Создайте TCP-сервер на компьютере с помощью утилиты NetAssist.exe. В нашем примере это сервер на IP-адресе 192.168.0.56, порт 8080. Выдайте для ESP AT-команду для подключения к серверу:
4. Пока что мы повторили все предыдущие шаги из предыдущего раздела «Одиночное подключение (ESP8266 в качестве клиента TCP)». Теперь будут отличия: дадим команду разрешить прозрачный режим, когда все передаваемые и принимаемые данные будут прозрачно появляться на сигналах RS-232 TTL TXD и RXD.
5. Передача данных. Чтобы начать передачу, введите команду:
Теперь все данные, которые поступают на ножке RXD модуля ESP-01, будут прозрачно передаваться по радио на точку доступа и далее на TCP-сервер. И наоборот, все данные, которые передаст TCP-сервер, появятся на ножке TXD модуля ESP-01.
6. Как выйти из прозрачного режима и остановить передачу. Тут не все однозначно. На некоторых модулях для остановки передачи нужно передать магическую комбинацию символов «+++». Но на моем модуле ESP-01 с прошивкой ai-thinker.com Version:0.9.2.4 это сделать не получилось. Поэтому для выхода из прозрачного режима нужно выполнить аппаратный сброс модуля (подать короткий импульс на сигнал EXT_RSTB, это ножка 6 коннектора модуля ESP-01).
Как вариант можно остановить сервер TCP. В нашем примере для этого надо нажать кнопку Disconnect в программе NetAssist.exe, которая обеспечивала работу сервера. Модуль ESP-01 выдаст сообщение об отключении от сервера:
[ESP8288 в качестве TCP-сервера]
1. Настройка режима Wi-Fi. Переведите ESP-01 в режим станции.
2. Подключение к точке доступа Wi-Fi (например, это может быть домашний роутер наподобие DLink DIR-320):
В этой команде вводятся идентификатор точки доступа (ssid) и пароль (password). Ответ:
3. Разрешите множественные подключения к модулю ESP-01 (иначе сервер не запустится).
4. Запуск сервера на модуле ESP-01.
По умолчанию сервер заработает на TCP-порту 333. Ответ модуля ESP-01, сигнализирующий о нормальном запуске сервера:
5. Теперь можно протестировать работу TCP-сервера. В качестве сетевого клиента можно использовать команду telnet, указав в командной строке IP-адрес и порт сервера:
Модуль ESP-01 просигнализирует о подключении к серверу сообщением:
Примечание: ESP8266EX работает как сервер с использованием механизма таймаута. Это означает, что когда соединение установлено, и за определенный период времени (таймаут) не передавалось никаких данных через это соединение, то сервер ESP-01 отключит его, и выдаст при этом сообщение:
Поэтому, если Вы хотите, чтобы соединение сохранялось, то обеспечьте повторение передач пакетов от клиента как минимум каждые 5 секунд.
6. Прием данных TCP-сервером. В качестве теста можно передавать данные от команды telnet, если нажимать клавиши в её окне. Вот ответ сервера ESP-01, сигнализирующий поступление данных (в окне telnet были последовательно нажаты друг за другом клавиши q, w, e, r, t, y).
Примечание: после +IPD через запятую идет 0, означающий номер сетевого соединения, дальше через запятую идет количество принятых байт 1, и дальше через двоеточие идет принятый байт в символьном виде (т. е. его код отображается как символ ASCII).
7. Передача данных TCP-сервером.
В этой команде задана длина передаваемых данных в байтах (в этом примере 4 байта). Модуль ESP-01 выдаст приглашение >. Введите 4 любых символа, Enter нажимать не надо (в этом примере введены буквы QWER).
[Передача пакетов UDP]
1. Настройка режима Wi-Fi. Переведите ESP-01 в режим станции.
2. Подключение к точке доступа Wi-Fi (например, это может быть домашний роутер наподобие DLink DIR-320):
В этой команде вводятся идентификатор точки доступа (ssid) и пароль (password). Ответ:
3. Узнайте IP-адрес, который получил модуль от точки доступа.
4. В нашем сценарии компьютер PC и модуль ESP-01 подключен к одному и тому же роутеру DIR-320. Запустите утилиту NetAssist.exe, в выпадающем списке Settings выберите UDP и нажмите кнопку Connect. В поле Local Host IP будет отображен IP компьютера, куда будет подключаться модуль ESP-01.
5. Разрешите множественные соединения.
В этом примере «192.168.0.56»,8080 это IP и порт удаленной точки подключения (программа NetAssist.exe на компьютере), 1112 это номер локального порта модуля ESP-01 (если это число опустить, то номер порта ESP-01 сам выберет случайным образом). Завершающий 0 означает, что параметры удаленного участника обмена не поменяются. Для нашего примера и случая, если другой компьютер также создаст соединение UDP и отправит данные к ESP-01 на порт 1112, то ESP-01 сможет принять эти данные, но когда ESP-01 отправит данные командой «AT+CIPSEND=4,n», то он отправит их на первый компьютер. Если этот последний параметр будет не 0, то данные будут посланы новому компьютеру.
7. Отправка данных от ESP-01 к компьютеру.
В этом примере указано передать 5 байт на соединение с идентификатором 4. В ответ на эту команду модуль выдаст приглашение >. Введите 5 любых символов, Enter нажимать не надо (в этом примере введены буквы asdfg).
В окне NetAssist.exe принятые данные введенных символов asdfg отобразятся как HEX-коды (61 73 64 66 67).
8. Прием данных модулем ESP-01 от компьютера (передача данных от утилиты NetAssist.exe).
Введите текст для передачи (например «http://microsin.net»), и нажмите кнопку Send (поле ввода и кнопка находятся в нижней части окна программы NetAssist.exe).
Обратите внимание, что после +IPD теперь стоит не только количество принятых байт 19, но и еще идентификатор соединения 4.
Этот проект представляет собой пошаговое руководство, в котором показано, как создать автономный веб-сервер ESP8266, который управляет двумя выходами (два светодиода). Веб-сервер ESP8266 контролируется мобильными устройствами, и к нему можно получить доступ с любого устройства с браузером в локальной сети.
Если вы хотите узнать больше о модуле ESP8266, сначала прочтите мое Руководство по началу работы с модулем WiFi ESP8266.
В данном руководстве рассматриваются два разных метода построения веб-сервера:
ЧАСТЬ 1: СОЗДАЙТЕ ВЕБ-СЕРВЕР, ИСПОЛЬЗУЯ ARDUINO IDE
В этой части показано, как создать веб-сервер для управления двумя выходами с помощью Arduino IDE. Вы можете использовать этот метод для создания другого веб-сервера для удовлетворения ваших потребностей.
Подготовьте IDE Arduino
1. Загрузите и установите Arduino IDE в вашей операционной системе (некоторые старые версии не будут работать).
2. Затем вам необходимо установить дополнение ESP8266 для Arduino IDE. Для этого перейдите в File> Preferences.
3. Введите http://arduino.esp8266.com/stable/package_esp8266com_index.json в поле «Additional boards manager urls», как показано на рисунке ниже. Затем нажмите кнопку «ОК».
4. Перейдите в Инструменты > Платы > Менеджер плат…
5. Прокрутите вниз, выберите пункт меню платы ESP8266 и установите «плату esp8266», как показано на рисунке ниже.
6. Перейдите в Инструменты > Плата и выберите свою плату ESP8266. Затем снова откройте вашу Arduino IDE.
Скопируйте приведенный ниже код в вашу Arduino IDE, но пока не загружайте его. Вам нужно внести некоторые изменения, чтобы он работал у вас.
Вам необходимо изменить следующие две переменные с сетевыми учетными данными, чтобы ваш ESP8266 мог установить соединение с маршрутизатором.
Загрузка скетча
Загрузка скетча в ESP-12E
Если вы используете ESP-12E NodeMCU Kit, загрузка скетча очень проста, поскольку в нем есть встроенный программатор. Подключите вашу плату к компьютеру. Убедитесь, что вы выбрали правильную плату и COM-порт.
Затем нажмите кнопку «Загрузить» в IDE Arduino и подождите несколько секунд, пока не увидите сообщение «Закончена загрузка» в левом нижнем углу.
Загрузка скетча в ESP-01
Загрузка кода в ESP-01 требует установления последовательного соединения между вашим ESP8266 и программатором FTDI, как показано на схематической диаграмме ниже.
В следующей таблице показаны соединения, которые необходимо установить между ESP8266 и программатором FTDI.
ESP8266 | FTDI programmer |
RX | TX |
TX | RX |
CH_PD | 3.3V |
GPIO 0 | GND |
VCC | 3.3V |
GND | GND |
Если у вас новый программатор FTDI, и вам нужно установить драйверы FTDI на ПК с Windows, посетите официальный веб-сайт для получения официальных драйверов. Кроме того, вы можете связаться с продавцом, который продал вам программатор FTDI.
Затем вам просто нужно подключить программатор FTDI к вашему компьютеру и загрузить код в ESP8266.
Schematics
Для построения схемы вам понадобятся следующие детали:
Если вы используете ESP-01, вам также нужен программатор FTDI.
Если вы используете ESP8266-01, используйте следующую схему в качестве справки, но вам нужно изменить назначение GPIO в коде (на GPIO 2 и GPIO 0).
Тестирование веб-сервера
Теперь вы можете загрузить код, и он сразу заработает. Не забудьте проверить, правильно ли выбрана плата и COM-порт, в противном случае вы получите ошибку при попытке загрузки. Откройте последовательный монитор со скоростью 115200 бод.
Нахождение IP-адреса ESP
Нажмите кнопку сброса ESP8266, и он выведет IP-адрес ESP на последовательный монитор
Скопируйте этот IP-адрес, потому что он нужен вам для доступа к веб-серверу.
Доступ к веб-серверу
Откройте браузер, введите IP-адрес ESP, и вы увидите следующую страницу. Эта страница отправляетсяESP8266, когда вы посылаете запрос на IP-адрес ESP.
Тестирование веб-сервера
Давайте проверим веб-сервер. Нажмите кнопку, чтобы включить GPIO 5. ESP получает запрос по URL-адресу / 5 / и включает светодиод 5.
Состояние светодиода также обновляется на веб-странице.
Проверьте кнопку GPIO 4 и убедитесь, что она работает аналогичным образом.
Как работает код
Теперь давайте подробнее рассмотрим код, чтобы увидеть, как он работает, чтобы вы могли изменить его в соответствии со своими потребностями.
Первое, что вам нужно сделать, это включить библиотеку ESP8266WiFi.
Как упоминалось ранее, вам нужно вставить свой ssid и пароль в следующие строки внутри двойных кавычек.
Затем вы устанавливаете свой веб-сервер на порт 80.
Следующая строка создает переменную для хранения заголовка HTTP-запроса:
Затем вы создаете вспомогательные переменные для хранения текущего состояния ваших выходных данных. Если вы хотите добавить больше выходных данных и сохранить их состояние, вам нужно создать больше переменных.
Вам также необходимо назначить GPIO каждому из ваших выходов. Здесь мы используем GPIO 4 и GPIO 5. Вы можете использовать любые другие подходящие GPIO.
Настройка
Теперь перейдем к настройке. Функция setup () запускается только один раз при первой загрузке ESP. Сначала мы запускаем последовательную связь со скоростью 115200 бод для целей отладки.
Вы также определяете свои GPIO как ВЫХОДЫ и устанавливаете их в LOW.
Следующие строки начинают соединение Wi-Fi с WiFi.begin (ssid, пароль), ожидают успешного соединения и печатают IP-адрес ESP в Serial Monitor.
В loop() мы программируем то, что происходит, когда новый клиент устанавливает соединение с веб-сервером.
ESP всегда прослушивает входящих клиентов этой строкой:
Когда запрос получен от клиента, мы сохраним входящие данные. Последующий цикл while будет работать до тех пор, пока клиент остается подключенным. Мы не рекомендуем менять следующую часть кода, если вы точно не знаете, что делаете.
Следующий раздел операторов if и else проверяет, какая кнопка была нажата на вашей веб-странице, и соответственно контролирует результаты. Как мы видели ранее, мы делаем запрос на разные URL в зависимости от кнопки, которую нажимаем.
Например, если вы нажали кнопку GPIO 5 ON, URL-адрес изменится на IP-адрес ESP, а затем / 5 / ON, и мы получим эту информацию в заголовке HTTP. Итак, мы можем проверить, содержит ли заголовок выражение GET / 5 / on.
Если он содержится, код печатает сообщение на последовательном мониторе, изменяет значение переменной output5State на on и включает светодиод.
Это работает аналогично для других кнопок. Поэтому, если вы хотите добавить больше выходных данных, вы должны изменить эту часть кода, чтобы включить их.
Отображение веб-страницы HTML
Следующее, что вам нужно сделать, это создать веб-страницу. ESP отправит в ваш браузер ответ с текстом HTML для отображения веб-страницы.
Веб-страница отправляется клиенту с помощью функции client.println (). Вы должны ввести то, что вы хотите отправить клиенту в качестве аргумента.
Затем следующая строка делает веб-страницу отзывчивой в любом веб-браузере.
Следующий используется для предотвращения запросов, связанных со значком: вам не нужно беспокоиться об этой строке.
Стилизация веб-страницы
Далее у нас есть немного CSS для стилизации кнопок и внешнего вида веб-страницы. Мы выбираем шрифт Helvetica, определяем содержимое, которое будет отображаться в виде блока и выравниваться по центру.
Настройка заголовка веб-страницы
В следующей строке вы устанавливаете заголовок вашей веб-страницы, вы можете изменить этот текст на любой другой.
Отображение кнопок и соответствующего состояния
Затем вы пишете абзац для отображения текущего состояния GPIO 5. Как вы можете видеть, мы используем переменную output5State, поэтому состояние изменяется мгновенно при изменении этой переменной.
Затем мы отображаем кнопку включения или выключения, в зависимости от текущего состояния GPIO.
Мы используем ту же процедуру для GPIO 4.
Закрытие соединения
Наконец, когда ответ заканчивается, мы очищаем переменную заголовка и прекращаем соединение с клиентом с помощью client.stop ().
Завершение
Теперь, когда вы знаете, как работает код, вы можете изменить код, чтобы добавить дополнительные выходные данные или изменить свою веб-страницу. Чтобы изменить свою веб-страницу, вам может понадобиться знание основ HTML и CSS. Вместо управления двумя светодиодами вы можете управлять реле для управления практически любыми электронными приборами.
ЧАСТЬ 2: СОЗДАНИЕ ВЕБ-СЕРВЕРА С ИСПОЛЬЗОВАНИЕМ NODEMCU
В этой части показано, как создать веб-сервер для управления двумя выходами с использованием прошивки NodeMCU и языка программирования LUA. Вы можете использовать этот метод для создания другого веб-сервера.
- как узнать ip bungeecord
- как узнать ip ethermine