#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <ThingsBoard.h>
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "Yeremia2911"
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
char thingsboardServer[] = "thingsboard.cloud";
WiFiClient client1;
ThingsBoard device1(client1);
int status = WL_IDLE_STATUS;
unsigned long lastSend;
void setup() {
Serial.begin(9600);
Serial.println("Sensor Suhu Kolam Ikan");
lcd.begin(16, 2);
dht.begin();
delay(10);
InitWiFi();
lastSend = 0;
}
void loop() {
if (!device1.connected()) {
reconnect();
}
if (millis() - lastSend > 10000) { // Mengirim data setiap 10 detik
float t = dht.readTemperature();
float h = dht.readHumidity();
Serial.print("Suhu: ");
Serial.print(t);
Serial.print(" C, Kelembaban: ");
Serial.print(h);
Serial.println(" %");
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Lembab: ");
lcd.print(h);
lcd.print(" %");
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT sensor!");
} else {
// Mengirim data ke ThingsBoard
device1.sendTelemetryFloat("temperature", t);
device1.sendTelemetryFloat("humidity", h);
lastSend = millis();
}
}
device1.loop();
delay(1000);
}
void InitWiFi() {
Serial.println("Menghubungkan ...");
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Berhasil terhubung!");
}
void reconnect() {
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("Berhasil terhubung!");
}
Serial.print("Menghubungkan ke ThingsBoard node ...");
if (device1.connect(thingsboardServer, TOKEN)) {
Serial.println("[DONE]");
} else {
Serial.print("[FAILED]");
Serial.println(" [ retrying in 5 seconds]");
delay(5000);
}
}
}