Project MQTT Sensor Kelembapan Tanah, DHT22, dan Pompa Air
Project MQTT Sensor Kelembapan Tanah, DHT22, dan Pompa Air
Project ini untuk monitoring kelembapan tanah, suhu dan kelembapan udara dari jarak jauh dengan komunikasi MQTT (lebih realtime dan cepat)
Pompa Air On/Off dapat dikendalikan dari jarak jauh ataupun dikendalikan secara otomatis berdasarkan kondisi kelembapan tanah dengan fitur aktif auto oleh Pengguna
Rangkaian:
SIG(Sensor) --> 33 (ESP32)
GND(Sensor) --> GND (ESP32)
VCC(Sensor) --> 3.3V (ESP32)
SDA(DHT22) --> 21 (ESP32)
GND(DHT22) --> GND (ESP32)
VCC(DHT22) --> 3.3V (ESP32)
C (LED) --> GND (ESP32)
A (LED) --> 13 (ESP32)
Note: Jangan lupa masukkan Library MQTT dan WiFi
ESP32 - MQTT.h
#include <WiFi.h>
#include <MQTT.h>
#include <DHT.h>
String ssid = "Wokwi-GUEST";
String pass = "";
WiFiClient net;
MQTTClient client;
DHT dht(21,DHT22);
String otomatis ="";
void konekWifi(){
Serial.println("Coba Konek ke WiFi...");
WiFi.begin(ssid,pass);
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(50);
}
Serial.println("\nWiFi Terhubung");
}
void konekMqtt(){
while (!client.connected()){
Serial.println("Coba konek ke MQTT...");
if (client.connect("Bebas-Aja")){
Serial.println("Terhubung ke MQTT");
client.publish("wokwi/cek/koneksi", "online");
client.subscribe("wokwi/cek/+");
}
else {
Serial.println("MQTT gagal terhubung");
Serial.println("Sedang konek ulang, sabar!");
}
}
}
void pesan(String topic, String payload){
if(topic == "wokwi/cek/otomatis"){
otomatis = payload;
}
if (topic == "wokwi/cek/led"){
if(payload == "1" && otomatis == "0"){
digitalWrite(13, HIGH);
client.publish("wokwi/cek/statusPompa", "Pompa ON");
}
else if (payload == "0" && otomatis == "0"){
digitalWrite(13, LOW);
client.publish("wokwi/cek/statusPompa", "Pompa OFF");
}
}
}
void setup() {
Serial.begin(115200);
pinMode(33, INPUT);
pinMode (13, OUTPUT);
digitalWrite(13, LOW);
konekWifi();
client.begin("mqtt-dashboard.com", net);
client.onMessage(pesan);
dht.begin();
client.setWill("wokwi/cek/koneksi", "offline", true, 1);
}
void loop() {
if (!client.connected()){
konekMqtt();
}
client.loop();
float t = dht.readTemperature();
float h = dht.readHumidity();
String suhu = String(t,1);
String kel = String(h,1);
int baca = analogRead(33);
int s = map(baca, 0 , 4096 , 0, 100);
Serial.println("nilai sensor tanah: "+ (String) s);
Serial.println("suhu udara: "+ suhu);
Serial.println("kelembapan udara: "+ kel);
Serial.println("Otomatis: "+ otomatis);
client.publish("wokwi/cek/suhu", suhu.c_str());
client.publish("wokwi/cek/kelembapan", kel.c_str());
if (s>50){
client.publish("wokwi/cek/kelembapanTanah", "Tanah Basah");
if (otomatis == "1"){
digitalWrite(13, LOW);
client.publish("wokwi/cek/statusPompa", "Pompa OFF");
}
}
else {
client.publish("wokwi/cek/kelembapanTanah", "Tanah Kering");
if (otomatis == "1"){
digitalWrite(13, HIGH);
client.publish("wokwi/cek/statusPompa", "Pompa ON");
}
}
delay (2000);
}