#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <DHT.h>
// Wi-Fi and AWS IoT configuration
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char* awsEndpoint = "YOUR_AWS_IOT_ENDPOINT"; // e.g., "xxxxxx.iot.us-east-1.amazonaws.com"
// Device certificate details
const char* awsCertCa = "YOUR_CA_CERT"; // Root CA certificate
const char* awsCertCrt = "YOUR_DEVICE_CERT"; // Device certificate
const char* awsCertPrivate = "YOUR_PRIVATE_KEY"; // Device private key
#define DHTPIN 25
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
WiFiClientSecure net;
PubSubClient client(net);
void connectAWS() {
net.setCACert(awsCertCa);
net.setCertificate(awsCertCrt);
net.setPrivateKey(awsCertPrivate);
// Connect to AWS IoT
client.setServer(awsEndpoint, 8883);
while (!client.connected()) {
Serial.println("Connecting to AWS IoT...");
if (client.connect("ESP32_DHT22")) { // Device ID
Serial.println("Connected to AWS IoT");
} else {
Serial.print("Failed to connect. State: ");
Serial.print(client.state());
delay(2000);
}
}
}
void setup() {
Serial.begin(9600);
dht.begin();
// Connect to Wi-Fi
Serial.print("Connecting to Wi-Fi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to Wi-Fi");
// Connect to AWS IoT
connectAWS();
}
void loop() {
if (!client.connected()) {
connectAWS();
}
client.loop();
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Check if reading was successful
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT22 sensor!");
return;
}
// Print the values to Serial Monitor
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
// Create JSON payload
String payload = "{\"temperature\": ";
payload += String(temperature);
payload += ", \"humidity\": ";
payload += String(humidity);
payload += "}";
// Publish data to AWS IoT Core
if (client.publish("esp32/dht22", payload.c_str())) {
Serial.println("Data sent to AWS IoT Core.");
} else {
Serial.println("Failed to send data to AWS IoT Core.");
}
delay(2000); // Delay between readings
}