Project MQTT Sensor Kelembapan Tanah, DHT22, dan Pompa Air
Project MQTT Sensor Kelembapan Tanah, DHT22, dan Pompa Air
Project ini untuk monitoring kelembapan tanah, status pompa air, suhu dan kelembapan udara dari jarak jauh dengan komunikasi MQTT (lebih realtime dan cepat)
Pompa Air On/Off berdasarkan kondisi tanah (Basah/Kering)
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);
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");
}
else {
Serial.println("MQTT gagal terhubung");
Serial.println("Sedang konek ulang, sabar!");
}
}
}
void setup() {
Serial.begin(115200);
pinMode(33, INPUT);
pinMode (13, OUTPUT);
digitalWrite(13, LOW);
konekWifi();
client.begin("mqtt-dashboard.com", net);
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);
client.publish("wokwi/cek/suhu", suhu.c_str());
client.publish("wokwi/cek/kelembapan", kel.c_str());
if (s > 50){
digitalWrite(13, LOW);
client.publish("wokwi/cek/kelembapanTanah", "Tanah Basah");
client.publish("wokwi/cek/statusPompa", "Pompa OFF");
}
else {
digitalWrite(13, HIGH);
client.publish("wokwi/cek/kelembapanTanah", "Tanah Kering");
client.publish("wokwi/cek/statusPompa", "Pompa ON");
}
delay (2000);
}