#include "DHT.h"
#include <WiFi.h>
#include <ThingsBoard.h>
#include <PubSubClient.h> // Wajib untuk MQTT client
#include <MQTTPubSubClient.h>
// WiFi
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Token dari ThingsBoard (Device Access Token)
#define TOKEN "wza1n00omc7yq66merlp"
// DHT
#define DHTPIN 15
#define DHTTYPE DHT22
// ThingsBoard server
char thingsboardServer[] = "thingsboard.cloud";
// WiFi & MQTT
WiFiClient espClient;
PubSubClient mqttClient(espClient);
ThingsBoard tb(mqttClient);
// Sensor DHT
DHT dht(DHTPIN, DHTTYPE);
int status = WL_IDLE_STATUS;
unsigned long lastSend;
void setup() {
Serial.begin(115200);
dht.begin();
delay(10);
InitWiFi();
lastSend = 0;
}
void loop() {
if (!tb.connected()) {
reconnect();
}
if (millis() - lastSend > 1000) { // kirim data tiap 1 detik
kirimDataKeThingsboard();
lastSend = millis();
}
tb.loop();
}
void kirimDataKeThingsboard() {
Serial.println("Mengambil data sensor...");
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT!");
return;
}
Serial.println("Mengirim data ke ThingsBoard:");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
tb.sendTelemetryData("temperature", temperature);
tb.sendTelemetryData("humidity", humidity);
}
void InitWiFi() {
Serial.println("Menghubungkan WiFi...");
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi terhubung!");
}
void reconnect() {
// pastikan WiFi nyambung
while (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi putus, mencoba ulang...");
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
delay(1000);
}
// pastikan ThingsBoard nyambung
while (!tb.connected()) {
Serial.print("Menghubungkan ke ThingsBoard...");
if (tb.connect(thingsboardServer, TOKEN)) {
Serial.println("[DONE]");
} else {
Serial.println("[FAILED], retry dalam 5 detik");
delay(5000);
}
}
}