连接ESP32到AWS IoT时无法连接到Wifi



昨晚我试图用一些假数据将我的ESP32连接到AWS,但它没有连接,因为它显示我的IP地址为0。两天前,我确实从我的ESP发送了一些假数据到AWS,它成功地将我的数据上传到AWS物联网核心。我用的是2.4GHz网络。但是现在它没有上传我的数据。这可能是无法连接到我的wifi问题吗??为什么会这样?为什么一开始在AWS云上上传数据的时候突然不上传了。我需要做一些调整还是我的ESP32出现了故障?


#include <WiFiClientSecure.h>
#include <PubSubClient.h> 
const char* ssid = "Mechatron";
const char* password = "IoTworld";
const char* awsEndpoint = "a8o60o3sv2p1u5-ats.iot.us-east-1.amazonaws.com"; 
// xxxxxxxxxx-certificate.pem.crt
const char* certificate_pem_crt = 
"-----BEGIN CERTIFICATE-----n" 
"FIIDWTCCAkGgAwIBAgIUMAH+oQhNNicbXAXujxiVFPYVYA8wDQYJKoZIhvcNAQELn" 
"BQAwTTFLMEkGA1UECwxCQW1hem9uIFdlYiBTZXJ2aWNlcyBPPUFtYXpvbi5jb20gn" 
"SW5jLiBMPVNlYXR0bGUgU1Q9V2FzaGluZ3RvbiBDPVVTMB4XDTIyMDUxNzA2MTM0n" 
"NFoXDTQ5MTIzMTIzNTk1OVowHjEcMBoGA1UEAwwTQVdTIElvVCBDZXJ0aWZpY2F0n" 
"ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTDfScg36QoISlzxf8yn" 
"ta2Bggc5dB8XnGAZOLQN8OdroUHdcJDp7RQQ2VeOOCzXq/QU4rN4ygag6x0dackyn" 
"TIn39jFKDA9JKVPYfdxKbIHCjjgQJtvAf4em10eKThgewQhkVD9QFIgqIAxbqvq4n" 
"6jA9O+LEHpb0bxPJy27OwiSLIM0IOoIzMULT9rifqNmFUd0PTMr7Ce14YibON47in" 
"l/WDzwtnrDdPt6zPNRE45E43PAX7pB/qMhyJrSHoDVjwJV/8ktSnlZ9AViLFL4pun" 
"sIOALGx+0obyAadqOTMiD5gK4cVd43vZ9Pv31KsZPeIGL3ofYqBU888W1dcOC2qXn" 
"fCECAwEAAaNgMF4wHwYDVR0jBBgwFoAUK7f8+C6ZW2vBKKNf6Ivh6VdnbRAwHQYDn" 
"VR0OBBYEFKGplO5nt63sDAuMKB7opvHsRq/5MAwGA1UdEwEB/wQCMAAwDgYDVR0Pn" 
"AQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IBAQDDFpp/SMvYyL6wqkWnrd8hfb0gn" 
"QSx7WM+FS5i/PjiRYSj3Ems6epm+wZBFqZyBRXS7imgXqPRpy7l5RPX0atHArF2On" 
"6NVVpIsgZcg6nBKkWv9/NrICm0Vg/pFSe+cUPQzE2B3txeiurLFlQbHmkLneQbfyn" 
"EY1eGqEUmXXNCdefr9EDFeqGt+Iq3OaqybeZDZFbnl8eEOhR3DfOE8d6Nd8Igoqln" 
"Sh6u917emTu+JJCWJckg7K0BSZguyZUV6NoBvx+GJVeZ5VSmi9mehbhmJHRi7Nv1n" 
"5x3N3T9QdbM5Yrjl3TvwovVEqgMcspux/HMAMDVnuNaDqTx9JY+ulG7JKMfDn" 
"-----END CERTIFICATE-----n";
// xxxxxxxxxx-private.pem.key
const char* private_pem_key = 
"-----BEGIN RSA PRIVATE KEY-----n" 
"HIIEogIBAAKCAQEAtMN9JyDfpCghKXPF/zK1rYGCBzl0HxecYBk4tA3w52uhQd1wn" 
"kOntFBDZV444LNer9BTis3jKBqDrHR1pyTJMiff2MUoMD0kpU9h93EpsgcKOOBAmn" 
"28B/h6bXR4pOGB7BCGRUP1AUiCogDFuq+rjqMD074sQelvRvE8nLbs7CJIsgzQg6n" 
"gjMxQtP2uJ+o2YVR3Q9MyvsJ7XhiJs43juKX9YPPC2esN0+3rM81ETjkTjc8Bfukn" 
"H+oyHImtIegNWPAlX/yS1KeVn0BWIsUvim6wg4AsbH7ShvIBp2o5MyIPmArhxV3jn" 
"e9n0+/fUqxk94gYveh9ioFTzzxbV1w4Lapd8IQIDAQABAoIBADSroZP9KC0U5FTHn" 
"vzGU/QsJaXHhc8x7fL0jnDoatc84tUwT0fDnuITYQ/wXHJc0YI5GZ6gT0goMaXWan" 
"VHCjj1nEPqAuC0WI89nSgxnlNai5n+cGDcyKUp6cJq5ZxleQ3n4rfcDU/KaQX7Y6n" 
"H5/esZ5MuV5h9ufVYWhKrFQlOryasALN3qprTD+dvfPYB8nezDmSuTKul6WnBABun" 
"rT1HF3IhZiJEjnNI8nZB8W/ACAM2FKzbQaFrdDQ7Y96L9KXAsvVLYFsHJBre59dan" 
"bebIuHwZTG+/2AINKApIMtBnlLCmhPM+/QQR7k+E/y9JrWK4qDudoBlDR9PCMJPIn" 
"6tkfvIECgYEA4F0x5nhGh+qsGiUwhBq+LD3czCYjMBfhJQoThyGiNWnvSbgJk+ANn" 
"d0UBQjR25fkpYpYjevM/2GKZ0q3RQsl5wtGeaissksvnI5Yd61hCHL8VVYN1FXZQn" 
"lq+PX+kEFtDrvn3OX8xZD6mYHwgThTEvVKBQorut1Gsxat40m1c2FvUCgYEAzkB2n" 
"Um0aJv/dP/khxPKY8uOHMOLxPMRXgvAUDsBq5h8kOqHWM+fWLRyQm27PMCit3UIon" 
"Zv5foXqqke2aV1qEiDoX8XNvObWZuWILr9s2/XLioLx5EJXevET2c0n6TBspJN1Vn" 
"Kw7cWJfu5wU/5OzRIZOyR3gSrWYfDxaJcw0gHP0CgYB9hKW+Aduzfh36IoQZ47wwn" 
"lAtKSqu05CcYyaJTHwXYTAOKgmMZT2c5Kmmh2CgMUHBOrx/6UMuPCtpzerpvWre7n" 
"vfmZ+71cAqa0ye7DEwUpf903keuWrjI3ms/gIEEhYpAAafFitre8g2yPL7177iBEn" 
"f8ucvtJo2+8xkk5r+UZRYQKBgCr6E62pPkHSHvAtoXPAeU5jStBM+aeH4hROol9Kn" 
"iPXal1oATvoR3PcZdKhuto16bIAmQPT1HEgxn0k5EWgSXHtmX4bYXtzPknCmlXjXn" 
"XOYDAmYr364tDHR+ijwLtjQVlMUxuYV3W0K6pfVNirrQ/eLZO9TYmEu5c89ZCtsGn" 
"aSKhAoGAUqv1Hfc3d100lLQV8yABqcJ7MPDYjb23su7i3WTNET8hA8yjM6WeQfMqn" 
"ZbuDy7CndfdvYUcb/Dr8YapeSfYIKYC5ydGzILVan3XVcAFKbiQ1ea67OP0ZBevAn" 
"0zVObTehKJiyunTpRxCigtTRR+YVAgYeM5Ej9XxhlwYkwxX+g3o=n" 
"-----END RSA PRIVATE KEY-----n";
/* root CA can be downloaded in:
https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem
*/
const char* rootCA = 
"-----BEGIN CERTIFICATE-----n" 
"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFn" 
"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6n" 
"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELn" 
"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvn" 
"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXjn" 
"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZMn" 
"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwn" 
"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6n" 
"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1Ln" 
"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmn" 
"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCn" 
"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUAn" 
"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIn" 
"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsn" 
"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvn" 
"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XUn" 
"5MsI+yMRQ+gDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpyn" 
"rqXRfboQnoZsG4q5WTP468SQvvf5n" 
"-----END CERTIFICATE-----n";
WiFiClientSecure wiFiClient;
void msgReceived(char* topic, byte* payload, unsigned int len);
PubSubClient pubSubClient(awsEndpoint, 8883, msgReceived, wiFiClient); 
void setup()
{
Serial.begin(115200); delay(50); Serial.println();
Serial.println("ESP32 AWS IoT Example");
Serial.printf("SDK version: %sn", ESP.getSdkVersion());
Serial.print("Connecting to "); Serial.print(ssid);
WiFi.begin(ssid, password);
WiFi.waitForConnectResult();
Serial.print(", WiFi connected, IP address: "); Serial.println(WiFi.localIP());
wiFiClient.setCACert(rootCA);
wiFiClient.setCertificate(certificate_pem_crt);
wiFiClient.setPrivateKey(private_pem_key);
}
unsigned long lastPublish;
int msgCount;
void loop()
{
pubSubCheckConnect();

if (millis() - lastPublish > 10000)
{
String msg = String("Hello from ESP32: ") + ++msgCount;
boolean rc = pubSubClient.publish("outTopic", msg.c_str()); 
Serial.print("Published, rc="); Serial.print( (rc ? "OK: " : "FAILED: ") );
Serial.println(msg);
lastPublish = millis();
}
}
void msgReceived(char* topic, byte* payload, unsigned int length)
{
Serial.print("Message received on "); Serial.print(topic); Serial.print(": ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void pubSubCheckConnect()
{
if ( ! pubSubClient.connected())
{
Serial.print("PubSubClient connecting to: "); Serial.print(awsEndpoint);
while ( ! pubSubClient.connected())
{
Serial.print(".");
pubSubClient.connect("ESPthingXXXX");
delay(1000);
}
Serial.println(" connected");
pubSubClient.subscribe("inTopic");
}
pubSubClient.loop();
}

连接WiFi失败,但您的代码盲目地继续而不检查失败。您需要查看waitForConnectResult()的返回代码,看看连接到WiFi是否成功。似乎你在一些旧版本的Arduino核心ESP32上,所以也许这个文档会有所帮助

if (WiFi.waitForConnectResult() == WL_CONNECTED) {
Serial.print(", WiFi connected, IP address: "); Serial.println(WiFi.localIP());
} else {
Serial.println(", failed to connect to WiFi");
}

最新更新