Close Menu
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
Facebook X (Twitter) Instagram
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us
Facebook X (Twitter) Instagram Pinterest YouTube LinkedIn
How To Electronics
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
How To Electronics
Home » Connecting ESP32 to Amazon AWS IoT Core using MQTT
ESP32 Projects IoT Projects

Connecting ESP32 to Amazon AWS IoT Core using MQTT

Mamtaz AlamBy Mamtaz AlamUpdated:August 20, 202210 Comments9 Mins Read
Share Facebook Twitter LinkedIn Telegram Reddit WhatsApp
Amazon AWS IoT Core ESP32
Share
Facebook Twitter LinkedIn Pinterest Email Reddit Telegram WhatsApp

Overview

This is a getting started tutorial about Amazon Web Services, i.e AWS IoT Core with ESP32. The AWS IoT Core is a managed cloud service that lets connected devices easily and securely interact with cloud applications and other devices.

In this tutorial, we will learn how you can connect the ESP32 with AWS IoT Core & publish sensor reading to AWS MQTT. For a demo, we will use the DHT11 Sensor and read the humidity temperature data. The ESP32 will connect to the local WiFi network and will post the DHT11 Sensor data to AWS IoT Cloud. Not only posting data, but we can also receive the data from AWS Dashboard. Earlier we posted the sensor Data to AWS Dashboard using AWS IoT Core & ESP8266.

The tutorial comprises multiple sections

  • Signing up & setting the Amazon Web Services
  • Installing Necessary Libraries to Arduino IDE & Writing an Arduino Sketch for the project
  • Creating a Thing is AWS
  • Creating Policy and attaching to Thing
  • Generating Certificates
  • Modifying Arduino Sketch according to Thing Data & Credentials
  • Subscribe & Publish Data to and from AWS Dashboard

This tutorial is for beginners who want to learn about the Amazon AWS IoT Core for IoT Applications. Earlier we learned about the IoT platform like Google Firebase and Arduino IoT Cloud. But with AWS IoT Core, you can build and manage devices for commercial applications.




Hardware Setup

The hardware required for this project is an ESP32 Wifi Module. And for the sensor part, we will use DHT11 Humidity and Temperature Sensor.

Connect the DHT11 Sensor to ESP32 Board as per circuit diagram here.

ESP32 DHT11

You can use a breadboard for connection or simply use a male-to-female connector wire.


What is Amazon AWS IoT Core?

AWS offers Internet of Things (IoT) services and solutions to connect and manage billions of devices. These cloud services connect your IoT devices to other devices and AWS cloud services. AWS IoT provides device software that can help you integrate your IoT devices into AWS IoT-based solutions. If your devices can connect to AWS IoT, AWS IoT can connect them to the cloud services that AWS provides.

what is aws iot

AWS IoT lets you select the most appropriate and up-to-date technologies for your solution. To help you manage and support your IoT devices in the field, AWS IoT Core supports these protocols:

  • MQTT (Message Queuing and Telemetry Transport)
  • MQTT over WSS (Websockets Secure)
  • HTTPS (Hypertext Transfer Protocol – Secure)
  • LoRaWAN (Long Range Wide Area Network)

Getting Started with Amazon AWS IoT Core with ESP32

Getting started with AWS IoT core is very simple. You just need to follow the following steps given below to successfully set up the ESP32 board and start with your very first project.


Signing in

Go to your web browser and search visit following link: aws.amazon.com/iot-core/.

Basically we need to set up the AWS Account now. Therefore create an account using the email ID and password. The account also requires your bank Credit card information. There will be no charges but AWS just needs a verification using your bank account. It will also ask for phone number verification. Hence the account will be successfully created.




AWS IoT Core Dashboard

After successfully signing in, the AWS Management Console window will open. In the services search tab at the top write ‘IoT core’ & hit enter.

AWS IoT Core Dashboard

You can click on IoT Core, so an AWS IoT Dashboard will appear now.

On the left side of the dashboard, there are so many options. But we need to work with two options here. One is the manage option and the other one is the secure option.


Creating a Thing

Now we need to create a thing associated with our project. For this, follow the following steps:

  • Specifying thing properties
  • Configuring device certificate
  • Attaching policies to certificate

Under the manage option click on Thing. Now we need to create a Thing here. So, click on Create Things here.

You can select whether create a single thing or create many things. But for our applications, select create a single thing. Then click on Next.


Specify Thing Properties

