Почему 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-соединения?
1 ответ
У вас отсутствует конфигурация 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
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
- esp8266 не отвечает на AT-команды
- Разница между этими двумя платами NodeMCU?
вы не указали IP-адрес DNS-сервера, поэтому он не может оценить имя сервера, @Juraj