#include <WiFi.h>
#include <DHT.h>
#include <PubSubClient.h>
// Wi-Fi credentials
const char* ssid = "Wokwi-GUEST"; // Replace with your Wi-Fi SSID
const char* password = ""; // Replace with your Wi-Fi password
// ThingsBoard details
const char* mqtt_server = "demo.thingsboard.io";
const char* device_token = "z7yCMHWekGL1LmIuDKCF"; // Replace with your device's API token
#define DHTPIN 14 // Pin connected to the data pin of the DHT22 sensor
#define DHTTYPE DHT22 // Define the sensor type as DHT22
DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor
WiFiClient espClient; // WiFi client for MQTT
PubSubClient client(espClient); // MQTT client
void setup() {
Serial.begin(115200);
dht.begin();
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(5000);
Serial.print(".");
}
Serial.println("Connected to WiFi");
// Set up MQTT server and callback
client.setServer(mqtt_server, 1883);
}
void reconnect() {
int attempts = 0;
// Loop until we're reconnected
while (!client.connected() && attempts < 10) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP32Client", device_token, NULL)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
attempts++;
delay(500);
}
}
if (attempts >= 10) {
Serial.println("Max attempts reached, check connection!");
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long currentMillis = millis();
static unsigned long lastPublishTime = 0;
unsigned long interval = 1000; // 1 seconds
if (currentMillis - lastPublishTime >= interval) {
lastPublishTime = currentMillis;
// Read temperature and humidity
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// If the reading fails, print an error and return
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Print the readings to Serial Monitor
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% Temperature: ");
Serial.print(temperature);
Serial.println("°C");
// Create payload (JSON format) to send to ThingsBoard
String payload = "{\"temperature\":";
payload += temperature;
payload += ",\"humidity\":";
payload += humidity;
payload += "}";
// Publish the payload to ThingsBoard
client.publish("v1/devices/me/telemetry", payload.c_str());
}
}