#include <DHT.h> //Library DHT
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <PubSubClient.h> // Untuk MQTT
#include <ArduinoJson.h> // Untuk memudahkan pembuatan JSON
#define WIFI_AP "Wokwi-GUEST" // Ganti dengan nama WiFi Anda
#define WIFI_PASSWORD "" // Ganti dengan kata sandi WiFi Anda
#define TOKEN "monitoringkipasangin" // Ganti dengan token asli Anda
char thingsboardServer[] = "thingsboard.cloud";
int status = WL_IDLE_STATUS;
unsigned long lastSend;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient); // Menggunakan PubSubClient sebagai MQTT client
LiquidCrystal_I2C lcd (0x23, 16, 2);
DHT dht(2, DHT11); //Pin, Jenis DHT
#define fan 3
void setup(){
Serial.begin(9600);
pinMode(fan, OUTPUT);
lcd.begin(16,2);
dht.begin();
InitWiFi();
mqttClient.setServer(thingsboardServer, 1883); // Port default untuk MQTT non-SSL
lastSend = 0;
}
void loop(){
if (!mqttClient.connected()) {
reconnect();
}
if (millis() - lastSend > 1000) { // Update dan kirim tiap 1 detik
kirimDataKeThingsboard();
lastSend = millis();
}
mqttClient.loop();
}
void kirimDataKeThingsboard()
{
Serial.println("Mengambil data sensor");
float kelembaban = dht.readHumidity();
float suhu = dht.readTemperature();
if (isnan(kelembaban) || isnan(suhu)) {
Serial.println("Gagal membaca sensor DHT!");
return;
}
Serial.print("Suhu: ");
Serial.println(suhu);
Serial.print("Kelembaban: ");
Serial.println(kelembaban);
lcd.setCursor(0,0);
lcd.print("Suhu : ");
lcd.print(suhu);
lcd.print((char)223);
lcd.print("C");
if (suhu >= 29){
digitalWrite(fan, LOW);
ngeprint();
} else {
digitalWrite(fan, HIGH);
}
// Membuat JSON Object
StaticJsonDocument<200> jsonBuffer;
jsonBuffer["temperature"] = suhu;
jsonBuffer["humidity"] = kelembaban;
char JSONmessageBuffer[100];
serializeJson(jsonBuffer, JSONmessageBuffer);
mqttClient.publish("v1/devices/me/telemetry", JSONmessageBuffer);
}
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 (!mqttClient.connected()) {
Serial.print("Menghubungkan ke ThingsBoard server...");
// Menggunakan token sebagai ID klien MQTT
if (mqttClient.connect("DHTClientID", TOKEN, NULL)) {
Serial.println("[BERHASIL]");
} else {
Serial.print("[GAGAL] [ rc = ");
Serial.print(mqttClient.state());
Serial.println(" ] [Coba lagi dalam 5 detik]");
// Tunggu 5 detik sebelum mencoba lagi
delay(5000);
}
}
}
void ngeprint(){
lcd.setCursor(0,1);
lcd.print("Hareudang");
delay(1000);
lcd.setCursor(0,1);
lcd.print(" ");
delay(400);
lcd.setCursor(0,1);
lcd.print("Hareudang");
delay(1000);
lcd.setCursor(0,1);
lcd.print(" ");
delay(400);
lcd.setCursor(0,1);
lcd.print("Hareudang");
delay(1000);
lcd.setCursor(0,1);
lcd.print(" ");
delay(200);
lcd.setCursor(0,1);
lcd.print("Panas");
delay(450);
lcd.setCursor(0,1);
lcd.print(" ");
delay(400);
lcd.setCursor(0,1);
lcd.print("Panas");
delay(450);
lcd.setCursor(0,1);
lcd.print(" ");
delay(400);
lcd.setCursor(0,1);
lcd.print("Panas");
delay(2700);
lcd.setCursor(0,1);
lcd.print(" ");
delay(400);
lcd.setCursor(0,1);
}