Tutorial Belanja komponen

Tutorial › Tanaman & Air

Monitor Kelembapan Tanah Pot

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINVCCGNDDOAOSensor kelembapan tanah

Tancapkan sensor di pot dan pantau kelembapan tanah dari HP. Grafik memperlihatkan seberapa cepat tanah mengering, dan Klenik memberi tanda saat tanaman perlu disiram. Proyek ini cocok sebagai langkah awal sebelum penyiram otomatis 061.

Sensor tanah adalah dua batang konduktor. Tanah basah menghantarkan listrik lebih baik, jadi tegangan di pin AO turun saat tanah basah. ESP32 membaca angka itu di GPIO34 sebanyak 10 kali lalu merata-ratanya, kemudian mengubahnya menjadi 0-100% memakai dua angka kalibrasi.

Status KERING menyala kalau kelembapan turun di bawah batas slider. Status itu baru padam setelah kelembapan naik 10% di atas batas (histeresis, seperti proyek 061). Pesan di Text Log hanya dikirim saat status berubah, bukan setiap 5 detik.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Sensor kelembapan tanah + modul1Rp8.500
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 31Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp87.000
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
Sensor kelembapan tanah VCC→3V3merah
Sensor kelembapan tanah GND→GNDhitam
Sensor kelembapan tanah AO→D34 GPIO34hijau

Langkah 2: Siapkan dashboard Klenik

Kelembapan Tanahichibot/budi1234/p062/tanah
0 – 10054%
0 detik lalu
Perlu Disiramichibot/budi1234/p062/kering
KERING
0 detik lalu
Batas Keringichibot/budi1234/p062/batas
35%35 of 80%
0 detik lalu
Grafik Tanahichibot/budi1234/p062/tanah
48%
0.0%12 titik100.0%
0 detik lalu
Catatanichibot/budi1234/p062/log
Tanah kering (33%), waktunya menyiram
Sudah disiram, tanah 71%
0 detik lalu

Cara cepat: unduh p062.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
Gauge
Kelembapan Tanah
ichibot/KODE/p062/tanah0–100 %
Indikator Boolean
Perlu Disiram
ichibot/KODE/p062/keringON = 1 “KERING”, OFF = 0
Slider Output
Batas Kering
ichibot/KODE/p062/batas10–80 %
Chart
Grafik Tanah
ichibot/KODE/p062/tanah0–100 %
Text Log
Catatan
ichibot/KODE/p062/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: ESP32 Dev Module. Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).

p062.inoUnduh .ino
// Proyek 062 - Monitor Kelembapan Tanah Pot
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>

// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";

// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_BATAS  = "ichibot/budi1234/p062/batas";
const char* TOPIK_TANAH  = "ichibot/budi1234/p062/tanah";
const char* TOPIK_LOG    = "ichibot/budi1234/p062/log";
const char* TOPIK_KERING = "ichibot/budi1234/p062/kering";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_TANAH = 34;
const int NILAI_KERING = 3300;        // angka mentah sensor di udara
const int NILAI_BASAH  = 1300;        // angka mentah sensor di segelas air
int batas = 35;                       // di bawah ini tanaman perlu disiram (%)
bool kering = false;
unsigned long kirimTerakhir = 0;

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  batas = p.toInt();
}

void langganan() {
  mqtt.subscribe(TOPIK_BATAS);
}

int bacaTanah() {                     // rata-rata 10 bacaan supaya stabil
  long jumlah = 0;
  for (int i = 0; i < 10; i++) { jumlah += analogRead(PIN_TANAH); delay(5); }
  int mentah = jumlah / 10;
  int persen = constrain(map(mentah, NILAI_KERING, NILAI_BASAH, 0, 100), 0, 100);
  Serial.printf("Mentah %d -> %d%%\n", mentah, persen);
  return persen;
}

sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)void sambungWiFi() { WiFi.begin(WIFI_NAMA, WIFI_PASS); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" OK, IP " + WiFi.localIP().toString()); } void sambungMQTT() { while (!mqtt.connected()) { if (mqtt.connect(WiFi.macAddress().c_str())) { Serial.println("Terhubung ke Klenik"); langganan(); } else { Serial.println("Broker gagal, coba lagi 3 detik"); delay(3000); } } }
void setup() { Serial.begin(115200); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - kirimTerakhir >= 5000) { kirimTerakhir = millis(); int persen = bacaTanah(); mqtt.publish(TOPIK_TANAH, String(persen).c_str()); if (!kering && persen < batas) { kering = true; mqtt.publish(TOPIK_LOG, ("Tanah kering (" + String(persen) + "%), waktunya menyiram").c_str()); } else if (kering && persen > batas + 10) { kering = false; mqtt.publish(TOPIK_LOG, ("Sudah disiram, tanah " + String(persen) + "%").c_str()); } mqtt.publish(TOPIK_KERING, kering ? "1" : "0"); } }

Langkah 4: Pahami kodenya

  1. Kalibrasi sama seperti proyek 061: lihat angka Mentah di Serial Monitor saat sensor di udara dan saat dicelup air, lalu isi di sini.
  2. Sepuluh bacaan dirata-rata. ADC ESP32 sedikit berisik, jadi rata-rata membuat grafik lebih halus.
  3. Histeresis: status KERING baru hilang setelah tanah 10% di atas batas. Tanpa jarak ini status bisa bolak-balik saat angkanya di sekitar batas.