#include <WiFi.h>
#include <DHT.h>
#include <ThingsBoard.h>
#include <PubSubClient.h>
// WiFi credentials
const char *ssid = "Wokwi-GUEST";
const char *password = "";
// ThingsBoard credentials
#define TOKEN "YOUR_DEVICE_TOKEN" // Replace with your ThingsBoard device token
const char *thingsboardServer = "thingsboard.cloud";
// DHT sensor setup
#define DHTPIN 2 // Pin where the DHT sensor is connected
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
ThingsBoard tb(client);
unsigned long lastSend;
void setup() {
Serial.begin(115200);
dht.begin();
delay(10);
// Connect to WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Initialize ThingsBoard connection
client.setServer(thingsboardServer, 1883);
lastSend = 0;
}
void loop() {
if (!tb.connected()) {
reconnect();
}
if (millis() - lastSend > 1000) { // Update and send every 1 second
sendDataToThingsBoard();
lastSend = millis();
}
tb.loop();
}
void sendDataToThingsBoard() {
Serial.println("Reading sensor data");
// Reading temperature or humidity
float humidity = dht.readHumidity();
// Temperature in Celsius
float temperature = dht.readTemperature();
// Check if reading the sensor failed
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.println("Sending data to ThingsBoard:");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C ");
tb.sendTelemetryFloat("temperature", temperature);
tb.sendTelemetryFloat("humidity", humidity);
}
void reconnect() {
// Loop until reconnected
while (!tb.connected()) {
Serial.print("Connecting to ThingsBoard...");
if (tb.connect("ESP32_Device", TOKEN)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(tb.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}