Клиент Arduino не может подключиться к серверу имени хоста - PullRequest
0 голосов
/ 25 октября 2019

1. Проблема:

  • Я пытаюсь подключить два IoT Arduino Nano33 через локальный WiFi, используя имя хоста.
  • Я пытаюсь избавиться от необходимости устанавливать статические IP-адреса.
  • При подключении с использованием IP-адресов вся программа работает идеально.
  • Однако, когда я пытаюсь подключиться кВеб-сервер Arduino, используя имя хоста, клиент не может подключиться. (кроме случаев, например, при подключении к google.com)

2. Я пробовал два метода, оба не работают:

Клиентский метод 1:

char serverName[] = "ArduinoWebServer";
//char serverName[] = "google.com";         // if I use this as the serverName the client connects successfully

while (!client.connect(serverName,iPort)){
  Serial.println("Server not found");
  delay(5000);
}
if (client.connect(serverName,iPort)){
  Serial.println("Connected to Server");
}

Клиентский метод 2:

  IPAddress ipServer;
  int err = WiFi.hostByName(serverName, ipServer) ;
  if(err == 1){
        Serial.print("Ip address: ");
        Serial.println(ipServer);
  } else {
        Serial.print("Error code: ");
        Serial.println(err);
  }

  while (!oClient.connect(ipServer,iPort)){
    Serial.println("Server not found");
    delay(5000);
  }
  if (oClient.connect(ipServer,iPort)){
    Serial.println("Connected to Server");
  }

Код сервера:

  WiFi.setHostname("ArduinoWebServer");
  //WiFi.config(ipServer);                // when using this instead of WiFi.setHostname the code works
  while (status != WL_CONNECTED){
    status = WiFi.begin(cSSID, cPass);

    if (status != WL_CONNECTED){
      Serial.println("Network not found, waiting to reconnect");
      delay(5000);
    }
  }
  oServer.begin();

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 25 октября 2019

Ваши устройства Arduino могут достигать google.com , поскольку ваш локальный DNS-сервер знает, как преобразовать это имя хоста в IP-адрес. Но ваш локальный DNS-сервер не знает о имени хоста, которое вы назначили своему веб-серверу.

mDNS был разработан для решения вашей конкретной проблемы.

При этом используется многоадресная рассылка для разрешения доменов, заканчивающихся на .local

Реализация ESP8266 имеет пример кода на https://tttapa.github.io/ESP8266/Chap08%20-%20mDNS.html

Веб-сервер настроит ответчик mDNS, используя:

MDNS.begin("ArduinoWebServer")

Клиентызатем можно подключиться, используя имя хоста ArduinoWebServer.local

...