Here we need to specify the Thing properties. First, give a thing name. You can name it anything. For example, I will name it ESP32_DHT11.

Under additional configurations, there is no need to make any changes.

Under the device shadow option, select the first option as No shadow. Then click on Next.



Generate Device Certificate

Now you need to configure device certificate. So here you can auto-generate a new certificate or use your own certificate or upload CSR or skip this.

But the AWS recommendation is to select the Auto Generate New Certificate. Then click on Next.


Create & Attach Policy

Now we need to attach a policy to the Things we created. But no policies are here right now. So we need to create a policy first.

So click on create policy. Here give any name to the policy. For example, I will give it a name as “ESP32_Policy“.

Now the add statement part is very important. Under the action, type IoT. So multiple options will pop up. From here we will only need to publish, Subscribe, Connect and Receive.

Now click on create to create the policy. So the policy has been created successfully.

Now go back to Create Thing option. So a policy option will appear. We need to attach the policies to the certificate. So select the appeared policy and click on create a thing.


Downloading Certificates and Keys

Now we need to download the required certificates from this list.

First, download the device certificate and then rename it as a device certificate for identification.

Also, download the public key and rename it as a public key. Then download the private key and rename it as a private key.

In the Root CA Certificates, there are two certificates here. But we just need a Root CA1 certificate, so download it as well.

So we have downloaded all the certificates that we need for our project.




Installing Necessary Arduino Libraries

1. ArduinoJSON Library

So first go to the library manager and search for “JSON” & install the library as shown in the figure below.


2. PubSubClient Library

Again go to the library manager and search for “PubSubClient” & install the library from Nick O’Leary.

PubSubClient Library


3. DHT11 Sensor Library

Search for “dht11” & install the library as shown below.

DHT11 Library


Source Code/Program for connecting AWS IoT Core with ESP32

The code/program that interfaces ESP32 with DHT11 Sensor & connects to the Amazon AWS IoT Core is written in Arduino IDE. The code is divided into two sections. One is the main ino file and other the header file.


Main .ino File

Open a new sketch in Arduino IDE & paste the following code and save it.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#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 = 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);
}



Secrets.h

Open a New Tab in Arduino IDE and name it as Secrets.h. And paste the following code to this file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <pgmspace.h>
 
#define SECRET
#define THINGNAME "***************"                         //change this
 
const char WIFI_SSID[] = "***************";               //change this
const char WIFI_PASSWORD[] = "***************";           //change this
const char AWS_IOT_ENDPOINT[] = "***************";       //change this
 
// Amazon Root CA 1
static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
 
-----END CERTIFICATE-----
)EOF";
 
// Device Certificate                                               //change this
static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
 
-----END CERTIFICATE-----
 
 
)KEY";
 
// Device Private Key                                               //change this
static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
 
-----END RSA PRIVATE KEY-----
 
 
)KEY";


Modifying Arduino Sketch according to the Thing

Now it’s time to modify the Arduino Sketch File. Go to secrets.h tab and begin the modification.

Here we need to include a thing name. You can go to the things section of AWS Console and copy the thing name.

Paste the thing name to the following line of code.

1
#define THINGNAME "***************"  

Under the WiFi SSID and password, enter the WiFi SSID and Password of your local network.

1
2
const char WIFI_SSID[] = "***************";              
const char WIFI_PASSWORD[] = "***************";

Now, we need to insert the AWS IoT Endpoint here. To get the endpoint, go to the settings part of AWS Dashboard. Yow will get the endpoint.

Click on the copy icon to copy the endpoint. Go back to Arduino IDE and paste it on the following line.

1
const char AWS_IOT_ENDPOINT[] = "***************";  

You need to insert the Amazon Root CA1 in between the following line.

1
2
3
4
5
6
// Amazon Root CA 1
static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
 
-----END CERTIFICATE-----
)EOF";

So for this, we need to go back to the certificate that we downloaded earlier. Open this file with Notepad++ and copy all the text.

Then go back to Arduino IDE and insert the copied text between begin certificate and the end certificate.

Under the “Device Certificate” lines, we need to paste the device certificate text. So open the device certificate file that we downloaded earlier. And again copy the text and paste it between the begin certificate and end certificate section.

1
2
3
4
5
// Device Certificate                                              
static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
 
-----END CERTIFICATE-----

Under the “Device Private Key“, we need to insert the device’s private key. So go to the downloaded folder again and open the device’s private key file using Notepad++. Again copy the text and paste it between begin & end parts.

