/**
ESP32 + DHT22 + NTP and MQTT Example for Wokwi
https://wokwi.com/projects/341509185573225043
*/
#include <WiFi.h>
#include "DHTesp.h"
#include "PubSubClient.h"
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 0
#define UTC_OFFSET_DST 0
#define ONBOARD_LED 2
#define LED 13
#define DHT_PIN 15
/**const int DHT_PIN = 15;*/
String timestamp ="";
String temp = "";
String humid = "";
String pstring = "";
DHTesp dhtSensor;
WiFiClient espClient;
PubSubClient client(espClient);
// MQTT Broker
const char *mqtt_broker = "broker.mqttdashboard.com";
const char *topic_in = "tonitestin";
const char *topic_out = "tonitestout";
const char *mqtt_username = "";
const char *mqtt_password = "";
const int mqtt_port = 1883;
//Local Time printing function
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Connection Err");
return;
}
//Serial.println(&timeinfo, "%H:%M:%S");
// Serial.println(&timeinfo, "%Y%m%dT%H%M%S");
char timeStringBuff[50]; //50 chars should be enough
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y%m%dT%H%M%S", &timeinfo);
//print like "const char*"
Serial.println(timeStringBuff);
//Optional: Construct String object
//String asString(timeStringBuff);
timestamp = timeStringBuff;
}
void setup() {
pinMode(LED, OUTPUT);
pinMode(ONBOARD_LED,OUTPUT);
Serial.begin(9600);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//WiFi connection
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
digitalWrite(ONBOARD_LED,HIGH);
delay(100);
digitalWrite(ONBOARD_LED,LOW);
Serial.print(".");
}
Serial.println(" Connected!");
digitalWrite(ONBOARD_LED,HIGH);
//MQTT Broker connection
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public " + String(mqtt_broker) + " connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
// publish and subscribe
client.publish(topic_out, "Hello World, I'm ESP32");
client.subscribe(topic_in);
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void callback(char *topic_in, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic_in);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println("-----------------------");
// Switch on the LED if an 1 was received as first character
if ((char)payload[0] == '1') {
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
temp = "Temp: " + String(data.temperature, 2) + "°C";
humid = "Humidity: " + String(data.humidity, 1) + "%";
/**Serial.println(T);
Serial.println(H);
Serial.println("---");
*/
delay(1000);
printLocalTime();
pstring = timestamp +", " + temp + ", " + humid;
Serial.println("Message Out: " + pstring);
Serial.println("---");
//payload preparation and sending
int len = pstring.length();
char p [len];
pstring.toCharArray(p, len);
client.publish(topic_out, p);
client.loop();
}