แจกโค้ดสมาร์ทฟาร์ม ESP32 พร้อมอธิบายทีละบรรทัด
โค้ด esp32 สมาร์ทฟาร์ม | ตัวอย่างโค้ดควบคุมเซนเซอร์และรีเลย์
สำหรับใครที่อยากเริ่มต้นระบบสมาร์ทฟาร์มด้วย ESP32 แต่ยังไม่รู้จะเริ่มจากตรงไหน บทความนี้แจกให้เลย ตัวอย่างโค้ดควบคุมเซนเซอร์และรีเลย์ พร้อมคำอธิบายแบบทีละบรรทัด เข้าใจง่าย ทำตามได้ทันที ไม่ต้องมี Cloud ก็ทำงานอัตโนมัติได้ผ่าน WiFi Local
รายละเอียดพื้นฐานของ ESP32 คืออะไร พร้อมจุดเด่นและวิธีเริ่มต้นใช้งาน
🧩 อุปกรณ์ที่ใช้
- ESP32 Dev Module
- DHT22 (วัดอุณหภูมิ/ความชื้นอากาศ)
- Soil Sensor (วัดความชื้นในดิน)
- BH1750 (วัดแสง)
- Relay 4 Channel
- สาย Dupont + บอร์ดทดลอง
- แอปมือถือ (ในระบบ PoPo หรือสร้างเองก็ได้)
อ่านเพิ่มเติม: ESP32 Pinout DEVKIT V1 – แผนผังและการใช้งานพิน
⚙️ ภาพรวมระบบ
- 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[i], OUTPUT);
digitalWrite(relayPins[i], 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