1
2
3
4
5
// Device Private Key                                              
static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
 
-----END RSA PRIVATE KEY-----

So all the modification of the Arduino ESP32 Sketch related to AWS IoT Core is done now.




Testing the Publishing & Subscription of Data

Once all the modification is done, connect the ESP32 to your computer. Then go to the tools & select ESP32 Board that you are using for this project. Also, select the COM port. Then click on the upload option to upload the code to the ESP32 board.

Once the code uploading is done, open the Serial Monitor. The ESP32 will try connecting to the WiFi Network. Once it gets connected to the WiFi Network, it will try connecting to the AWS IoT Server.

Amazon AWS IoT Core ESP32

The humidity and temperature value will appear on the Serial Monitor.


Subscribing Sensor Data to AWS Dshboard

The same thing should also be posted to the AWS Server. To check that, go to the test section of AWS Dashboard. Under the test section, we have an option for subscribe and publish.

Now to see the data, you need to subscribe to a topic. For that type “esp32/pub“ under the topic filter section. In the additional configuration, you can make changes if you want.

Then click on subscribe. When you hit the subscribe button, immediately the data from ESP32 will be uploaded to AWS Dashboard. Thus, you have successfully sent the DHT11 Sensor data to Amazon AWS IoT Core using ESP32.

Amazon AWS IoT Core ESP32

The data is updated here after an interval of every one second. This is really amazing as we are able to receive the data to AWS IoT Core Dashboardsent from ESP32 via MQTT protocol. This is how we read the subscribed data.



Publishing Data to Serial Monitor

Now let’s see if we are able to publish the data from AWS IoT core to ESP32 or not.

Now to see the data, you need to publish to a topic. For that type “esp32/sub“ under the topic filter section. Under additional configuration do nothing. Then click on publish.

Immediately you can see the message sent to the Serial Monitor. This is amazing again. You can use this method to Control an LED using publish method.

This is how you can send or receive data from Amazon AWS IoT Core using ESP32. Using AWS MQTT, we can subscribe to sensor readings topics published by various IoT nodes. This is a basic beginner’s tutorial for the users who want to get started with Amazon Web Services for their IoT devices.


Video Tutorial & Guide

Getting Started with Amazon AWS IoT Core using ESP32 || Creating Thing, Policy & Certificates
Watch this video on YouTube.

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email Reddit Telegram WhatsApp
Previous ArticleBLE enabled Smart Bulb with STM32 & Javascript
Next Article Interfacing GT511C3 Fingerprint Sensor (FPS) with Arduino

Related Posts

IoT Based PM & Air Quality Monitoring System using ESP32

IoT Based PM & Air Quality Monitoring System using ESP32

DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

Updated:May 10, 20261K
IoT Activity Tracker with ESP32 & Accelerometer Gyroscope

IoT Activity Tracker with ESP32 & Accelerometer/Gyroscope

Updated:May 2, 2026

ESP32 IoT Vehicle Motion Analyzer with MPU6050 & LIS3MDL

Updated:April 27, 20261K
High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

Updated:April 27, 20262K
DIY Colorimeter using AS7265x Spectroscopy Sensor & ESP32

DIY Colorimeter using AS7265x Spectroscopy Sensor & ESP32

Updated:February 1, 20261K
View 10 Comments

10 Comments

  1. Luis Rodriguez on January 2, 2022 3:15 AM

    Hi, thanks very much for the info.
    How make App (app inventor) to connect to this AWS? I need to use the same certs, key, in the app?
    Thanks

    Reply
  2. codeforwarAaron on January 9, 2022 10:32 AM

    I get an error from Arduino IDE of MD5 mismatch. It compiles fine, it’s just when I try to Upload to bootloader through Arduino IDE.

    Reply
  3. Aaron on January 14, 2022 1:28 AM

    I was able to fix it with just wiping the flash and uploading a basic app to the esp32 and then trying this one again. Works like a champ now!

    Reply
    • Admin on January 14, 2022 1:55 AM

      Congrats Aaron. Nice to know that you made it work.

      Reply
  4. Ed on March 13, 2022 7:50 PM

    I’ve followed this example and when I monitor the messages, the first message comes through but none after that…. If I reset the Microcontroller via reprogramming it or the reset button it resends a single sensor reading. But nothing after that. The Publishing of data to the serial monitor also doesn’t work. Any suggestions as what to try?

    Reply
  5. markie on April 20, 2022 3:52 PM

    I am facing the same issue here

    Reply
  6. simone gasparella on September 1, 2022 10:39 AM

    Hi I am getting the following error

    The CRT/CRL/CSR format is invalid, e.g. different type expected

    Can you specify with an example of the certificate char?

    Thanks

    Reply
  7. LEONARDO on October 27, 2022 9:20 PM

    How do I get the json information, and send it to my site?

    Reply
  8. Tushar Senghani on December 5, 2022 5:23 AM

    I have established a connection between ESP32 and AWS IoT Core and I can share data fluently but when I increase the time interval from 1 second to 1-15 minutes the connection is lost or not detected. What is the reason behind it?

    Reply
  9. louis roy on February 24, 2023 4:00 PM

    you have to modify the “KEEP ALIVE” parameter to prevent the connection to time out….

    Reply

