ESP32 ile Akıllı Bitki Sulama ve Toprak Nemi Takip Sistemi
- Tuncay liman
- 11 Kas 2025
- 4 dakikada okunur
Güncelleme tarihi: 12 Kas 2025

Bu proje, bir ESP32 kartını kullanarak bitki toprağının nem seviyesini ölçer ve belirli bir eşiğin altına düştüğünde otomatik olarak bitkiyi sular. Ayrıca, toprak nemi verilerini Wi-Fi üzerinden ücretsiz bir IoT bulut platformuna (örneğin ThingSpeak) göndererek uzaktan takip imkanı sağlar.
Projeyi Hayata Geçirme Adımları
Bu projeyi tamamlamak için izleyeceğimiz adımlar aşağıdadır.
Adım 1: Gerekli Donanım ve Yazılımı Temin Etme
Kategori | Bileşen Adı | Açıklama |
Donanım | 1. ESP32 Geliştirme Kartı | Temel mikrodenetleyicimiz. |
2. Toprak Nem Sensörü | Toprağın nemini ölçmek için (analog çıkışlı). | |
3. Su Pompası (küçük 3-6V) | Bitkiyi sulamak için kullanılacak pompa. | |
4. Röle Modülü (1 Kanal) | ESP32'nin su pompasını kontrol etmesi için. | |
5. Transistör (örneğin BC547 veya NPN tipi herhangi bir transistör) | Röle yerine pompayı doğrudan kontrol etmek için kullanılabilir (isteğe bağlı, basitleştirilmiş senaryo için). | |
6. Dış Güç Kaynağı (5V veya 6V pil/adaptör) | Su pompasına güç sağlamak için (ESP32'nin USB'si yeterli olmayabilir). | |
7. Hortum ve Küçük Su Kabı | Pompanın suyu çekeceği ve bitkiye ileteceği sistem. | |
8. Breadboard (Devre Tahtası) | Bileşenleri geçici olarak bağlamak için. | |
9. Bağlantı Kabloları (Jumper) | Bileşenleri birbirine bağlamak için (erkek-erkek, erkek-dişi). | |
10. Micro USB Kablosu | ESP32'yi bilgisayara bağlamak ve güç vermek için. | |
Yazılım | 1. Arduino IDE | Kodu yazacağımız ve karta yükleyeceğimiz programlama ortamı. |
2. ESP32 Kart Desteği | Arduino IDE'ye ESP32 kartlarını eklemek için. | |
3. ThingSpeak Hesabı | Verileri internet üzerinden görmek için ücretsiz bir IoT platformu hesabı. |
Adım 2: Geliştirme Ortamının Kurulumu (Yazılım ve Kodlama)
Arduino IDE Kurulumu: Bilgisayarınıza Arduino IDE'yi indirin ve kurun. (Önceki projeden zaten kuruluysa bu adımı atlayabilirsiniz).
ESP32 Desteğini Ekleme: Arduino IDE içinde Dosya > Tercihler > Ek Kart Yöneticisi URL'leri alanına ESP32 kart destek linkini ekleyin ve Araçlar > Kart > Kart Yöneticisi'nden "esp32" paketini kurun. (Önceki projeden kuruluysa atlayabilirsiniz).
Adım 3: ThingSpeak Kanalını Ayarlama (IoT ve Bulut)
Hesap Oluşturma: ThingSpeak'te ücretsiz bir hesap oluşturun veya mevcut hesabınızı kullanın.
Yeni Kanal Oluşturma: "Channels" (Kanallar) sekmesine gidin ve "New Channel" (Yeni Kanal) oluşturun.
Alanları Tanımlama: Kanal ayarlarında (Channel Settings), Field 1'i "Toprak Nemi (%)" olarak adlandırın ve kanalı kaydedin.
API Anahtarını Kaydetme: "API Keys" (API Anahtarları) sekmesine gidin ve Write API Key (Yazma API Anahtarı) değerini not alın. Bu anahtar, ESP32'nin veriyi buluta göndermesi için gereklidir.
Adım 4: Donanım Bağlantılarını Yapma (Teknik Rehber)
Bu adım, dikkatli bir bağlantı gerektirir. Güç kaynağı bağlantılarına özellikle dikkat edin.
A. Toprak Nem Sensörü Bağlantısı:
Sensör Pini | Bağlantı Yeri | ESP32 Pini |
VCC (Güç) | -> | 3.3V (veya 5V, sensörünüzün çalışma voltajına göre) |
GND (Toprak) | -> | GND |
Analog Çıkış | -> | GPIO 34 (ESP32'deki analog giriş pinlerinden biri) |
B. Su Pompası ve Röle Modülü Bağlantısı:
Röle Modülü:
VCC -> ESP32 3.3V veya harici 5V (rölenin çalışma voltajına göre)
GND -> ESP32 GND veya harici güç kaynağı GND
IN (Kontrol Pini) -> GPIO 23 (veya herhangi bir dijital pin)
Su Pompası:
Pompanın bir ucu rölenin NORMALDE AÇIK (NO) veya NORMALDE KAPALI (NC) pini ile (proje gereksinimine göre, genellikle NO), diğer ucu ise ORTAK (COMMON) pinine bağlanır.
Pompanın diğer ucu, harici güç kaynağının pozitif (+) ucuna bağlanır.
Harici güç kaynağının negatif (-) ucu rölenin COMMON pinine bağlanır (veya pompa ile röle arasında).
ÖNEMLİ: Su pompasını asla doğrudan ESP32'ye bağlamayın. Röle veya transistör kullanın ve pompanın kendi harici güç kaynağı olsun.
Uyarı: Bağlantıları yapmadan önce kartın bilgisayardan ayrılmış olduğundan ve tüm güç kaynaklarının kapalı olduğundan emin olun. Ters polarite veya yanlış bağlantılar kartınıza, sensörünüze veya pompanıza kalıcı olarak zarar verebilir ve tehlike oluşturabilir.
Adım 5: ESP32 Kodunu Yazma ve Yükleme
Aşağıdaki kod taslağını Arduino IDE'ye yapıştırın. Önemli kısımları kendi bilgilerinizle değiştirmeniz gerekiyor.
#include <WiFi.h>
#include <ThingSpeak.h>
// ---------------- KENDİ BİLGİLERİNİZİ GİRİN ----------------
// Wi-Fi Bilgileri
const char* ssid = "WIFI_AG_ADINIZ";
const char* password = "WIFI_SIFRENIZ";
// ThingSpeak Bilgileri
unsigned long myChannelNumber = KANAL_ID_NUMARANIZ; // Örn: 123456
const char* myWriteAPIKey = "WRITE_API_ANAHTARINIZ"; // ThingSpeak'ten aldığınız anahtar
// Donanım Pinleri
#define SOIL_MOISTURE_PIN 34 // Toprak nem sensörünün bağlı olduğu analog pin
#define PUMP_RELAY_PIN 23 // Röle modülünün kontrol pini
// Kalibrasyon değerleri (kendi sensörünüz için ayarlamanız gerekebilir)
const int airValue = 3100; // Sensör kuru havada iken okuduğu değer (yaklaşık)
const int waterValue = 1100; // Sensör suda iken okuduğu değer (yaklaşık)
const int moistureThreshold = 40; // Toprak neminin bu değerin altına düşerse sula (yüzde olarak)
// ---------------- KOD BURADAN SONRA STANDARTTIR ----------------
WiFiClient client;
long lastSendTime = 0;
const long sendInterval = 60000; // Her 1 dakikada bir veri gönder (ThingSpeak limitleri için uygun)
void setup() {
Serial.begin(115200);
pinMode(PUMP_RELAY_PIN, OUTPUT);
digitalWrite(PUMP_RELAY_PIN, HIGH); // Röleyi başlangıçta kapalı tut (HIGH veya LOW röle türüne göre değişir)
ThingSpeak.begin(client);
Serial.println("WiFi'ye Bağlanıyor...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Bağlandı. IP Adresi: ");
Serial.println(WiFi.localIP());
}
void loop() {
unsigned long currentTime = millis();
// Her belirlenen aralıkta bir veri gönder ve nemi kontrol et
if (currentTime - lastSendTime >= sendInterval) {
lastSendTime = currentTime;
int sensorValue = analogRead(SOIL_MOISTURE_PIN); // Toprak nem değerini oku (0-4095)
// Yüzdeye çevir (0% = kuru, 100% = ıslak)
int moisturePercent = map(sensorValue, airValue, waterValue, 0, 100);
if(moisturePercent > 100) moisturePercent = 100;
if(moisturePercent < 0) moisturePercent = 0;
Serial.print("Toprak Nem Sensör Değeri: ");
Serial.print(sensorValue);
Serial.print(", Toprak Nemi: ");
Serial.print(moisturePercent);
Serial.println(" %");
// ThingSpeak'e veri gönder
ThingSpeak.setField(1, moisturePercent); // Field 1: Toprak Nemi
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if(x == 200){
Serial.println("ThingSpeak güncellendi.");
}
else{
Serial.println("ThingSpeak yazma hatası. Hata Kodu: " + String(x));
}
// Nemi kontrol et ve gerekirse sulama yap
if (moisturePercent < moistureThreshold) {
Serial.println("Toprak çok kuru! Sulama başlatılıyor...");
digitalWrite(PUMP_RELAY_PIN, LOW); // Röleyi aç (pompayı çalıştır) - Röle türüne göre HIGH olabilir
delay(5000); // 5 saniye sula
digitalWrite(PUMP_RELAY_PIN, HIGH); // Röleyi kapat (pompayı durdur) - Röle türüne göre LOW olabilir
Serial.println("Sulama tamamlandı.");
delay(10000); // Kısa bir ara ver, tekrar hemen sulamaması için
}
}
// ThingSpeak gönderme aralığı dışındaki diğer görevler veya döngüler
delay(1000); // Küçük bir gecikme
}
Kodu Hazırlama: Yukarıdaki kodda WIFI_AG_ADINIZ, WIFI_SIFRENIZ, KANAL_ID_NUMARANIZ ve WRITE_API_ANAHTARINIZ kısımlarını kendi bilgilerinizle değiştirin.
Kalibrasyon: airValue ve waterValue değerlerini kendi toprak nem sensörünüzü kuru havada ve suda daldırılmış halde test ederek ayarlamanız GEREKİR. Bu, nem yüzdesinin doğru hesaplanmasını sağlayacaktır.
Röle Durumu: digitalWrite(PUMP_RELAY_PIN, HIGH) veya LOW komutları, kullandığınız röle modülünün "açık" veya "kapalı" mantığına göre değişiklik gösterebilir (çoğu röle LOW sinyalinde tetiklenir).
Yükleme: Araçlar > Kart kısmından kullandığınız ESP32 modelini seçin. Araçlar > Port kısmından ESP32'nin bağlı olduğu COM portunu seçin. "Yükle" düğmesine tıklayın.
Test Etme: Yükleme tamamlandıktan sonra Araçlar > Seri Monitör'ü açın (Baud hızı: 115200). Bağlantı sürecini, nem okumalarını ve gerekirse sulama mesajlarını görmelisiniz.
Adım 6: Verileri Bulutta Görüntüleme ve Test Etme (IoT ve Bulut)
ThingSpeak hesabınıza geri dönün.
Kanalınızı açın ve "Private View" (Özel Görünüm) sekmesine gidin.
ESP32'nin gönderdiği toprak nemi verilerinin canlı grafikler halinde belirmeye başladığını görmelisiniz.
Sensörü kuru toprağa yerleştirin, nem eşiğinin altına düştüğünde pompanın çalışıp çalışmadığını gözlemleyin.



Yorumlar