#include "DHT.h"
#include <WiFi.h>
#include <ThingsBoard.h>
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6)
// variable for storing the potentiometer value
#define TOKEN "0xqP2K6brEHtF844S9HN"
// DHT
#define DHTPIN 15
#define DHTTYPE DHT22
char thingsboardServer[] = "thingsboard.cloud";
WiFiClient client1;
// Initialize DHT sensor.
DHT dht(DHTPIN, DHTTYPE);
ThingsBoard device1(client1);
int status = WL_IDLE_STATUS;
unsigned long lastSend;
int humidity2 = 0;
int temperature2 = 0;
void setup()
{
Serial.begin(115200);
dht.begin();
delay(10);
InitWiFi();
lastSend = 0;
}
void loop()
{
if ( !device1.connected() ) {
reconnect();
}
// Reading temperature or humidity takes about 250 milliseconds!
float humidity1 = dht.readHumidity();
// Read temperature as Celsius (the default)
float temperature1 = dht.readTemperature();
if ( millis() - lastSend > 1000 ) { // Update and send only after 1 seconds
kirimDataKeThingsboard(humidity1, temperature1);
lastSend = millis();
}
device1.loop();
}
void kirimDataKeThingsboard(float humidity, float temperature)
{
Serial.println("Collecting temperature data.");
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.println("Data Temp and hum:");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C ");
if (humidity != humidity2 ) {
Serial.println("Sending data to ThingsBoard:");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C ");
device1.sendTelemetryFloat("temperature", temperature);
device1.sendTelemetryFloat("humidity", humidity);
humidity2 = humidity;
temperature2 = temperature;
} else {
}
}
void InitWiFi()
{
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
void reconnect() {
// Loop until we're reconnected
while (!device1.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 ( device1.connect(thingsboardServer, TOKEN) ) {
Serial.println( "[DONE]" );
} else {
Serial.print( "[FAILED]" );
Serial.println( " : retrying in 5 seconds]" );
// Wait 5 seconds before retrying
delay( 5000 );
}
}
}