#include <WiFi.h>
#include <Arduino_MQTT_Client.h>
#include <ThingsBoard.h>
#include <DHT.h>
// ---------- WiFi & ThingsBoard Config ----------
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TB_SERVER "thingsboard.cloud"
#define TB_TOKEN "AVK7CR1JBGrpRneCcqV1"
// ---------- Globals ----------
WiFiClient wifiClient;
Arduino_MQTT_Client mqttClient(wifiClient);
ThingsBoard tb(mqttClient);
// ---------- DHT22 Sensor ----------
#define DHTPIN 16
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ---------- Connect to WiFi ----------
void connectToWiFi() {
Serial.print("Connecting to WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
// ---------- Connect to ThingsBoard ----------
void connectToThingsBoard() {
while (!tb.connected()) {
Serial.println("Connecting to ThingsBoard...");
if (tb.connect(TB_SERVER, TB_TOKEN)) {
Serial.println("Connected to ThingsBoard!");
} else {
Serial.println("Failed to connect. Retrying...");
delay(1000);
}
}
}
void setup() {
Serial.begin(115200);
// Init DHT
dht.begin();
// Connect
connectToWiFi();
connectToThingsBoard();
}
void loop() {
// Maintain Connections
if (WiFi.status() != WL_CONNECTED) connectToWiFi();
if (!tb.connected()) connectToThingsBoard();
tb.loop();
// Read DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Serial Monitor Output
Serial.println("-----");
Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" C");
Serial.print("Humidity: "); Serial.print(humidity); Serial.println(" %");
// Send to ThingsBoard
tb.sendTelemetryData("Temperature", temperature);
tb.sendTelemetryData("Humidity", humidity);
delay(2000);
}