top of page
Writer's pictureCoding Phoenix

Connecting an ESP32 Device to AWS IoT Core: A Step-by-Step Guide

Introduction:

AWS IoT Core is a powerful platform for building scalable and secure IoT applications. In this tutorial, we'll explore how to connect an ESP32 device to AWS IoT Core, enabling you to securely send and receive data between your ESP32 and the cloud. This is an essential step in building robust and scalable IoT solutions.


Materials You'll Need:

  1. ESP32 development board (e.g., ESP-WROOM-32)

  2. USB cable for power and programming

  3. Computer with the Arduino IDE installed

  4. AWS account (if you don't have one, sign up at https://aws.amazon.com/)

Step 1: Set Up the Arduino IDE for ESP32

If you haven't already, download and install the Arduino IDE from the official Arduino website (https://www.arduino.cc/en/software).

Next, set up the Arduino IDE for ESP32 development:

  • Open the Arduino IDE.

  • Go to "File" > "Preferences."

  • In the "Additional Boards Manager URLs" field, add the following URL:arduinoCopy code https://dl.espressif.com/dl/package_esp32_index.json

  • Click "OK" to close the Preferences window.

Step 2: Install the ESP32 Board Package

  • Go to "Tools" > "Board" > "Boards Manager..."

  • In the Boards Manager, type "esp32" in the search bar.

  • Click "Install" on the "esp32" by Espressif Systems package.

Step 3: Create an AWS IoT Thing

  1. Log in to your AWS account.

  2. Go to the AWS IoT Core console (https://console.aws.amazon.com/iotv2/).

  3. Click "Create a single thing."

  4. Enter a name for your thing (e.g., "ESP32Device").

  5. Click "Next" through the remaining screens, leaving the default settings.

Step 4: Create and Attach a Policy

  1. In the AWS IoT Core console, navigate to "Secure" > "Policies."

  2. Click "Create a policy."

  3. Enter a name for your policy (e.g., "ESP32Policy").

  4. In the "Add statements" section, click "Advanced mode" and add the following JSON policy:


{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Action": "iot:Connect",

"Resource": "*"

},

{

"Effect": "Allow",

"Action": "iot:Subscribe",

"Resource": "*"

},

{

"Effect": "Allow",

"Action": "iot:Publish",

"Resource": "*"

},

{

"Effect": "Allow",

"Action": "iot:Receive",

"Resource": "*"

}

]

}



  1. Click "Create."

  2. In the AWS IoT Core console, navigate to "Secure" > "Things."

  3. Select your ESP32 device ("ESP32Device").

  4. In the "Security" section, click "Create a new certificate."

  5. Download the certificate, private key, and Amazon Root CA certificate (Root CA for AWS IoT) files.

Step 5: Configure AWS IoT SDK for Arduino

  1. Download the AWS IoT SDK for Arduino from GitHub: https://github.com/aws/aws-iot-device-sdk-arduino-yun.

  2. Extract the downloaded ZIP file.

  3. Open the "aws-iot-device-sdk-arduino-yun" folder.

  4. Rename the "config.sample.h" file to "config.h."

  5. Open "config.h" and configure the following settings:

    • AWS_IOT_MQTT_HOST: Set it to your AWS IoT endpoint (e.g., "your-iot-endpoint.iot.us-west-2.amazonaws.com").

    • AWS_IOT_MQTT_CLIENT_ID: Set it to a unique client ID (e.g., "ESP32Device").

    • AWS_IOT_MY_THING_NAME: Set it to the name of your AWS IoT Thing ("ESP32Device").

    • AWS_IOT_ROOT_CA_FILENAME, AWS_IOT_CERTIFICATE_FILENAME, AWS_IOT_PRIVATE_KEY_FILENAME: Set these to the filenames of the certificate, private key, and Amazon Root CA certificate you downloaded earlier.


  1. Save and close "config.h."

Step 6: Write the ESP32 Sketch

Here's an example Arduino sketch to connect your ESP32 device to AWS IoT Core and publish a message. Create a new Arduino sketch and replace "YourWiFiSSID", "YourWiFiPassword", and "YourTopic" with your Wi-Fi credentials and desired MQTT topic.



#include <WiFi.h>

#include <AWS_IOT.h>


const char* ssid = "YourWiFiSSID"; // Replace with your Wi-Fi SSID

const char* password = "YourWiFiPassword"; // Replace with your Wi-Fi password


// AWS IoT Core settings

char* topic = "YourTopic"; // Replace with your desired MQTT topic


// AWS IoT client

AWS_IOT client;


void setup() {

Serial.begin(115200);


// Connect to Wi-Fi

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.println("Connecting to WiFi...");

}

Serial.println("Connected to WiFi");


// Initialize AWS IoT client

if (!client.begin(AWS_IOT_CLIENTID)) {

Serial.println("Failed to initialize AWS IoT client");

while (1);

}


// Configure AWS IoT client

client.configureEndpoint(AWS_IOT_ENDPOINT);

client.configureCredentials(AWS_CERT_CA, AWS_CERT_CRT, AWS_CERT_PRIVATE);

client.setRootCA(AWS_CERT_CA);

client.setPrivateKey(AWS_CERT_PRIVATE);

client.setClientCertificate(AWS_CERT_CRT);


// Connect to AWS IoT

if (!client.connect()) {

Serial.println("Failed to connect to AWS IoT");

while (1);

}


Serial.println("Connected to AWS IoT");

}


void loop() {

// Publish a message

String message = "Hello from ESP32!";

Serial.print("Publishing message: ");

Serial.println(message);


if (client.publish(topic, message)) {

Serial.println("Message published successfully");

} else {

Serial.println("Failed to publish message");

}


delay(5000); // Publish every 5 seconds

}


Step 7: Upload and Run the Sketch

  • Connect your ESP32 to your computer using a USB cable.

  • Ensure you've selected the correct board and port (as described in previous steps).

  • Click the "Upload" button (right arrow) in the Arduino IDE to compile and upload the sketch to your ESP32.

Step 8: Monitor Serial Output

Open the Serial Monitor (Tools > Serial Monitor) to monitor the ESP32's serial output. You should see messages indicating the connection to Wi-Fi and AWS IoT Core, as well as the publication of messages.


Step 9: View the Message in AWS IoT Core

  • In the AWS IoT Core console, navigate to "Test" > "MQTT test client."

  • Subscribe to the MQTT topic you specified in your sketch (e.g., "YourTopic").

  • You should see the messages published by your ESP32 device.

Conclusion:

You've successfully learned how to connect an ESP32 device to AWS IoT Core, enabling secure communication between your device and the cloud. This fundamental step opens the door to a wide range of IoT applications, allowing you to send and receive data from your ESP32 to AWS services and beyond. Explore further by integrating AWS Lambda functions, Amazon S3 storage, or other AWS services to build robust IoT solutions.



361 views0 comments

Recent Posts

See All

Comments


bottom of page