我已经将 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段代码
更改 DNS 地址。 IP 地址 dns(172, 17, 10, 1);到 IP 地址 dns(8, 8, 8, 8);