Почему HTTPS-запросы работают с динамическим IP-адресом, а не со статическим IP-адресом

Я работаю над проектом автоматизации помещения. Я подключил плату ESP8266 по Wi-Fi через домашний роутер. Я отправляю HTTPS-запрос с ESP8266. При подключении с использованием динамически назначаемого DHCP-IP-адреса возвращается корректный ответ 200, но при использовании статического IP-адреса возвращается ответ -1.

Мой код:

    Rui Santos
    Complete project details at https://randomnerdtutorials.com  
  *********/

  // Load Wi-Fi library
  #include<ESP8266WiFi.h>
  #include<ESP8266HTTPClient.h>
  #include<WiFiClientSecureBearSSL.h>

  using namespace std;

  // Replace with your network credentials
  const char* ssid     = "<router_ssid>";
  const char* password = "<router_password>";

  void setup() {
    Serial.begin(9600);
    Serial.println("started");

    // //Configure static IP
    // IPAddress staticIP(192,168,10,55);
    // IPAddress gateway(192,168,10,1);
    // IPAddress subnet(255,255,255,0);
    // if(!WiFi.config(staticIP,gateway,subnet)){
    //   // Serial.println("IP Configuration failed");
    // }

    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      // Serial.print(".");  
      digitalWrite(LED_BUILTIN,HIGH);
      delay(500);
      // Serial.print(".");  
      digitalWrite(LED_BUILTIN,LOW);
    }
    
    Serial.println("connected");
    digitalWrite(LED_BUILTIN,LOW);

    // set the http client
    BearSSL::WiFiClientSecure client;

    client.setInsecure();
    HTTPClient https;

    while(https.begin(client,"yandex.com",443)){
      Serial.println("client began");
      
      int code = https.GET();

      if(code == 200){
        Serial.println("code 200");
      }
      else{
        Serial.println("failed");
        Serial.println(code);
      }
      delay(5000);
    }
  }

  void loop(){
}

Когда я раскомментирую приведенные выше строки, для статического IP-адреса статус возвращается к -1. Пожалуйста, подскажите, в чем может быть проблема?

Примечание: я включил переадресацию портов на своём маршрутизаторе для того же статического IP-адреса с портом 5555. Может ли это создавать помехи для HTTPS-соединения?

, 👍0

Обсуждение

вы не указали IP-адрес DNS-сервера, поэтому он не может оценить имя сервера, @Juraj


1 ответ


2

У вас отсутствует конфигурация DNS-серверов. Эта информация предоставляется DHCP и сообщает ESP, как преобразовывать доменные имена в IP-адреса.

IPAddress staticIP(192,168,10,55);
IPAddress gateway(192,168,10,1);
IPAddress subnet(255,255,255,0);
IPAddress primaryDNS(8, 8, 8, 8);
IPAddress secondaryDNS(8, 8, 4, 4);
if(!WiFi.config(staticIP,gateway,subnet, primaryDNS,secondaryDNS )){
  // Serial.println("IP Configuration failed");
}

Используются DNS-серверы Google. Обратите внимание, что ваш маршрутизатор, как правило, также предоставляет DNS-сервисы. Вы можете выбрать свой маршрутизатор в качестве IP-адреса для DNS-сервера, что увеличит скорость, поскольку уменьшит задержку при обработке данных в DNS-кэше.

,

Я выполнил добавления, но соединение по-прежнему не устанавливается и возвращается -1., @Ammar Mujtaba Tariq