บทความ: สร้างระบบรดน้ำอัตโนมัติด้วย ESP32 และ CynoIoT

เรียนรู้วิธีสร้างระบบรดน้ำพืชอัจฉริยะที่ตรวจจับความชื้นในดินและรดน้ำอัตโนมัติ เหมาะสำหรับบ้าน สวน และโรงเรือน พร้อมโค้ดตัวอย่างและคำอธิบายภาษาไทย

📅 11 มีนาคม 2026⏱️ 15 นาที🎯 ระดับกลาง

🌱 ภาพรวมโปรเจกต์

ระบบรดน้ำพืชอัจฉริยะ (Smart Plant Watering System) เป็นโปรเจกต์ IoT ที่ช่วยให้คุณดูแลพืชได้อัตโนมัติ โดยใช้เซ็นเซอร์ตรวจจับความชื้นในดิน เมื่อดินแห้งระบบจะสั่งให้ปั๊มน้ำทำงานรดน้ำให้พืชโดยอัตโนมัติ

✨ คุณสมบัติหลัก

  • ✅ ตรวจจับความชื้นในดินแบบ Real-time
  • ✅ รดน้ำอัตโนมัติเมื่อดินแห้ง
  • ✅ ประหยัดน้ำด้วยการรดน้ำเฉพาะเมื่อจำเป็น
  • ✅ ติดตามสถานะผ่าน CynoIoT Platform
  • ✅ รองรับ Manual Watering ผ่าน Mobile App

🔧 อุปกรณ์ที่ต้องใช้

Hardware Components

ESP32 Development Board

บอร์ดไมโครคอนโทรลเลอร์ WiFi พร้อม Bluetooth

Soil Moisture Sensor (Capacitive)

เซ็นเซอร์วัดความชื้นในดิน แนะนำให้ใช้แบบ Capacitive เพื่อความทนทาน

Relay Module (5V)

รีเลย์สำหรับควบคุมปั๊มน้ำ

Water Pump (5V-12V)

ปั๊มน้ำขนาดเล็ก แนะนำให้ใช้ Peristaltic Pump หรือ Mini Water Pump

Jumper Wires & Breadboard

สายไฟและบอร์ดทดลองสำหรับต่อวงจร

💡 งบประมาณโดยประมาณ: ฿350-฿500 ขึ้นอยู่กับคุณภาพของอุปกรณ์

⚡ การต่อสายวงจร

// Soil Moisture Sensor Wiring
VCC  → 3.3V (หรือ 5V แล้วแต่รุ่นเซ็นเซอร์)
GND  → GND
AOUT → GPIO 34 (ADC1_CH6)

// Relay Module Wiring
VCC  → 5V
GND  → GND
IN   → GPIO 26

// Water Pump (through Relay)
Pump+  → COM (Common)
Pump-  → NC (Normally Closed)
Power Supply → NO (Normally Open)
                                

⚠️ คำเตือน: อย่าเสียบปั๊มน้ำโดยตรงกับ ESP32 เพราะใช้กระแสไฟมากเกินไป ต้องใช้รีเลย์เป็นตัวกั้นกระแสเสมอ

💻 การติดตั้งซอฟต์แวร์

1. ติดตั้ง Arduino IDE

ดาวน์โหลดและติดตั้ง Arduino IDE จาก arduino.cc

2. ติดตั้ง ESP32 Board Package

เปิด Arduino IDE และไปที่ File → Preferences → Additional Boards Manager URLs
เพิ่ม URL: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

จากนั้นไปที่ Tools → Board → Boards Manager → ค้นหา "ESP32" → ติดตั้ง

3. ติดตั้ง Library ที่จำเป็น

ไปที่ Sketch → Include Library → Manage Libraries และติดตั้ง:

  • WiFi (ติดตั้งมากับ ESP32 Board)
  • HTTPClient (ติดตั้งมากับ ESP32 Board)
  • ArduinoJson สำหรับจัดการข้อมูล JSON

📝 โค้ดตัวอย่าง

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

// ================================
// ตั้งค่า WiFi
// ================================
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";

// ================================
// ตั้งค่า CynoIoT
// ================================
const char* cynoiot_server = "api.cynoiot.com";
const String device_token = "YOUR_DEVICE_TOKEN"; // รับจาก CynoIoT Dashboard

