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 dikendalikan dari jarak jauh 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);
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/led");
}
else {
Serial.println("MQTT gagal terhubung");
Serial.println("Sedang konek ulang, sabar!");
}
}
}
void pesan(String topic, String payload){
if (payload == "1"){
digitalWrite(13, HIGH);
client.publish("wokwi/cek/statusPompa", "Pompa ON");
}
else {
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);
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");
}
else {
client.publish("wokwi/cek/kelembapanTanah", "Tanah Kering");
}
delay (2000);
}