ESP32 HTTPClient соединение отказано при использовании статического IP-адреса - PullRequest
0 голосов
/ 08 марта 2019

Приведенный ниже эскиз отлично работает при использовании DHCP, но при использовании статического IP-адреса HTTPClient.begin () всегда возвращает отказ в соединении.Вот как проверить эту проблему ... Если просто включить строку:

WiFi.config(local_IP, gateway, subnet);

, HTTPClient не будет работать, но если эта строка закомментирована, она подключится к серверу и вернет строку просто отлично.Я видел этот вопрос несколько раз, но так и не получил хорошего ответа.Есть ли способ заставить HTTPClient работать со статическим IP?Использование библиотеки ESP32 WebServer с DHCP или фиксированным IP прекрасно работает, только эта библиотека HTTPClient не работает как с фиксированным, так и с DHCP.Поведение одно и то же, используется ли оно на ESP32 или ESP8266.Спасибо за любую помощь.

#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>

#define USE_SERIAL Serial

WiFiMulti wifiMulti;
IPAddress local_IP(192, 168, 1, 111);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

void setup() {

  USE_SERIAL.begin(115200);

  WiFi.begin("networkSSID", "myPassword");

  WiFi.config(local_IP, gateway, subnet);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

}

void loop() {

  if (WiFi.status() == WL_CONNECTED) {

    HTTPClient http;

    http.begin("http://www.mocky.io/v2/5c7ddbb13100006c0037600d");

    int httpCode = http.GET();

    if (httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);

      if (httpCode == HTTP_CODE_OK) {
        String payload = http.getString();
        USE_SERIAL.println(payload);
      }
    } else {
      USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
    }

    http.end();
  }

  Serial.println(WiFi.localIP());
  delay(5000);

}

1 Ответ

0 голосов
/ 09 марта 2019

Я не могу быть уверен на 100% (сейчас не могу проверить), но похоже, что вам не хватает разрешения DNS.

Попробуйте это

...
IPAddress local_IP(192, 168, 1, 111);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(8, 8, 8, 8); // Google DNS

void setup() {

  USE_SERIAL.begin(115200);

  WiFi.begin("networkSSID", "myPassword");

  WiFi.config(local_IP, gateway, subnet, dns);
  ...
...