Connecting to AWS IoT is taking for ever with ESP32
I tried connecting to AWS IoT using ESP32 with DTH11 sensor. After uploading the sketch to ESP32 and watching Serial monitor, I can see it connecting to WiFi and then it is taking for ever to connect to AWS.
Here is the output:
19:13:50.257 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
19:13:50.257 -> configsip: 0, SPIWP:0xee
19:13:50.257 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
19:13:50.290 -> mode:DIO, clock div:1
19:13:50.290 -> load:0x3fff0018,len:4
19:13:50.290 -> load:0x3fff001c,len:1216
19:13:50.290 -> ho 0 tail 12 room 4
19:13:50.290 -> load:0x40078000,len:10944
19:13:50.290 -> load:0x40080400,len:6388
19:13:50.290 -> entry 0x400806b4
19:13:50.689 -> Connecting to Wi-Fi
19:13:51.188 -> .....Connected to the WiFi network
19:13:53.182 -> Connecting to AWS IOT
19:13:53.581 -> ......................................................................................................................................................................................................
I ran openssl s_client -connect custom_endpoint.iot.aws-region.amazonaws.com:8443 -CAfile CA.pem -cert cert.pem -key privateKey.pem
with downloaded certificates from AWS to confirm that are fine and the handshake is happening.
SSL handshake has read 5529 bytes and written 1609 bytes
Verification: OK
How could I debug further?
Here is the sketch I am using...
#include "secrets.h"
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "WiFi.h"
#include "DHT.h"
#define DHTPIN 13 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
#define AWS_IOT_PUBLISH_TOPIC "esp32/pub"
#define AWS_IOT_SUBSCRIBE_TOPIC "esp32/sub"
float h ;
float t;
DHT dht(DHTPIN, DHTTYPE);
WiFiClientSecure net = WiFiClientSecure();
PubSubClient client(net);
void connectAWS()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected to the WiFi network");
// Configure WiFiClientSecure to use the AWS IoT device credentials
net.setCACert(AWS_CERT_CA);
net.setCertificate(AWS_CERT_CRT);
net.setPrivateKey(AWS_CERT_PRIVATE);
// Connect to the MQTT broker on the AWS endpoint we defined earlier
client.setServer(AWS_IOT_ENDPOINT, 8883);
// Create a message handler
client.setCallback(messageHandler);
Serial.println("Connecting to AWS IOT");
while (!client.connect(THINGNAME))
{
Serial.print(".");
delay(100);
}
if (!client.connected())
{
Serial.println("AWS IoT Timeout!");
return;
}
// Subscribe to a topic
client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC);
Serial.println("AWS IoT Connected!");
}
void publishMessage()
{
StaticJsonDocument<200> doc;
doc["humidity"] = h;
doc["temperature"] = t;
char jsonBuffer[512];
serializeJson(doc, jsonBuffer); // print to client
client.publish(AWS_IOT_PUBLISH_TOPIC, jsonBuffer);
}
void messageHandler(char* topic, byte* payload, unsigned int length)
{
Serial.print("incoming: ");
Serial.println(topic);
StaticJsonDocument<200> doc;
deserializeJson(doc, payload);
const char* message = doc["message"];
Serial.println(message);
}
void setup()
{
Serial.begin(115200);
connectAWS();
dht.begin();
}
void loop()
{
h = dht.readHumidity();
t = dht.readTemperature();
if (isnan(h) || isnan(t) ) // Check if any reads failed and exit early (to try again).
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.println(F("°C "));
publishMessage();
client.loop();
delay(1000);
}
I have referred following url https://how2electronics.com/connecting-esp32-to-amazon-aws-iot-core-using-mqtt/
Finally working. I have followed the instructions in the following links to make it work. https://exploreembedded.com/wiki/AWS_IOT_with_Arduino_ESP32 https://exploreembedded.com/wiki/Secure_IOT_with_AWS_and_Hornbill_ESP32
Here is the reference links I have followed to make it work https://exploreembedded.com/wiki/AWS_IOT_with_Arduino_ESP32 https://exploreembedded.com/wiki/Secure_IOT_with_AWS_and_Hornbill_ESP32
I don't have a DTH11 sensor so I commented it out and tried it and it worked fine.
sketch_may27a.ino
#include "secrets.h"
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "WiFi.h"
//#include "DHT.h"
//#define DHTPIN 14 // Digital pin connected to the DHT sensor
//#define DHTTYPE DHT11 // DHT 11
#define AWS_IOT_PUBLISH_TOPIC "esp32/pub"
#define AWS_IOT_SUBSCRIBE_TOPIC "esp32/sub"
float h ;
float t;
//DHT dht(DHTPIN, DHTTYPE);
WiFiClientSecure net = WiFiClientSecure();
PubSubClient client(net);
void connectAWS()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
// Configure WiFiClientSecure to use the AWS IoT device credentials
net.setCACert(AWS_CERT_CA);
net.setCertificate(AWS_CERT_CRT);
net.setPrivateKey(AWS_CERT_PRIVATE);
// Connect to the MQTT broker on the AWS endpoint we defined earlier
client.setServer(AWS_IOT_ENDPOINT, 8883);
// Create a message handler
client.setCallback(messageHandler);
Serial.println("Connecting to AWS IOT");
while (!client.connect(THINGNAME))
{
Serial.print(".");
delay(100);
}
if (!client.connected())
{
Serial.println("AWS IoT Timeout!");
return;
}
// Subscribe to a topic
client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC);
Serial.println("AWS IoT Connected!");
}
void publishMessage()
{
StaticJsonDocument<200> doc;
doc["humidity"] = h;
doc["temperature"] = t;
char jsonBuffer[512];
serializeJson(doc, jsonBuffer); // print to client
client.publish(AWS_IOT_PUBLISH_TOPIC, jsonBuffer);
}
void messageHandler(char* topic, byte* payload, unsigned int length)
{
Serial.print("incoming: ");
Serial.println(topic);
StaticJsonDocument<200> doc;
deserializeJson(doc, payload);
const char* message = doc["message"];
Serial.println(message);
}
void setup()
{
Serial.begin(115200);
connectAWS();
// dht.begin();
}
void loop()
{
h = 100;//dht.readHumidity();
t = 200;//dht.readTemperature();
if (isnan(h) || isnan(t) ) // Check if any reads failed and exit early (to try again).
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.println(F("°C "));
publishMessage();
client.loop();
delay(1000);
}
Secrets.h
#include <pgmspace.h>
#define SECRET
#define THINGNAME "ESP32_DHT11" //change this
const char WIFI_SSID[] = "xxxxxxxxx"; //change this
const char WIFI_PASSWORD[] = "xxxxxxxxx"; //change this
const char AWS_IOT_ENDPOINT[] = "xxx.iot.ap-northeast-1.amazonaws.com"; //change this
// Amazon Root CA 1
static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
...
rqXRfboQnoZsG4q5WTP468SQvvG5
-----END CERTIFICATE-----
)EOF";
// Device Certificate //change this
static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
MIIDWTCCAkGgAwIBAgIUfWcbwQBaVl8RnCfJY4TO4UGscAYwDQYJKoZIhvcNAQEL
...
X/XquhMaID9XyciEeI4ZNevs8PZ+wZIsP95rCOdehNb9dQLV37r/gHJ6clEO
-----END CERTIFICATE-----
)KEY";
// Device Private Key //change this
static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAo+HePx9Rc3XVmJjB3DG0idyGSlN+X86LBpbEF/OZUyqKtm1E
...
OrHl2hsHks8F8cD+rE355q6viOZxkQp+egLbM6g6a+3e1bpsUQNw
-----END RSA PRIVATE KEY-----
)KEY";
I would be very happy if you could ACCEPTE ANSWER when you solve the problem😀😀😀
Sure. Thanks for confirming that the code works. I will give it a try tomorrow again.
I have tried your code but I could not make it work. I was getting the same error.
Relevant questions
ESP32 internet disconnect
asked 2 months agoUnable to publish MQTT message to AWS iot Core with lambda function. Where lambda is connected to VPC. Using VPC enpoint we need to connect to IOT core and publish message
Accepted Answerasked 13 days agoUnable to scan Wifi networks with AmazonFreeRTS in iOS app after connecting to one
asked a month agoHow to design Mobile App to connect to MQTT Broker
asked 7 months agoConnecting to AWS IoT is taking for ever with ESP32
Accepted Answerasked a month agoAWS IoT Subscribe from ESP32
asked 4 months agoAWS IoT for ESP32
asked 5 months agoBuilding Amazon FreeRTOS example in Eclipse for ESP32
asked 5 months agoAWS OTA for ESP32
asked 5 months agoIs this specific board "ESP32-S2-DevKitC-1" compaitble with IoT Core, FreeRTOS Quick Connect and setup, etc?
Accepted Answerasked a month ago
I am glad it works. I just don't know why it didn't.