Несогласованное подключение через диспетчер WiFi в ESP8266 - PullRequest
0 голосов
/ 07 мая 2020

Я столкнулся со специфической проблемой. Приведенный ниже фрагмент кода подключается к новой сети Wi-Fi. В программе нет жестко заданного ssid или пароля . Я использую модули AsyncWifiManager и AsyncWebServer . Когда я подключаюсь к домашнему маршрутизатору Wi-Fi, предоставляя ssid и пароль на портале автоподключения, NodeMCU подключается и сервер работает нормально. Но всякий раз, когда я меняю Wi-Fi, подключаюсь к точке доступа мобильного телефона, сервер не работает, хотя я получаю локальный IP-адрес в Serial Monitor.

#include <ESP8266WiFi.h>          
#include <ESPAsyncTCP.h>          

#include <ESPAsyncWebServer.h>     
#include <ESPAsyncWiFiManager.h> 

#include <FS.h>
#include <Wire.h>

   AsyncWiFiManager wifiManager(&server,&dns);

  // To clean previous settings. Use one time, then comment
  // wifiManager.resetSettings();



  // set custom static ip for portal
  IPAddress staticIP(192,168,0,20);  //ESP static ip
  IPAddress gateway(192,168,0,1); //IP Address of your WiFi Router (Gateway)
  IPAddress subnet(255,255,255,0); //Subnet mask
  wifiManager.setSTAStaticIPConfig(staticIP, gateway, subnet);


// Open WiFi Setup portal
  wifiManager.autoConnect();

  Serial.println("Connecting to WiFi..");


  // Print ESP32 Local IP Address
  Serial.println(WiFi.localIP());


  WiFi.begin();


 while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
}

Я программирую плату NodeMCU через Arduino IDE .

1 Ответ

1 голос
/ 08 мая 2020

Поскольку ваш код использует параметры исправления для IP / подсети / шлюза, вам необходимо соответствующим образом настроить различные точки доступа или выбрать один из следующих вариантов при подключении сервера ESP8266 к различным точкам доступа:

  • всегда находясь в одной и той же сети / подсети (все точки доступа являются частью локальной сети), вы можете использовать фиксированные IP-адреса для всех устройств, независимо от точки доступа, к которой вы подключаетесь
  • Если вы не хотите использовать указанное выше (= исправить IP-адрес для всех устройств): настройте DHCP-сервер так, чтобы он всегда давал одинаковые IP-адреса для узлов NodeMCU на основе их адресов MA C.
  • Вы используете mDNS и даете ESP8266 фиксированное имя и вызываете через http://nyPreferredESP.local (несмотря на то, что IP-адрес меняется) и используйте на своем Android телефоне что-нибудь вроде этого APP
  • Если вы хотите работать со сменой шлюзов (Устройства не в той же сети / su bnet, доступ через inte rnet): для этого потребуется что-то более надежное. Используйте службу DNS Dynami c вместе с доменным именем. Dynami c DNS обновит ваши записи DNS почти в реальном времени, если ваш адрес шлюза изменится. Пример здесь

Сложность решения обусловлена ​​тем, что всегда в одной и той же сети / su bnet и фиксированный шлюз или все (кроме MA C -адреса и имя устройства являются фиксированными), а остальное может быть изменено. Прочтите основы настройки локальной сети здесь

...