// ================================
// Pin Configuration
// ================================
const int SOIL_MOISTURE_PIN = 34;  // GPIO 34 สำหรับ Soil Moisture Sensor
const int RELAY_PIN = 26;           // GPIO 26 สำหรับ Relay

// ================================
// ตั้งค่า Threshold
// ================================
const int DRY_SOIL_THRESHOLD = 2500;  // ค่าที่ถือว่าดินแห้ง (ปรับได้)
const int WET_SOIL_THRESHOLD = 1500;  // ค่าที่ถือว่าดินชุ่ม (ปรับได้)

// ตัวแปรสำหรับเก็บค่าเซ็นเซอร์
int soilMoistureValue = 0;
String soilStatus = "";
bool pumpActive = false;

// Timer สำหรับส่งข้อมูลทุก 5 นาที
unsigned long lastSendTime = 0;
const long sendInterval = 300000;  // 5 นาที

void setup() {
  Serial.begin(115200);
  delay(1000);
  
  // ตั้งค่า Pin Mode
  pinMode(SOIL_MOISTURE_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);
  
  // ปิดปั๊มน้ำเริ่มต้น
  digitalWrite(RELAY_PIN, LOW);
  
  // เชื่อมต่อ WiFi
  connectToWiFi();
}

void loop() {
  // อ่านค่าความชื้นในดิน
  soilMoistureValue = analogRead(SOIL_MOISTURE_PIN);
  
  // แปลงค่าเป็นเปอร์เซ็นต์ (0-100%)
  int moisturePercent = map(soilMoistureValue, 0, 4095, 100, 0);
  
  // ตรวจสอบสถานะดิน
  if (soilMoistureValue > DRY_SOIL_THRESHOLD) {
    soilStatus = "dry";
    
    // เปิดปั๊มน้ำ
    if (!pumpActive) {
      digitalWrite(RELAY_PIN, HIGH);
      pumpActive = true;
      Serial.println("💧 เปิดปั๊มน้ำ - ดินแห้ง");
      
      // รดน้ำ 5 วินาที
      delay(5000);
      digitalWrite(RELAY_PIN, LOW);
      pumpActive = false;
      Serial.println("✅ ปิดปั๊มน้ำ");
    }
  } else if (soilMoistureValue < WET_SOIL_THRESHOLD) {
    soilStatus = "wet";
  } else {
    soilStatus = "moderate";
  }
  
  // แสดงค่าบน Serial Monitor
  Serial.print("ความชื้นในดิน: ");
  Serial.print(moisturePercent);
  Serial.print("% | ค่าดิบ: ");
  Serial.print(soilMoistureValue);
  Serial.print(" | สถานะ: ");
  Serial.println(soilStatus);
  
  // ส่งข้อมูลไป CynoIoT ทุก 5 นาที
  if (millis() - lastSendTime >= sendInterval) {
    sendToCynoIoT(moisturePercent, soilStatus);
    lastSendTime = millis();
  }
  
  // รอ 1 วินาทีก่อนวนลูปใหม่
  delay(1000);
}

// ================================
// เชื่อมต่อ WiFi
// ================================
void connectToWiFi() {
  Serial.print("กำลังเชื่อมต่อ WiFi: ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println("\n✅ เชื่อมต่อ WiFi สำเร็จ!");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());
}

// ================================
// ส่งข้อมูลไป CynoIoT
// ================================
void sendToCynoIoT(int moisture, String status) {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("❌ WiFi ไม่ได้เชื่อมต่อ - ข้ามการส่งข้อมูล");
    return;
  }
  
  HTTPClient http;
  String url = "https://" + String(cynoiot_server) + "/api/v1/sensor/data";
  
  // สร้าง JSON payload
  DynamicJsonDocument doc(256);
  doc["token"] = device_token;
  doc["moisture"] = moisture;
  doc["status"] = status;
  doc["pump_active"] = pumpActive;
  doc["timestamp"] = millis();
  
  String payload;
  serializeJson(doc, payload);
  
  // ส่ง HTTP POST
  http.begin(url);
  http.addHeader("Content-Type", "application/json");
  
  int httpResponseCode = http.POST(payload);
  
  if (httpResponseCode > 0) {
    Serial.print("✅ ส่งข้อมูลไป CynoIoT สำเร็จ - HTTP Code: ");
    Serial.println(httpResponseCode);
  } else {
    Serial.print("❌ ส่งข้อมูลไม่สำเร็จ - HTTP Code: ");
    Serial.println(httpResponseCode);
  }
  
  http.end();
}
                                

