#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "WiFi.h"
#include <pgmspace.h>
#define SECRET
#define THINGNAME "SAR302_PRO" //change this
const char WIFI_SSID[] = "Wokwi-GUEST"; //change this
const char WIFI_PASSWORD[] = ""; //change this
const char AWS_IOT_ENDPOINT[] = "a1yqo69c7uxlov-ats.iot.us-east-1.amazonaws.com"; //change this
// Amazon Root CA 1
static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA
A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI
U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs
N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv
o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU
5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy
rqXRfboQnoZsG4q5WTP468SQvvG5
-----END CERTIFICATE-----
)EOF";
// Device Certificate //change this
static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
MIIDWjCCAkKgAwIBAgIVAPBKKcgv7qBq/x6veeNFJ4nTtFUbMA0GCSqGSIb3DQEB
CwUAME0xSzBJBgNVBAsMQkFtYXpvbiBXZWIgU2VydmljZXMgTz1BbWF6b24uY29t
IEluYy4gTD1TZWF0dGxlIFNUPVdhc2hpbmd0b24gQz1VUzAeFw0yNDAzMjgxMzIy
MDFaFw00OTEyMzEyMzU5NTlaMB4xHDAaBgNVBAMME0FXUyBJb1QgQ2VydGlmaWNh
dGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4mhK4LHjaT43eWnlk
u6irSORewB43iAAfMx2vnpkc+fun4rmK8dbFV4+S/ABB5Tu9NE/ZUAsNrpb30m5I
qhiGdXV+Ahh/0TDsJs5wQWAIuRnUIZGeIwx/qm/d73L3sXfhq5gfxFH3cmw4aSeF
s8Q7DktplWnIRzdQ+A+WCC2czj9I0PTc9JfFxJYU2fTRBhKiuELz5gPM0IO0TxZv
Slzsy9mpwl1mAg4DQI3elbA3CHINgwyltTy2NgQz9u/RXS1YPz0oAajSoSKnlzN2
rpVQcrZ3OMjyDFg0VebC7/6C9EJzAudwg/26lkPApAio7qeVZiD7c8tP3jVzlet5
d3VlAgMBAAGjYDBeMB8GA1UdIwQYMBaAFIsSM7E6PAgiaK0TOnzm5unAxvVcMB0G
A1UdDgQWBBQ2QoeJpcYcIbspE+nYUGir3BkK0zAMBgNVHRMBAf8EAjAAMA4GA1Ud
DwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAbJgM0dHf9wigd/9q6wmggpWr
WC+dyNS6koUE6T6jL17LvjIB4JmYEeDWErONK2vidF3JPE9cJyZB9wNYP0R9yLh3
3eGe8KDuFxRb19eFUTbGwBva9TO877o8bWy2Ow5JK6aof0VnlNe6dXalAVFdn/LV
rLKh26i/w+LlT4grQXNbjOZZbRwi4ThwE55fuOHL+z9MWUeSI0w39s0dxvJ4DP3E
1ygR/LdQV8owgjjn3CeJhTp2jRpiQw5YW3C7c2uuSk7sI304223/StZrX5xjP0tG
KiuTL4Z13jMtx46D4HgoLfrQy8adzy7sHO2LdZnb0Hq8kcvMlwB+GdzEkVs1Gg==
-----END CERTIFICATE-----
)KEY";
// Device Private Key //change this
static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAuJoSuCx42k+N3lp5ZLuoq0jkXsAeN4gAHzMdr56ZHPn7p+K5
ivHWxVePkvwAQeU7vTRP2VALDa6W99JuSKoYhnV1fgIYf9Ew7CbOcEFgCLkZ1CGR
niMMf6pv3e9y97F34auYH8RR93JsOGknhbPEOw5LaZVpyEc3UPgPlggtnM4/SND0
3PSXxcSWFNn00QYSorhC8+YDzNCDtE8Wb0pc7MvZqcJdZgIOA0CN3pWwNwhyDYMM
pbU8tjYEM/bv0V0tWD89KAGo0qEip5czdq6VUHK2dzjI8gxYNFXmwu/+gvRCcwLn
cIP9upZDwKQIqO6nlWYg+3PLT941c5XreXd1ZQIDAQABAoIBAHRlmcYNLIqivNZl
/8MXXGvcAzsHMkZbd5A0n9Q7UVnm+dnK6KkGgiBebIYGZXcnPjq3wF1Kzh1rZ3+N
bMJeliY568JvOdlmIs3UTjiT0CTP6cxK+lFW0iuxYOX0dG5ftTJTCxGErRY0TK5p
B2WTivids8k4T8HbvbJNJy63q2MByZ6nlkbyKfLajdnNhNzsc2ivt8wGbAmDpoLm
MKQn4/XFj6nQj9BDh2Z0ULxjwoWGGGbwMvAlJqjEiVHb/nO/3KkegoSDwY9YEQzj
rdOe2hITXKAQpdLNlvcMJ+9no3U+mjhyKURiTMTIPP0m9WYaPkAIlnfXuN7BE2Xz
oPTnoiUCgYEA7wL/bnefbE9L5OsmUabbRMgPD3PeNNpqxgkkVCsUdXc7SSwUI6ug
rsJzw2bvkI0fOhazYV9MGmdv8ni6DMNe/hJA9G+FeNw81Pryx9tdnlpasZTUqT+g
RWNdpg7g7mTtLzN22mKGDkloMriU3ooT0oaHz5FSYLsRPL4cVxTBFGMCgYEAxbkL
xY7IBwxCdK8kTbAvDUju0ZT+TGw5159nhfFRHlTQbuSBYamoXSDY8DQbXc+o/QFS
EHBYQOsOY+nBP9vaonirCvSTayMtsPHkipYmy+ymWnEy5F6y9ZC2o/0bnXWLn2Mh
HO3nbXZXJcuG+wGlq4F/UCeARwZOvUEeUfwfhZcCgYEAvizSdWE1Nob5ylHYkYuE
WHwej5sQKVnJL33CrD4C71xJjfVGqQM8vRD373iOEaRYPm4lmMqs0S2Qg4vP7ave
f6aijFvYBcynkoeCecdv/DnEhBv6AhkgO1XPA/w+uTEREEeQwD84j1GVWRZJTbDs
CM0GbwAgXds64ewavKdE4iUCgYBxPqsfW8f1QXBOpIGGfYJ1eXBPWabM3q/Cb+o7
LRvo42r+GKKB7UohDM8zxKRn9qgzQK5f+/iQNhDn6NpmWOXAaJyOicZldqCU1/at
6ZIO+lvNMUiUxCh7vYbeJfnLFagCgiRVDW2fpEgFvaxx11+r+1+P6Q/vng07GDDl
hCIJwQKBgQDlSuFrsurSLMf9cy8yVxrJSZ91IZmUl+7EOXSp38e+X2e3qyWL6KS8
3Arn2bKaYLxNJndePVFIqJLLf509+qGmZ7KW9We/c8ggrvcErpqRIhg+XTWR1D1T
PvywhaI4Sr85Z1h0ZwlearoP3DVecUbwBHjn/i12kY798f9BDPSF3w==
-----END RSA PRIVATE KEY-----
)KEY";
#include "DHT.h"
#define DHTPIN 14 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // 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);
}