#include <PubSubClient.h>
#include <WiFi.h>
#include "DHT.h"
#define DHTPIN 25
#define DHTTYPE DHT22
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "EqMK6WDBpvkfLSXjOvKZ"
char thingsboardServer[] = "demo.thingsboard.io";
WiFiClient wifiClient;
PubSubClient client(wifiClient);
DHT dht(DHTPIN, DHTTYPE);
int status = WL_IDLE_STATUS;
unsigned long lastSend;
void setup(){
Serial.begin(115200);
delay(10);
InitWiFi();
dht.begin();
client.setServer(thingsboardServer,1883);
lastSend = 0;
}
void loop(){
if(!client.connected()){
reconnect();
}
if(millis() - lastSend > 2000){
getAndSendTemperatureAndHumidityData();
lastSend = millis();
}
client.loop();
}
void getAndSendTemperatureAndHumidityData(){
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print("Humidity: ");
Serial.print(t);
Serial.print(" % ");
String temperature = String(t);
String humidity = String(h);
Serial.print( "Sending temperature : [" );
Serial.print( temperature );
Serial.println( "]->" );
Serial.print( "Sending humidity : [" );
Serial.print( humidity );
Serial.println( "]->" );
String payload1 = "{";
payload1 += "\"temperature\":"; payload1 += temperature;
payload1 += "}";
String payload2 = "{";
payload2 += "\"humidity\":"; payload2 += humidity;
payload2 += "}";
// char telemetry[100];
// payload.toCharArray( telemetry, 100 );
client.publish( "v1/devices/me/telemetry", String(payload1).c_str() );
Serial.println( payload1);
client.publish( "v1/devices/me/telemetry", String(payload2).c_str() );
Serial.println( payload2);
Serial.println(lastSend);
}
void InitWiFi(){
Serial.println("Connecting to AP ...");
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
void reconnect(){
while (!client.connected()){
status = WiFi.status();
if(status != WL_CONNECTED){
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
Serial.print("Connecting to ThingsBoard node ...");
if ( client.connect("ESP32 Device", TOKEN, NULL)){
Serial.println( "[DONE]" );
}
else {
Serial.print("[FAILED] [ rc = " );
Serial.print(client.state() );
Serial.println( " : retrying in 5 seconds]");
delay( 5000 );
}
}
}