💡 เคล็ดลับ: ค่า Analog Read ของ ESP32 อยู่ระหว่าง 0-4095 (12-bit) ค่าที่สูงกว่าหมายถึงดินแห้ง ค่าที่ต่ำกว่าหมายถึงดินชุ่ม

🌐 การเชื่อมต่อกับ CynoIoT Platform

1. สร้าง Device บน CynoIoT

  1. ล็อกอินเข้าสู่ CynoIoT Dashboard
  2. ไปที่ Devices → Add New Device
  3. เลือก Device Type: "Sensor"
  4. ตั้งชื่อ Device: "Smart Plant Watering"
  5. กด Save และคัดลอก Device Token

2. ตั้งค่า Dashboard

คุณสามารถสร้าง Dashboard สำหรับติดตามความชื้นในดินแบบ Real-time:

  • Gauge Chart แสดงเปอร์เซ็นต์ความชื้น
  • Line Graph แสดงประวัติความชื้นย้อนหลัง
  • Status Indicator แสดงสถานะปั๊มน้ำ
  • Alert Notifications เมื่อดินแห้งเกินไป

3. ตั้งค่า Notifications

รับการแจ้งเตือนผ่าน Line, Telegram หรือ Email เมื่อ:

  • ความชื้นต่ำกว่า 30%
  • ปั๊มน้ำทำงานเกิน 10 นาที
  • ไม่ได้รับข้อมูลเกิน 1 ชั่วโมง

🚀 ฟีเจอร์ขั้นสูง

⏰ Scheduler

ตั้งเวลารดน้ำตามกำหนด เช่น รดน้ำเช้าเวลา 7:00 และเย็นเวลา 18:00

🌦️ Weather Integration

เชื่อมต่อกับ Weather API เพื่อข้ามการรดน้ำหากฝนตกหรือคาดว่าฝนจะตก

🔋 Battery Optimization

ใช้ Deep Sleep Mode เพื่อประหยัดแบตเตอรี่ ตื่นขึ้นเพื่อวัดค่าทุก 15-30 นาที

📱 Manual Control

สร้าง Web Interface หรือ Mobile App สำหรับเปิด/ปิดปั๊มน้ำแบบ Manual ผ่าน WiFi

🔧 การแก้ปัญหาที่พบบ่อย

❌ เซ็นเซอร์อ่านค่าไม่ถูกต้อง

ตรวจสอบการต่อสาย และลองปรับค่า Threshold ให้เหมาะกับชนิดของดิน

❌ ปั๊มน้ำไม่ทำงาน

ตรวจสอบว่ารีเลย์ได้รับไฟเพียงพอ (5V) และปั๊มน้ำได้รับไฟที่ต้องการ (5-12V)

❌ ส่งข้อมูลไป CynoIoT ไม่ได้

ตรวจสอบการเชื่อมต่อ WiFi และตรวจสอบ Device Token ว่าถูกต้องหรือไม่

❌ ESP32 Restart บ่อย

อาจเกิดจากการไหลของกระแสไฟไม่เพียงพอ ใช้ไฟเลี้ยงภายนอกที่เสถียรกว่า

🎉 สรุป

ในบทความนี้คุณได้เรียนรู้วิธีสร้างระบบรดน้ำพืชอัจฉริยะด้วย ESP32 และ CynoIoT ตั้งแต่การเลือกฮาร์ดแวร์ การต่อวงจร การเขียนโค้ด ไปจนถึงการเชื่อมต่อ Cloud Platform

สิ่งที่คุณสามารถทำต่อได้:

  • ✅ เพิ่มเซ็นเซอร์วัดอุณหภูมิและความชื้นอากาศ
  • ✅ สร้างระบบรดน้ำหลายจุดด้วย ESP32 หลายตัว
  • ✅ เพิ่ม LCD Screen แสดงผลความชื้นแบบ Real-time
  • ✅ ปรับปรุงด้วย Solar Panel สำหรับใช้งาน outdoor