#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// WiFi credentials
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// ThingsBoard credentials
#define TOKEN "g4pwye1ac6t7z78pr9qn"
#define THINGSBOARD_SERVER "thingsboard.cloud"
// DHT sensor configuration
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastSend = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
float globalHumidity = 0;
float globalTemperature = 0;
void setup(){
Serial.begin(115200);
// inisialisasi DHT Sensor
dht.begin();
// wifi setup
setup_wifi();
// thingsboard client setup
client.setServer(THINGSBOARD_SERVER, 1883);
// LCD Setup
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop(){
// read dht22 sensor data
if(readDHT22()){
String humid = String(globalHumidity);
String temp = String(globalTemperature);
lcd.setCursor(0, 0);
lcd.print("Temp: " + temp + "'C");
lcd.setCursor(0, 1);
lcd.print("Humidity: " + humid + "%");
}else{
lcd.setCursor(0, 0);
lcd.print("Menunggu data");
lcd.setCursor(0, 1);
lcd.print("DHT22!");
}
//
// reconnect if disconnected
if (!client.connected()) {
reconnect();
}
// Send data every 1 seconds
if (millis() - lastSend > 1000) {
sendTelemetryData();
lastSend = millis();
}
}
bool readDHT22(){
globalHumidity = dht.readHumidity();
globalTemperature = dht.readTemperature();
Serial.println("[DHT22] Mengambil data sensor...");
if (isnan(globalHumidity) || isnan(globalTemperature)) {
Serial.println("[DHT22] Gagal membaca sensor!");
return false;
}else{
Serial.println("[DHT22] Humidity: " + String(globalHumidity) + "%");
Serial.println("[DHT22] Temperature: " + String(globalTemperature) + "'C");
return true;
}
}
void setup_wifi(){
Serial.println();
Serial.print("[WiFi] Menghubungkan ke " + String(WIFI_SSID));
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n[WiFi] Terhubung!");
Serial.print("[WiFi] IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect(){
while (!client.connected()){
Serial.println("[RCN] Menghubungkan ke server...");
// Attempt to connect (Client ID, Username, Password)
if (client.connect("ESP32Client", TOKEN, "")) {
Serial.println("[RCN] Terhubung!");
} else {
Serial.print("[RCN] Gagal, rc=" + String(client.state()));
Serial.println(", mencoba lagi dalam 5 detik!");
delay(5000);
}
}
}
void sendTelemetryData(){
// Prepare JSON payload
String payload = "{\"humidity\":";
payload += String(globalHumidity);
payload += ",\"temperature\":";
payload += String(globalTemperature);
payload += "}";
// Send telemetry data to ThingsBoard
if (client.publish("v1/devices/me/telemetry", payload.c_str())) {
Serial.println("[UPL] Data terupload!");
} else {
Serial.println("[UPL] Upload gagal!!");
}
}