#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"
#define WIFI_PASSWORD ""
#define TOKEN "monitoringkipasangin"
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(0x27, 16, 2);
DHT dht(5, DHT22); // Pin, Jenis DHT
#define fan 2
#define relay 4
void setup() {
Serial.begin(9600);
pinMode(fan, OUTPUT);
digitalWrite(fan, 1);
lcd.begin(16, 2);
dht.begin();
InitWiFi();
mqttClient.setServer(thingsboardServer, 1883); // Port default untuk MQTT non-SSL
lastSend = 0;
lcd.init();
lcd.backlight();
}
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");
byte humidity = dht.readHumidity();
byte temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C ");
if (temperature >= 30) {
digitalWrite(fan, 1);
digitalWrite(4, HIGH);
ngeprint("Suhu panas", "Kipas angin on");
} else {
digitalWrite(fan, 0);
digitalWrite(4, LOW);
ngeprint("Suhu normal", "Kipas angin off");
}
// Membuat JSON Object
StaticJsonDocument<200> jsonBuffer;
jsonBuffer["temperature"] = temperature;
jsonBuffer["humidity"] = humidity;
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(const char* line1, const char* line2) {
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
}