#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <pgmspace.h>
#include <DHT.h>
#define SECRET
#define THINGNAME "iotresc"
// Wi-Fi credentials
const char WIFI_SSID[] = "Wokwi-GUEST";
const char WIFI_PASSWORD[] = "";
// AWS IoT settings
const char AWS_IOT_ENDPOINT[] = "aa27ktv883hth-ats.iot.ap-southeast-2.amazonaws.com";
#define AWS_IOT_PUBLISH_TOPIC "iotresc/pub"
#define AWS_IOT_SUBSCRIBE_TOPIC "iotresc/sub"
// Pins
const int PHOTO_PIN = 34;
const int TRIG_PIN = 25;
const int ECHO_PIN = 26;
const int DHT_PIN = 27;
#define DHTTYPE DHT22
// Initialize DHT sensor
DHT dht(DHT_PIN, DHTTYPE);
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
static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
MIIDWTCCAkGgAwIBAgIUNk+lsQUDmc9SEYQ6czRJnmOJCX4wDQYJKoZIhvcNAQEL
BQAwTTFLMEkGA1UECwxCQW1hem9uIFdlYiBTZXJ2aWNlcyBPPUFtYXpvbi5jb20g
SW5jLiBMPVNlYXR0bGUgU1Q9V2FzaGluZ3RvbiBDPVVTMB4XDTI0MTAxMjA2NDAw
MloXDTQ5MTIzMTIzNTk1OVowHjEcMBoGA1UEAwwTQVdTIElvVCBDZXJ0aWZpY2F0
ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUG46YNuwxG3HaopK0j
NBhoAIshrjDI9/yQKoRr6C7z08F7pFsKkuh+wygn9NU6rEODRHlO57aEL+/WwRVj
8frCA7q/xS1xl4QCjlRW6fUlLRMDu9OGbq1N21DynS/2kVzyhRQJtkdeHQ3EDE2h
Nk9zKZr/b6fAHA4I+PkKvhmgH0mcZ9QSQnK68Z8tdT1yzzSgsEgVLlmckpHhlGXQ
joCS9zocvRhwYc8wDAE6HXpEFnsmCpdS8zEJVAJNaWDkVmNcVWSflQa7ArCUvvSw
EhOVfixBTh8yEa+3fCL76a64Bpi0534Ug5nyfyi5ofl7xMiTU1PkHJHxdZkkxlCY
0BUCAwEAAaNgMF4wHwYDVR0jBBgwFoAUakhRE9AvOH3MZ8b0xDwVHvngquowHQYD
VR0OBBYEFIGnrA90J+To1F6WYphIvdM8jqWEMAwGA1UdEwEB/wQCMAAwDgYDVR0P
AQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IBAQBFURnJzUZ+5QYtOpaKYCuJNsxx
Bj6i9ogFyoWN64YejTF0NdVnjW2Zo84y3x+VIMLBrpCgqFz4qksaxKeqNsKCRKNX
+/c4z6gUS46oLy7QJmOj6QfOlX4o2pxOX+a/9vsb+s/1QG77DxQP8fUqccgGcO1K
js0v0t73ECV9g0+451bCUa3k/piY8XCNfofpi+pNC9bLNZTyghmmV7RyvE6PuIwQ
lK4pHHn3fYLFZVo4OusUKkAI9xkiR1RsU9uMUOp/jefeuFQrRct+fCzqaE7bVVto
uXwBiwZYlEhrntxhDVxKL/hLjHOLprzkKGjtkf09WjFvuaMiiiQIqBR0Q3Z5
-----END CERTIFICATE-----
)KEY";
// Device Private Key
static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA1Qbjpg27DEbcdqikrSM0GGgAiyGuMMj3/JAqhGvoLvPTwXuk
WwqS6H7DKCf01TqsQ4NEeU7ntoQv79bBFWPx+sIDur/FLXGXhAKOVFbp9SUtEwO7
04ZurU3bUPKdL/aRXPKFFAm2R14dDcQMTaE2T3Mpmv9vp8AcDgj4+Qq+GaAfSZxn
1BJCcrrxny11PXLPNKCwSBUuWZySkeGUZdCOgJL3Ohy9GHBhzzAMATodekQWeyYK
l1LzMQlUAk1pYORWY1xVZJ+VBrsCsJS+9LASE5V+LEFOHzIRr7d8IvvprrgGmLTn
fhSDmfJ/KLmh+XvEyJNTU+QckfF1mSTGUJjQFQIDAQABAoIBAHZpbu8loLxxQyje
EzN+Zv3OCcdMwHOzskz8ofWbuaMnu6RIIxLMLN75X2eZ1jkUdR7N/6jimGBW2AKc
QBWwyZgWclZDNMpO4ubpOM5exYuTz5tLLwOkLS8+INO9GGzJxQGCeUCrKVxATywQ
troMC5FcNVtH83uuiKmwiRx9wS+iUyDY3voJ+IGh5s+OBGU1o2tazrYb79FKJV2j
q9WVRGQPy6xIistXtdx1c/dmhX6YYlElrVbXyDf1uSPVemOezMkNrzGOGKh63mCN
iPz/rUYVPYR/tzCmfiyZf4lCyXM6x2hC5HB06PcBQXyTwIsUxeD+1WTKO219R9ig
U2mhJh0CgYEA8TgMkv7rsdixq1z/ADk/w0wCAL5pFreJAlIjgEOoSJP660VmQT0r
Fv1NLzGkCEa6mUkRwrvpW06CYmn4xU7+qIYQytCYYx/q5y3yj58ljjl5XJ5MeQh2
tRzrq0fYqSB5nGAjrnHcqZrUCxFiTw09INBeHnHx5AhqeFRK0OecYycCgYEA4hSZ
ANpJu6Wp5VkQVMQm17PQi15WQOc7pmaYt8OPqsAk/xowMoFzSPMLztsF/MQup2X0
jkSFHK7QKUMOYwC4kVAyP4KcvF8x77vdcy38gtd8LUrEHSNI9REQ8zxPVHFm4Y1r
r0t4FCfZGNBZVTjR19N96oAkUw96X3LviEoYyGMCgYEAkbLaHXuun4iUoD4WpGrv
8aWaXBqm3RrUvbshSFsVbWk8mRkdD3DD8ynikgv42SrnkKjK+oWICSedp5X8tijl
tqLrx6VBNjZUK3jcVxW4mHRssp3G8SBEm1axno5R9q3v5p1HUBnkP+mOBHVmnPsR
Hh3di6QliCfxL2cynYYYNucCgYBY0YTGq/t5p/zWKKZc1u73oSIWDsrOFsn9dqMa
1s6TY4dlXVGAFhFHoIyMCMoSYrR9eXWZitvMx/TpsPlu9bKNDDehcdvHuZJxv5mh
jXh9otCbLptbYyhfdwP0u0XjQ+YKSLf8lyamrH0C3Z+q9naiVulJ/mvG4fbOluX5
4jpYRwKBgHYch1SkiWHZrL5iegKYH68sWYpuxVv+tEj1Q44ecrZaRvP0i6B5k8Wu
twAOvDKr9r7cKzu/BsVrQpzFGHiE7KN8stmSEsFy5Vl/mr4ds4Nurm5PD+DKZprn
h8uQzX8DySlGs0gXTrDKsHPiMwmpFTVX90B7TNItiSgds+AvCN3c
-----END RSA PRIVATE KEY-----
)KEY";
// Wi-Fi and AWS IoT clients
WiFiClientSecure net = WiFiClientSecure();
PubSubClient client(net);
// Variables for sensor readings
int photoValue = 0;
float temperature = 0.0;
float humidity = 0.0;
float distance = 0.0;
void connectAWS() {
net.setCACert(AWS_CERT_CA);
net.setCertificate(AWS_CERT_CRT);
net.setPrivateKey(AWS_CERT_PRIVATE);
client.setServer(AWS_IOT_ENDPOINT, 8883);
while (!client.connected()) {
Serial.print("Connecting to AWS IoT... ");
if (client.connect(THINGNAME)) {
Serial.println("connected!");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
delay(10);
// Connect to Wi-Fi
Serial.println("Connecting to Wi-Fi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Connected to Wi-Fi");
// Initialize DHT sensor
dht.begin();
// Set up ultrasonic sensor pins
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
connectAWS();
}
void loop() {
if (!client.connected()) {
connectAWS();
}
client.loop();
// Read the analog value from the photoresistor
photoValue = analogRead(PHOTO_PIN);
// Read temperature and humidity from DHT22
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Read distance from ultrasonic sensor
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
float duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2; // Convert time to distance in cm
// Create JSON document
StaticJsonDocument<200> jsonDoc;
jsonDoc["photoValue"] = photoValue;
jsonDoc["temperature"] = temperature;
jsonDoc["humidity"] = humidity;
jsonDoc["distance"] = distance;
char jsonBuffer[512];
serializeJson(jsonDoc, jsonBuffer);
// Publish to AWS IoT
client.publish(AWS_IOT_PUBLISH_TOPIC, jsonBuffer);
Serial.print("Published: ");
Serial.println(jsonBuffer);
delay(2000); // Delay for 2 seconds between readings
}