#include <WiFi.h>
#include <ArduinoMqttClient.h>
#include "DHT.h" // Include DHT library
// WiFi Credentials
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// ThingsBoard Credentials
#define THINGSBOARD_SERVER "demo.thingsboard.io"
#define THINGSBOARD_PORT 1883
#define TOKEN "qZAkJmQwjT4lpmU5Eexz" // Replace with your actual token
// Sensor Setup
#define DHTPIN 13 // DHT22 connected to GPIO4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
void setup() {
Serial.begin(115200);
// Connect to WiFi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi!");
// Connect to ThingsBoard MQTT Broker
mqttClient.setId("ESP32_Client");
mqttClient.setUsernamePassword(TOKEN, ""); // Use token as username, no password
Serial.print("Connecting to ThingsBoard...");
if (!mqttClient.connect(THINGSBOARD_SERVER, THINGSBOARD_PORT)) {
Serial.println(" Failed!");
while (1);
}
Serial.println(" Connected!");
dht.begin(); // Initialize DHT sensor
}
void loop() {
if (!mqttClient.connected()) {
Serial.println("MQTT Disconnected! Reconnecting...");
mqttClient.connect(THINGSBOARD_SERVER, THINGSBOARD_PORT);
}
// Read sensor values
float temperature = dht.readTemperature(); // Celsius
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Publish telemetry data
String telemetry = "{\"temperature\":" + String(temperature) + ",\"humidity\":" + String(humidity) + "}";
mqttClient.beginMessage("v1/devices/me/telemetry");
mqttClient.print(telemetry);
mqttClient.endMessage();
Serial.println("Telemetry Sent: " + telemetry);
mqttClient.poll(); // Keep MQTT alive
delay(5000);
}