Вывести (получить) в монитор порт ip адрес esp8266

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

Доброго времени суток. Всего несколько дней занимаюсь Ардуино. Возможно не с той стороны зашел, но начал с ESP8266. Перешил её на работу с Arduino IDE. Пользуюсь версией 2 (портативной).

Не могу понять, как получить, узнать, и напр, вывести в порт, сетевой адрес, который получает esp8266 при подключении по dhcp к точке доступа. Если из esp8266 создать точку доступа, то айпишник знаю как получить. Вот так:

#include <ESP8266WiFi.h>                                                // Библиотека для создания Wi-Fi подключения (клиент или точка доступа)
#include <WiFiClient.h>
#include <ESP8266WebServer.h>                                           // Библиотека для управления устройством по HTTP (например из браузера)
#include <FS.h>                                                         // Библиотека для работы с файловой системой
#include <ESP8266FtpServer.h>                                           // Библиотека для работы с SPIFFS по FTP

const char *ssid = "MyESP";                                             // Название генерируемой точки доступа

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);                                                   // Инициализируем вывод данных на серийный порт со скоростью 9600 бод
  WiFi.softAP(ssid);                                                    // Создаём точку доступа  
  Serial.print("\nМой IP для подключения через Web-Browser или по FTP: ");          // Выводим на монитор серийного порта сообщение о том, что сейчас будем выводить локальный IP
  Serial.println(WiFi.softAPIP());                                      // Выводим локальный IP-адрес ESP8266
  Serial.println("\n");
}

void loop() {
  // put your main code here, to run repeatedly:

}

А вот как вывести в порт или вообще получить адрес, присвоенный плате в случае, если плата выступает как клиент? Делаю так:

#include <ESP8266WiFi.h>                                                // Библиотека для создания Wi-Fi подключения (клиент или точка доступа)
#include <WiFiClient.h>
#include <ESP8266WebServer.h>                                           // Библиотека для управления устройством по HTTP (например из браузера)
#include <FS.h>                                                         // Библиотека для работы с файловой системой
#include <ESP8266FtpServer.h>                                           // Библиотека для работы с SPIFFS по FTP

const char* ssid = "";
const char* password = "";

void setup() {
  Serial.begin(9600);                                                   // Инициализируем вывод данных на серийный порт со скоростью 9600 бод
  while (!Serial) {
  // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  }

  WiFi.begin(ssid, password);                                           // Инициализируем подключение к указанной вайфай сети
  Serial.print(WiFi.localIP());                                         // Пробую вывести адрес платы
}

void loop() {
  // put your main code here, to run repeatedly:

}

Но выдает:

��(IP unset)

 

И ещё. Вроде прочитал в правилах форума, что нужно делать нумерацию строк. Но во вставке кода я не нашел этой функции. Номера строк пишутся руками? Или я упустил какую-то кнопку форматирования? Или не правильно прочитал правила форума?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

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

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ты реально считаешь, что как только ты постучался в роутер, то сразу перешёл в состояние оллинклюзифф ?

Попробуй ради приличия сделать , что то типа этого:

while (WiFi.status() != WL_CONNECTED) delay(500);

 

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

Kakmyc пишет:
Т.е. ты реально считаешь, что как только ты постучался в роутер, тебе сразу и подключение организовали и IP выдали ? По коду выглядит именно так.

Вообще-то я даже организовал задержку. Но в целом адрес выдается сразу. Проверяется пингом и мониторингом на самом роутере. Там в списке dhcp клиентов он появляется сразу.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

2Andycat: Клиенту не нужно, нужно программисту.
Чтоб потом знать в какой ip долбить.

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

andycat пишет:

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

Во-первых, для общего развития. Во-вторых, есть другая сторона проблемы. Если повесить несколько ESP8266 на один роутер, тоесть в одну сеть, у них начинаются конфликты. У них у всех один мак и одно имя. Так что дополнительно хочу научиться менять маки и имя клиента. В-третьих, поскольку на плату прошиваю поддержку фтп, вэбсервер, то нужно знать, на какой адрес заходить

Kakmyc
Offline
Зарегистрирован: 15.01.2018

DyadyaGenya пишет:

Kakmyc пишет:
Т.е. ты реально считаешь, что как только ты постучался в роутер, тебе сразу и подключение организовали и IP выдали ? По коду выглядит именно так.

Вообще-то я даже организовал задержку. Но в целом адрес выдается сразу. Проверяется пингом и мониторингом на самом роутере. Там в списке dhcp клиентов он появляется сразу.

Ну да конечно.
Ради прикола , добавь в мой цикл while кроме delay() , скажем: Serial.print("waiting...");
Ну и для частоты эксперимента пусть будет delay(50);
Потом отпишись, как "сразу" он начинает работать.

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

Kakmyc пишет:

Ты реально считаешь, что как только ты постучался в роутер, то сразу перешёл в состояние оллинклюзифф ?

Попробуй ради приличия сделать , что то типа этого:

while (WiFi.status() != WL_CONNECTED) delay(500);

 

Да, так получилось. А я думал, что нужно ждать порт, а на до было ждать подключения.

Только вот выводит ещё и какие-то кракозябры перед айпишником:

��адрес

Не подскажите, что это и откуда берется? И как его прочитать?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Это на другой скорости.
Там чип wifi с чипом МК (которые в общем корпусе) общается по uart.
Поиграй настройками скорости порта в мониторе, когда совпадут увидишь что он пишет. Обычно это режим и состояние.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Что то типа этого:(скорость у меня 74880)

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 3456, room 16 
tail 0
chksum 0x84
csum 0x84
va5432625
~ld

 

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

Kakmyc пишет:
DyadyaGenya пишет:

Kakmyc пишет:
Т.е. ты реально считаешь, что как только ты постучался в роутер, тебе сразу и подключение организовали и IP выдали ? По коду выглядит именно так.

Вообще-то я даже организовал задержку. Но в целом адрес выдается сразу. Проверяется пингом и мониторингом на самом роутере. Там в списке dhcp клиентов он появляется сразу.

Ну да конечно. Ради прикола , добавь в мой цикл while кроме delay() , скажем: Serial.print("waiting..."); Ну и для частоты эксперимента пусть будет delay(50); Потом отпишись, как "сразу" он начинает работать.

Да уж )))) не подумал, что это для человека все сразу происходит )))

