Статический IP-адрес для esp8266 на основе шлюза

Я новичок в программировании Arduino. Я хочу, чтобы мой esp8266 получил статический IP-адрес на основе шлюза.

Я имею в виду, что если шлюз 192.168.0.1, то он должен получить 192.168.0.15 в качестве статического IP. А если шлюз 192.168.1.1, то он должен получить 192.168.1.15 в качестве IP-адреса.

, 👍1

Обсуждение

Разве не в этом заключается роль DHCP? Ваша точка доступа / маршрутизатор должны передавать этот IP-адрес. Если вы хотите, чтобы он был статичным, то настройте свой маршрутизатор так, чтобы он выделял статический IP-адрес для MAC-адреса. Если вы получаете шлюз по DHCP, то вы также получите IP-адрес через DHCP., @Majenko

Мне интересно, почему вы хотите это сделать. Вы рискуете столкнуться с IP-коллизиями и сетевыми проблемами, которые трудно диагностировать. Я бы не хотел, чтобы такое устройство было в моей сети; -) (Статическое) резервирование адресов DHCP-это механизм, который вы должны использовать., @StarCat


2 ответа


1

Вы можете либо настроить маршрутизатор на выделение статического IP-адреса на основе MAC-адреса вашего esp8266, либо сначала пройти DHCP-путь, прочитать полученный IP-адрес шлюза, а затем выполнить WiFi.config(), примерно так (непроверено):

WiFi.begin(ssid, password);
IPAddress ip = WiFi.gatewayIP();
IP[3] = 15;
IPAddress dns(8, 8, 8, 8);
WiFi.config(ip, WiFi.gatewayIP(), dns, WiFi.subnetMask());

Это немного хитро, и не очень красиво, и вы не можете настроить DNS так, как это предусмотрено DHCP, потому что по какой-то глупой причине getDNS () нет, следовательно, по какой-то глупой причине вы используете Google DNS.

Обратите внимание, что при этом вы рискуете установить IP-адрес esp8266 на адрес, уже занятый другим устройством на том же маршрутизаторе.

,

0

Вот идея, которую я еще не реализовал.

  1. Подключитесь к Wi-Fi и позвольте маршрутизатору назначить ему IP-адрес.
  2. После получения IP-адреса от маршрутизатора сохраните этот IP-адрес в EEPROM
  3. Теперь в следующий раз, когда вы захотите подключиться к Wi-Fi, используйте этот код.
// Установите свой статический IP-адрес
IPAddress local_IP(192, 168, 1, 184);
// Установите IP-адрес вашего шлюза
IPAddress gateway(192, 168, 1, 1);

IPAddress subnet(255, 255, 0, 0);
IPAddress primaryDNS(8, 8, 8, 8);   //по желанию
IPAddress secondaryDNS(8, 8, 4, 4); //по желанию

if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
    Serial.println("STA Failed to configure");
  }
  
  // Подключаемся к сети Wi-Fi с SSID и паролем
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

загрузить сохраненный IP-адрес, шлюз и другую информацию, сохраненную в eeprom, перед переходом к функции wifi.config.

,