#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DHTesp.h"
// DHT object
DHTesp dhtSensor;
// Replace with your sensor input pin
const int dhtPin = 15;
// Don't change these values. This works for the wokwi emulator
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Replace with your MQTT broker IP address
const char* mqtt_server = "mqtt.eclipseprojects.io";
//MQTT topic
const char* mqtt_topic = "HAN/TBK/Weer/";
//MQTT client device name
const char* client_name = "Sensor_2";
//Client objects
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dhtSensor.setup(dhtPin, DHTesp::DHT22);
// Connect to Wi-Fi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Connect to MQTT broker
client.setServer(mqtt_server, 1883);
while (!client.connected()) {
Serial.println("Connecting to MQTT broker...");
if (client.connect("ESP32_IOT_Sensor")) {
Serial.println("Connected to MQTT broker");
} else {
Serial.print("Failed with state ");
Serial.print(client.state());
delay(2000);
}
}
}
void loop() {
// check if we are still connected
if (!client.connected()) {
Serial.println("not Connected to MQTT broker");
}
// print sensor data
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 1) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
// Create JSON object
StaticJsonDocument<200> doc;
doc["humidity"] = data.humidity;
doc["temperature"] = data.temperature;
doc["device_ID"] = client_name;
// Serialize JSON object to string
char jsonBuffer[200];
serializeJson(doc, jsonBuffer);
// Publish JSON string to MQTT broker
char s [80];
strcpy(s, mqtt_topic);
strcat(s, client_name);
client.publish(s, jsonBuffer);
delay(5000);
}