#include "WiFiClientSecure.h"
#include <PubSubClient.h>
#include <time.h>
// WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT Broker credentials
const char* mqtt_broker = "51.77.149.237";
const char* topic = "test";
const int mqtt_port = 8883 ;
const char CA_cert[] = \
"-----BEGIN CERTIFICATE-----\n" \
"MIIDhjCCAm6gAwIBAgIUaYXx+R/5SNvs76bKjFgZPbZag4MwDQYJKoZIhvcNAQEL\n" \
"BQAwTDE7MDkGA1UEAwwyVExTR2VuU2VsZlNpZ25lZHRSb290Q0EgMjAyNC0wNC0w\n" \
"OFQxMDowMzoyNC44ODc1NzMxDTALBgNVBAcMBCQkJCQwHhcNMjQwNDA4MDgwMzI1\n" \
"WhcNMzQwNDA2MDgwMzI1WjBMMTswOQYDVQQDDDJUTFNHZW5TZWxmU2lnbmVkdFJv\n" \
"b3RDQSAyMDI0LTA0LTA4VDEwOjAzOjI0Ljg4NzU3MzENMAsGA1UEBwwEJCQkJDCC\n" \
"ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUw1Cv/DFUMqQoMcCWM5R1+\n" \
"GQ3sJP0SOpd4bUBgSlw0XVWod7yCHGiOZcHldphJzQ/pwARpm4Lx7eNTUclWGksi\n" \
"NEb6SdpFCx442fq9cMjzcz/QjgY1Y14ZIHNqtbkKAznYZMQff8OqaQjXfcmrYL9k\n" \
"EhmCFR4muzMpORj2AHhzXYEgozSRzSNlV9tWwhaLwezjGdS2tZvrvMQlKPbrp36j\n" \
"Xbqyw68mZH5LEqd5FGHvUSPl3VoJrBQ4K7q+Rt55i+Y3OT1EPg9uSDOHGm6r/f0r\n" \
"WIsbd/5fppdbW/OARdhMwUd0mJu/7fx3E4mxntDPkYlFoFNRKrXGqKQI5KSGyBEC\n" \
"AwEAAaNgMF4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYE\n" \
"FNvjcOBa/HC66IZSAB73rI6+nbbpMB8GA1UdIwQYMBaAFNvjcOBa/HC66IZSAB73\n" \
"rI6+nbbpMA0GCSqGSIb3DQEBCwUAA4IBAQCf641+PImSgDQIr24Qgi5w6NDFJp7i\n" \
"0SVJc3+7kJzME1hq1aUpFJTZQupjBZ4MPtByJgUhxonePEjvUSkFBGO/sunRTbtg\n" \
"krlV8cQhtFtWe7erVR6WAV+jhPdiSBP9BnSxHdWzRI14eEwKvLPj5r4eUVPvkZjX\n" \
"HvLYVDY3OVBIe2MyB508hZJ4TRlJs5eKQ9tpe3S3PqkDu0KPsHKcIxjk+d4D5rnq\n" \
"o2JF+z/4EaLQfZRewurM3p+CS0ETBkKOvkPSk55l2dMQLRT4TPqMioWh0xRpqGYf\n" \
"O2ou1fwQ2dkcqy01s/n4NuNiaeGVhjWwOX+h47JthIaAdxcH2zFd3Xhe\n" \
"-----END CERTIFICATE-----";
const char ESP_CA_cert[] ="-----BEGIN CERTIFICATE-----\n" \
"MIIDLzCCAhegAwIBAgIUdTN5Gipc0OryblhGujK3UP6wqwUwDQYJKoZIhvcNAQEL\n" \
"BQAwTDE7MDkGA1UEAwwyVExTR2VuU2VsZlNpZ25lZHRSb290Q0EgMjAyNC0wNC0w\n" \
"OFQxMDowMzoyNC44ODc1NzMxDTALBgNVBAcMBCQkJCQwHhcNMjQwNDEwMTA1MDI5\n" \
"WhcNMjUwNDEwMTA1MDI5WjATMREwDwYDVQQDDAhmZWRlcmljbzCCASIwDQYJKoZI\n" \
"hvcNAQEBBQADggEPADCCAQoCggEBALFp2mlILKIGCgSN43XA91R32xYuFpq6QZzV\n" \
"jRyzvb7TOxSCe96D60B8Y/dX718RKKZ/voarWcUiEDgnk6QylVdVrTJaXPb/VhNe\n" \
"tAPQRqHfBlDkVfyberug25G9t4GTJN4hhLbo2gOT6piQR43MRcH/DBpoY6waEMcV\n" \
"N3J8FXHl65vKbOoZcvWPXqC0il9vQTPUTX+d26qA06CAS9te9vs4jtcsLlQ7Bc8s\n" \
"AyldH5OR5SWpw9rIHWAX4UoobXONDc/gokyfmxnIEOUywG+18qQP0XOHmJi7JAgE\n" \
"/dnHTx/E4Gl9qqs57bctYC3+HuK9whQ80tEBLVgXTglQLWFAEj8CAwEAAaNCMEAw\n" \
"HQYDVR0OBBYEFO0nWf3FQJ1IDq4YnFr4uVgAkjc7MB8GA1UdIwQYMBaAFNvjcOBa\n" \
"/HC66IZSAB73rI6+nbbpMA0GCSqGSIb3DQEBCwUAA4IBAQAa9wWqb5d9OZpDEWiC\n" \
"mMPkaE6fnTCwyH86xQHYh/E4CdTG0UaGwDjYNY6QrRLg9noN7IIHqQeXLYu3P2O2\n" \
"x1zLmHiPlGPXi0puml33MkZZ/+iSA6sk0mrHrA376h2FkyIo3yvRWr1+4JaXi9YP\n" \
"KkuGYK6HrwpkULWECaP8+Y+nxscnsBaQvN35XBORtIt73F2rO1n1EjI4srNncRan\n" \
"EIXus8PK0rce5PQSMuGJLiPttEQJxdN5SQiS847ZvI78RS2pano23K0c2BcbbZ8y\n" \
"l784lsZA5sz/IpAUDtd54vX4HBnspbRlqGYJA8iOYBnslEiduBbT//kMHpUCXxE/\n" \
"1VBa\n" \
"-----END CERTIFICATE-----";
const char ESP_RSA_key[] ="-----BEGIN PRIVATE KEY-----\n" \
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxadppSCyiBgoE\n" \
"jeN1wPdUd9sWLhaaukGc1Y0cs72+0zsUgnveg+tAfGP3V+9fESimf76Gq1nFIhA4\n" \
"J5OkMpVXVa0yWlz2/1YTXrQD0Eah3wZQ5FX8m3q7oNuRvbeBkyTeIYS26NoDk+qY\n" \
"kEeNzEXB/wwaaGOsGhDHFTdyfBVx5eubymzqGXL1j16gtIpfb0Ez1E1/nduqgNOg\n" \
"gEvbXvb7OI7XLC5UOwXPLAMpXR+TkeUlqcPayB1gF+FKKG1zjQ3P4KJMn5sZyBDl\n" \
"MsBvtfKkD9Fzh5iYuyQIBP3Zx08fxOBpfaqrOe23LWAt/h7ivcIUPNLRAS1YF04J\n" \
"UC1hQBI/AgMBAAECggEAA18lIPoXqw6dUx/VMlA0Ax1yAvZmRJOEmrPuRhzeXsmJ\n" \
"5mZib0SnjGawyasYqABd+ugTmWCZSKdQkpih9C1n7Cx7KalQ+fq5So3yst3a8cmY\n" \
"x6HHRpE34Gf6tEbcPXCr8zLE4GsFdaryeurHCVlX/AtaUggo2MT4C6iKELlt+Oej\n" \
"HEb9d9yic6uz/13Ln5lLBVkdI3Uc0ZfGv+w8VJKXtPfOQEdoJRCC+S3/H0AtDCOg\n" \
"SxQP/C4IybjbO3w0I+PZhCRHtACaP32oIweReER8Vg9TwZdBTFHZBeubEV8DSewb\n" \
"YAc64UnDbr6Ct6W1EmxexTVnyjjHZA4C26gYlNb3IQKBgQDX3nMJKZGP+0+Z9dwz\n" \
"TX1aW63IsmfNLEZbskO18fQSBp4D4bZpll5y6BVvT6xTMB5+3ihQD5d1o/WOK4sB\n" \
"E6WmB0/y8kxUZ/mHkUB5BXy1VrwrHG0BjGUFrxxDcehN/2fzSuxYhIlfa4ZQYEs4\n" \
"Wr7+4qTI+T6siIqEPTfSlXRCoQKBgQDSZT8wMSVECEv2mWqvyEapkH36j7P+7r3x\n" \
"kb8neTVlgh2HjM7Icn/DyCkd7CDBoriuLR+aLg0AKsmkwGNVIR0SEzfSIkC54Wiq\n" \
"R13Gx9svAfZ5pvQtSFL3CLjW+wVoUiAGec5ISA94TRpgpqlmjkapYdwSjVcV3ITk\n" \
"lfHeqcUI3wKBgDhhfFAvUDp33AGNSncHzS61dT1PA3d+Ed5PQAocaK/wlILVCAyp\n" \
"3n9KiJarC4oqrjxaj9LhT6DFMxRv4P1mAUTM8h+1EySUh4LV+C3jtf+y6LCl2v6l\n" \
"iZkjdFFVReRhSegscHBqJWsLrWf+zoaohOwTjBCFsM3lV7BUQOk6acQhAoGBALhn\n" \
"lz+FA7WiU/o6s0CImC6Mf256P3gFBqRRayqM2Rk0Nu+UobUcbhFKQYeBa6BsH9RB\n" \
"pn47OJfZ6Mym9ykpEdLC110tOm/xOgxs6quMhfaokMBFbaS2zEjK8z8x2qZ5vKoQ\n" \
"XpYJ2s1FPwZRbQ5/Sz2wkPQNv7NgiXXUWp8fS5wfAoGAJJeQJPHeKvefso2xteTs\n" \
"WdWYKwdwDmeKxaW69nrj4agM5kskqORcMlW006wqfyJ75qSNzrHg23IGwPGm6FOk\n" \
"sVlIoT8mlC0+Ax/pWQmFmUWSp1R0bbPYKgMHUlFSlp6xw/0CX08V2KpYt0VDCubC\n" \
"+TKZz5YdUqwF5ijN1aCZvxY=\n" \
"-----END PRIVATE KEY-----";
WiFiClientSecure espClient;
PubSubClient client(espClient);
time_t now;
time_t nowish = 1510592825;
void NTPConnect(void) {
Serial.print("Setting time using SNTP");
configTime(1 * 3600, 0 * 3600, "pool.ntp.org", "time.nist.gov");
now = time(nullptr);
while (now < nowish) {
delay(500);
Serial.print(".");
now = time(nullptr);
}
Serial.println("done!");
struct tm timeinfo;
gmtime_r(&now, &timeinfo);
Serial.print("Current time: ");
Serial.print(asctime(&timeinfo));
}
void setup() {
// Set software serial baud to 115200;
Serial.begin(115200);
// Connecting to a WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
NTPConnect();
//Connecting to a mqtt broker width ssl certification
espClient.setCACert(CA_cert);
//espClient.setInsecure();
espClient.setCertificate(ESP_CA_cert); // for client verification
espClient.setPrivateKey(ESP_RSA_key); // for client verification
// Connect to the MQTT Broker remotely
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp32-client";
client_id += String(WiFi.macAddress());
// Print the Name and the id of the esp32 controller
Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str());
if (client.connect( client_id.c_str())) {
Serial.println("Public emqx mqtt broker connected");
} else {
Serial.print("failed with state ");
Serial.println(client.state());
delay(2000);
}
}
// Publish and Subscribe
client.publish(topic, "Hi I'm ESP32 ^^");
client.subscribe(topic);
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
Serial.println("-----------------------");
}
void loop() {
client.loop();
client.publish(topic, "message sent from the esp32 to MQTT BROKER encrypted");
// Send a message every 10 seconds
delay(10000);
}