CommentsCancel reply

Latest Posts
IoT Based PM & Air Quality Monitoring System using ESP32

IoT Based PM & Air Quality Monitoring System using ESP32

May 31, 2026
DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

May 10, 2026
IoT Activity Tracker with ESP32 & Accelerometer Gyroscope

IoT Activity Tracker with ESP32 & Accelerometer/Gyroscope

May 2, 2026
A Guide to Sourcing Obsolete ICs for Vintage Projects

Beyond AliExpress: A Guide to Sourcing Obsolete ICs for Vintage Projects

April 21, 2026

ESP32 IoT Vehicle Motion Analyzer with MPU6050 & LIS3MDL

April 27, 2026
Building a Smart Sensor Node with a BLE Microcontroller

Building a Smart Sensor Node with a BLE Microcontroller

February 26, 2026
High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

April 27, 2026
DIY Colorimeter using AS7265x Spectroscopy Sensor & ESP32

DIY Colorimeter using AS7265x Spectroscopy Sensor & ESP32

February 1, 2026
Top Posts & Pages
  • 12V DC to 220V AC Inverter Circuit & PCB
    12V DC to 220V AC Inverter Circuit & PCB
  • How to use INA219 DC Current Sensor Module with Arduino
    How to use INA219 DC Current Sensor Module with Arduino
  • How to use INA226 DC Current Sensor with Arduino
    How to use INA226 DC Current Sensor with Arduino
  • ECG Graph Monitoring with AD8232 ECG Sensor & Arduino
    ECG Graph Monitoring with AD8232 ECG Sensor & Arduino
  • Buck Converter: Basics, Working, Design & Application
    Buck Converter: Basics, Working, Design & Application
  • Designing of MPPT Solar Charge Controller using Arduino
    Designing of MPPT Solar Charge Controller using Arduino
  • IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
    IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
  • IoT Based ECG Monitoring with AD8232 ECG Sensor & ESP32
    IoT Based ECG Monitoring with AD8232 ECG Sensor & ESP32
Categories
  • Arduino Projects (197)
  • Articles (60)
    • Learn Electronics (19)
    • Product Review (15)
    • Tech Articles (28)
  • Electronics Circuits (46)
    • 555 Timer Projects (21)
    • Op-Amp Circuits (7)
    • Power Electronics (13)
  • IoT Projects (204)
    • ESP32 MicroPython (7)
    • ESP32 Projects (81)
    • ESP32-CAM Projects (15)
    • ESP8266 Projects (76)
    • LoRa/LoRaWAN Projects (22)
  • Microcontrollers (38)
    • AMB82-Mini IoT AI Camera (4)
    • BLE Projects (18)
    • STM32 Projects (19)
  • Raspberry Pi (93)
    • Raspberry Pi Pico Projects (57)
    • Raspberry Pi Pico W Projects (12)
    • Raspberry Pi Projects (24)
Follow Us
  • Facebook
  • Twitter
  • Pinterest
  • Instagram
  • YouTube
About Us

“‘How to Electronics’ is a vibrant community for electronics enthusiasts and professionals. We deliver latest insights in areas such as Embedded Systems, Power Electronics, AI, IoT, and Robotics. Our goal is to stimulate innovation and provide practical solutions for students, organizations, and industries. Join us to transform learning into a joyful journey of discovery and innovation.

Copyright © How To Electronics. All rights reserved.
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us

Type above and press Enter to search. Press Esc to cancel.

Ad Blocker Enabled!
Ad Blocker Enabled!
Looks like you're using an ad blocker. Please allow ads on our site. We rely on advertising to help fund our site.