При 500 вывело через 7 пустых, при 50 через 76 пустых

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

Kakmyc пишет:

Что то типа этого:(скорость у меня 74880)

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 3456, room 16 
tail 0
chksum 0x84
csum 0x84
va5432625
~ld

 

Попробовал менять скорости. Вроде все перебрал, выше 115200 решил не идти. На всех скоростях пишет крякозябры, только разной длины и разного вида. В самом скетче могу прописать подсказанную вами скорость, а вот в настроках монитора порта такой нет. Руками не получается прописать. Если прописать в скетче скорость, а в настройках порта оставить какую-то другую, то только хуже. Вообще ничего не читается

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

DyadyaGenya пишет:

поскольку на плату прошиваю поддержку фтп, вэбсервер, то нужно знать, на какой адрес заходить

это понятно, но подумайте над тем что устройства на ESP8266 будут автономными, в консоли у них адрес посмотреть не сможете, только на роутере, соответственно получать его нет смысла. Ну а если уж во внешней сети какому либо сервису/серверу необходим адрес, то после получения его локальным МК, он отправляется например на некий сервер для полноценного обмена данными

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

Kakmyc пишет:
2Andycat: Клиенту не нужно, нужно программисту. Чтоб потом знать в какой ip долбить.

Не подскажите, как самому прописать мак и имя клиента? Или лучше начать новую тему?

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

andycat пишет:

DyadyaGenya пишет:

поскольку на плату прошиваю поддержку фтп, вэбсервер, то нужно знать, на какой адрес заходить

это понятно, но подумайте над тем что устройства на ESP8266 будут автономными, в консоли у них адрес посмотреть не сможете, только на роутере, соответственно получать его нет смысла. Ну а если уж во внешней сети какому либо сервису/серверу необходим адрес, то после получения его локальным МК, он отправляется например на некий сервер для полноценного обмена данными

Так не обязательно в консоли. Присвоил переменной и передал куда надо в органы. И гораздо проще узнать его именно с ESP, чем заходить на простенький роутер типа тплинка или какой-нибудь нонейм. Это ж не микротики, с которых можно получить данные.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

DyadyaGenya пишет:

Kakmyc пишет:
2Andycat: Клиенту не нужно, нужно программисту. Чтоб потом знать в какой ip долбить.

Не подскажите, как самому прописать мак и имя клиента? Или лучше начать новую тему?

Никогда такой нужды не испытывал

