โค้ด esp32 สมาร์ทฟาร์ม | ตัวอย่างโค้ดควบคุมเซนเซอร์และรีเลย์

แจกโค้ดสมาร์ทฟาร์ม ESP32 พร้อมอธิบายทีละบรรทัด

แจกโค้ดสมาร์ทฟาร์ม ESP32 พร้อมอธิบายทีละบรรทัด

โค้ด esp32 สมาร์ทฟาร์ม | ตัวอย่างโค้ดควบคุมเซนเซอร์และรีเลย์

สำหรับใครที่อยากเริ่มต้นระบบสมาร์ทฟาร์มด้วย ESP32 แต่ยังไม่รู้จะเริ่มจากตรงไหน บทความนี้แจกให้เลย ตัวอย่างโค้ดควบคุมเซนเซอร์และรีเลย์ พร้อมคำอธิบายแบบทีละบรรทัด เข้าใจง่าย ทำตามได้ทันที ไม่ต้องมี Cloud ก็ทำงานอัตโนมัติได้ผ่าน WiFi Local

รายละเอียดพื้นฐานของ ESP32 คืออะไร พร้อมจุดเด่นและวิธีเริ่มต้นใช้งาน

🧩 อุปกรณ์ที่ใช้

  • ESP32 Dev Module
  • DHT22 (วัดอุณหภูมิ/ความชื้นอากาศ)
  • Soil Sensor (วัดความชื้นในดิน)
  • BH1750 (วัดแสง)
  • Relay 4 Channel
  • สาย Dupont + บอร์ดทดลอง
  • แอปมือถือ (ในระบบ PoPo หรือสร้างเองก็ได้)

⚙️ ภาพรวมระบบ

  • ESP32 อ่านค่าจากเซนเซอร์ทุก 2 วินาที
  • ส่งค่าผ่าน WebSocket ไปยังแอป
  • รับคำสั่งเปิด/ปิดรีเลย์จากแอป
  • ตั้งเวลา/ตั้งค่าอัตโนมัติได้

🔍 ตัวอย่างโค้ด ESP32 (สรุปฟังก์ชันหลัก)

#include <WiFi.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include "DHT.h"
#include <Wire.h>
#include <BH1750.h>

#define DHTPIN 27
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BH1750 lightMeter;

AsyncWebServer server(80);
AsyncWebSocket ws("/ws");

const int relayPins[] = {14, 12, 13, 15};

void setup() {
  Serial.begin(115200);
  WiFi.begin("yourSSID", "yourPASSWORD");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");

  dht.begin();
  Wire.begin();
  lightMeter.begin();

  for (int i = 0; i < 4; i++) {
    pinMode(relayPins&#91;i&#93;, OUTPUT);
    digitalWrite(relayPins&#91;i&#93;, HIGH); // ปิดทั้งหมดเริ่มต้น
  }

  ws.onEvent(onWebSocketEvent);
  server.addHandler(&ws);
  server.begin();
}

void loop() {
  static unsigned long lastSend = 0;
  if (millis() - lastSend > 2000) {
    lastSend = millis();
    sendSensorData();
  }
}

void sendSensorData() {
  float temp = dht.readTemperature();
  float hum = dht.readHumidity();
  float lux = lightMeter.readLightLevel();

  String data = "{\"temp\":" + String(temp) + ",\"hum\":" + String(hum) + ",\"lux\":" + String(lux) + "}";
  ws.textAll(data);
}

void onWebSocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client,
                      AwsEventType type, void *arg, uint8_t *data, size_t len) {
  if (type == WS_EVT_DATA) {
    String msg = String((char *)data);
    if (msg == "relay1_on") digitalWrite(relayPins[0], LOW);
    if (msg == "relay1_off") digitalWrite(relayPins[0], HIGH);
    // เพิ่มตามจำนวนรีเลย์
  }
}

📘 อธิบายโค้ดทีละส่วน

  • WiFi.begin(…) เชื่อมต่อกับ WiFi Local
  • DHT dht(…) และ BH1750 lightMeter เรียกใช้เซนเซอร์
  • sendSensorData() อ่านค่าเซนเซอร์แล้วส่งผ่าน WebSocket
  • onWebSocketEvent() รับคำสั่งเปิด/ปิดจากแอป

✅ ทำไมต้องใช้โค้ดนี้?

  • ไม่ต้องมี Server หรือ Cloud ก็ใช้งานได้
  • เหมาะกับมือใหม่สาย Maker หรือโปรเจกต์วิชา
  • เชื่อมต่อกับแอปมือถือผ่าน WiFi ง่าย ๆ
  • โค้ดต่อยอดได้ เช่น เพิ่มระบบรดน้ำอัตโนมัติ ตั้งเวลา หรือเพิ่มเซนเซอร์ใหม่

ทำความรู้จักฟังก์ชันต่าง ๆ ในไลบรารี WiFi บน ESP32 และวิธีใช้งานอย่างมืออาชีพได้ที่ ESP32 WiFi Library Functions

📚 บทความอื่นที่แนะนำ:

  • วิธีอ่านค่าความชื้นในดินด้วย ESP32
  • เชื่อมต่อ ESP32 กับมือถือผ่าน WebSocket
  • เชื่อมต่อกับแอปมือถือผ่าน WiFi ง่าย ๆ
  • สร้างระบบรดน้ำอัตโนมัติด้วย PoPo
Shopping Cart
Scroll to Top