#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 "B3mYTWNNKgcxxD4iI7pu"
char thingsboardServer[] = "demo.thingsboard.io";
WiFiClient wifiClient;
PubSubClient client(wifiClient);
DHT dht(DHTPIN, DHTTYPE);
int status = WL_IDLE_STATUS;
unsigned long lastSend;
const int led_pin = 4;
//#define led_pin 4
unsigned long led_timming;
bool led_state = false;
void setup(){
Serial.begin(115200);
delay(10);
pinMode(led_pin, OUTPUT);
digitalWrite(led_pin, HIGH);
led_timming = millis();
InitWiFi();
dht.begin();
client.setServer(thingsboardServer,1883);
lastSend = 0;
}
void loop(){
if(!client.connected()){
reconnect();
}
if(millis() - lastSend > 2000){
getAndSendTemperatureAndHumidityData();
lastSend = millis();
}
client.loop();
if(millis() - led_timming > 1000){
led_timming = millis();
led_state = !led_state;
if(led_state == true) digitalWrite(led_pin, HIGH);
else digitalWrite(led_pin, LOW);
}
}
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 );
}
}
}