为什么静态IP地址的ESP32无法连接互联网但可以正常ping通?

问题描述 投票:0回答:1

我已经将 ESP32 连接到 WIFI,但是这个 WIFI 必须固定 IP 地址、网关、子网掩码、DNS 和 MAC。因此,我分配它们并使用两个代码进行测试。第一个是使用 ping 库,第二个是使用对 Google 的 http 请求。

Ping 码

#include <WiFi.h>
#include <ESP32Ping.h>
 
const char* ssid = "test";
const char* password =  "test";
 
IPAddress staticIP(172, 16, 116, 90);
IPAddress gateway(172, 16, 116, 254);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(172, 17, 10, 1);
    
void setup(){
  Serial.begin(115200);
 
  if (WiFi.config(staticIP, gateway, subnet, dns, dns) == false) {
    Serial.println("Configuration failed.");
  }
    
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("Connecting...\n\n");
  }
 
  Serial.print("Local IP: ");
  Serial.println(WiFi.localIP());
  Serial.print("Subnet Mask: ");
  Serial.println(WiFi.subnetMask());
  Serial.print("Gateway IP: ");
  Serial.println(WiFi.gatewayIP());
  Serial.print("DNS 1: ");
  Serial.println(WiFi.dnsIP(0));
  Serial.print("DNS 2: ");
  Serial.println(WiFi.dnsIP(1));
   
  bool success = Ping.ping("www.google.com", 3);
  
  if(!success){
    Serial.println("\nPing failed");
    return;
  }
  
  Serial.println("\nPing successful.");
}
    
void loop(){}

Http请求代码

#include <WiFi.h>
#include <HTTPClient.h>
  
const char* ssid = "test";
const char* password =  "test";

IPAddress staticIP(172, 16, 116, 90);
IPAddress gateway(172, 16, 116, 254);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(172, 17, 10, 1);

void setup() {
  
  Serial.begin(115200);

if (WiFi.config(staticIP, gateway, subnet, dns, dns) == false) {
    Serial.println("Configuration failed.");
  }
  
  delay(4000);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  
  Serial.println("Connected to the WiFi network");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println("MAC address: ");
Serial.println(WiFi.macAddress());
  
}
  
void loop() {
  
  if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
  
    HTTPClient http;
  
    http.begin("www.google.com"); //Specify the URL
    int httpCode = http.GET();                                        //Make the request
  
    if (httpCode > 0) { //Check for the returning code
  
        String payload = http.getString();
        Serial.println(httpCode);
        
      }
  
    else {
      Serial.println("Error on HTTP request");
    }
  
    http.end(); //Free the resources
  } else {
    Serial.println("WiFi lost");
  }
  
  delay(10000);
  
}

我尝试后,第一个输出正常。但第二个似乎只能连接一次Wi-Fi,但失去连接后就无法发出请求。我很困惑请帮忙。 它也无法通过 mqtt 连接。

输出第一个代码

输出第2段代码

httprequest ping esp32 android-wifi static-ip-address
1个回答
0
投票

更改 DNS 地址。 IP 地址 dns(172, 17, 10, 1);到 IP 地址 dns(8, 8, 8, 8);

© www.soinside.com 2019 - 2024. All rights reserved.