#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
const char* WIFI_SSID = "Wokwi-GUEST"; // Nama WiFi Anda
const char* WIFI_PASSWORD = ""; // Kata sandi WiFi Anda
const char* TOKEN = "penyiramanotomatis"; // Token dari ThingsBoard
const char* THINGSBOARD_SERVER = "thingsboard.cloud"; // Alamat server ThingsBoard
const int THINGSBOARD_PORT = 1883; // Port MQTT ThingsBoard
const int PUMP_PIN = 13; // Pin untuk mengontrol pompa air
const int SOIL_MOISTURE_PIN = 34; // Pin analog untuk sensor kelembapan tanah pada ESP32
const int LAMP_PIN = 14; // Pin untuk mengontrol lampu
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(9600);
pinMode(PUMP_PIN, OUTPUT);
setup_wifi();
client.setServer(THINGSBOARD_SERVER, THINGSBOARD_PORT);
}
void loop() {
if (!client.connected()) {
reconnect();
}
float kelembabanTanah = bacaKelembabanTanah();
kirimDataKeThingsboard(kelembabanTanah);
// Kontrol lampu berdasarkan nilai kelembaban tanah
if (kelembabanTanah < 50.0) {
digitalWrite(PUMP_PIN, HIGH); // Hidupkan lampu
} else {
digitalWrite(PUMP_PIN, LOW); // Matikan lampu
}
delay(1000);
}
float bacaKelembabanTanah() {
int nilaiBacaan = analogRead(SOIL_MOISTURE_PIN);
// Ubah bacaan analog menjadi kelembaban dalam persen
float kelembabanTanah = map(nilaiBacaan, 0, 4095, 0, 100);
// Tampilkan nilai kelembaban di Serial Monitor
Serial.print("Nilai bacaan analog = ");
Serial.print(nilaiBacaan);
Serial.print(", Kelembaban tanah = ");
Serial.print(kelembabanTanah);
Serial.println(" %");
return kelembabanTanah;
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP32Client", TOKEN, NULL)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 1 seconds");
delay(1000);
}
}
}
void kirimDataKeThingsboard(float kelembabanTanah) {
DynamicJsonDocument doc(128);
doc["kelembaban_tanah"] = kelembabanTanah;
char buffer[128];
size_t n = serializeJson(doc, buffer);
if (client.publish("v1/devices/me/telemetry", buffer)) {
Serial.println("Data terkirim ke ThingsBoard");
} else {
Serial.println("Gagal mengirim data ke ThingsBoard");
}
}