Статический IP-адрес для esp8266 на основе шлюза
Я новичок в программировании Arduino. Я хочу, чтобы мой esp8266 получил статический IP-адрес на основе шлюза.
Я имею в виду, что если шлюз 192.168.0.1, то он должен получить 192.168.0.15 в качестве статического IP. А если шлюз 192.168.1.1, то он должен получить 192.168.1.15 в качестве IP-адреса.
@Avinash VK, 👍1
Обсуждение2 ответа
Вы можете либо настроить маршрутизатор на выделение статического 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 на адрес, уже занятый другим устройством на том же маршрутизаторе.
Вот идея, которую я еще не реализовал.
- Подключитесь к Wi-Fi и позвольте маршрутизатору назначить ему IP-адрес.
- После получения IP-адреса от маршрутизатора сохраните этот IP-адрес в EEPROM
- Теперь в следующий раз, когда вы захотите подключиться к 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.
- Несколько клиентских серверов через Wi-Fi
- ESP8266 TCP-соединение WiFiClient проблема
- ESP8266 отправляет TCP HEX-пакет из 4 символов
- Пример класса ESP8266 ASyncTCP
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- ESP8266 — Как получить многоадресный пакет UDP?
- Запрещенные символы в TCP/IP
- Esp8266-01 AT-команды возвращаются частично
Разве не в этом заключается роль DHCP? Ваша точка доступа / маршрутизатор должны передавать этот IP-адрес. Если вы хотите, чтобы он был статичным, то настройте свой маршрутизатор так, чтобы он выделял статический IP-адрес для MAC-адреса. Если вы получаете шлюз по DHCP, то вы также получите IP-адрес через DHCP., @Majenko
Мне интересно, почему вы хотите это сделать. Вы рискуете столкнуться с IP-коллизиями и сетевыми проблемами, которые трудно диагностировать. Я бы не хотел, чтобы такое устройство было в моей сети; -) (Статическое) резервирование адресов DHCP-это механизм, который вы должны использовать., @StarCat