sadman41
Offline
Зарегистрирован: 19.10.2016

DyadyaGenya пишет:

Не подскажите, как самому прописать мак и имя клиента? 

DHCP

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Пишут, что вот так можно:
wifi_set_macaddr(STATION_IF, &newMACAddress[0]);

Ну соответвенно ссылка должна быть на одноименный массив типа:
uint8_tarr[6]={aa,bb,cc,xx,yy,zz};(48бит)
И эту процедуру нужно производить при каждой перезагрузке

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

sadman41 пишет:

DyadyaGenya пишет:

Не подскажите, как самому прописать мак и имя клиента? 

DHCP

Хоть я и начал новую тему, но может подскажите, какую именно библиотеку вы имели ввиду?

sadman41
Offline
Зарегистрирован: 19.10.2016

DyadyaGenya пишет:

sadman41 пишет:

DHCP

Хоть я и начал новую тему, но может подскажите, какую именно библиотеку вы имели ввиду?

Я имел в виду, что не нужно прописывать MAC, он уникален от фабрики. На DHCP-сервере заводится lease и ESP всегда получает один и тот же IP.

Имя клиента сети WiFi устанавливается с помощью WiFi.setHostname(...);
 
Kakmyc
Offline
Зарегистрирован: 15.01.2018

sadman41 пишет:

Я имел в виду, что не нужно прописывать MAC, он уникален от фабрики.

На форумах утверждают обратное.
Точнее описываются случаи, когда из 10 заказанных железок, у всех 10 был один и тот же МАС

mixail844
Offline
Зарегистрирован: 30.04.2012

sadman41 пишет:

Я имел в виду, что не нужно прописывать MAC, он уникален от фабрики. На DHCP-сервере заводится lease и ESP всегда получает один и тот же IP.

Имя клиента сети WiFi устанавливается с помощью WiFi.setHostname(...);
 

не обязательно . 
например если покупать wiznet w5500 как голый чип , то нужно отдельно покупать и MAC адрес 
если покупать wiznet w5500 в качестве модуля от adafruit то там MAC адрес уже предоставляется
 
то же самое может быть и с esp. а китайцы что бы не заморачиваться , всем шъют один адрес 
sadman41
Offline
Зарегистрирован: 19.10.2016

Kakmyc пишет:
sadman41 пишет:

Я имел в виду, что не нужно прописывать MAC, он уникален от фабрики.

На форумах утверждают обратное. Точнее описываются случаи, когда из 10 заказанных железок, у всех 10 был один и тот же МАС

Я читал заявления об уникальности. Значит закончилось выкупленное адресное пространство. Или подпольная фабрика работает. 

sadman41
Offline
Зарегистрирован: 19.10.2016

mixail844 пишет:

sadman41 пишет:

Я имел в виду, что не нужно прописывать MAC, он уникален от фабрики. На DHCP-сервере заводится lease и ESP всегда получает один и тот же IP.

Имя клиента сети WiFi устанавливается с помощью WiFi.setHostname(...);
 

не обязательно . 
например если покупать wiznet w5500 как голый чип , то нужно отдельно покупать и MAC адрес 
если покупать wiznet w5500 в качестве модуля от adafruit то там MAC адрес уже предоставляется
О Wiznet речи не шло. Они никогда не заявляли о прошитом MAC.
 
Вообще, насколько я в курсе, в сетевых чипах MAC не прошивается никогда. Они продаются на вес и MAC назначает та контора, которая готовое изделие выпускает. Хранится MAC в какой-нить флешке, из которой копируется в чип при включении устройства.
 
Дешманские Wiznet-шилды (и ENC тоже) с MAC-ами я не встречал. Читал, что шилд на 5200 что ли... был с назначенным MAC и его сам визнет клепал. Но могу уже путать за давностью лет. У меня есть нативный визнетовский на W5100 - там никакого мака нет.
 
 
DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

sadman41 пишет:

Я имел в виду, что не нужно прописывать MAC, он уникален от фабрики. На DHCP-сервере заводится lease и ESP всегда получает один и тот же IP.

 
У меня 3 китайских нонейм платы и 4-я WeMos D1. У первых трех маки одинаковые, у вемоса отличный от них.
 

sadman41 пишет:

Имя клиента сети WiFi устанавливается с помощью WiFi.setHostname(...);

Спасибо, работает

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ни одной esp c дублированным маком не покупал, где вы их такие берёте