📑 เนื้อหาในบทความ
🎯 ภาพรวมโปรเจกต์
ในบทความนี้ คุณจะได้เรียนรู้วิธีสร้างระบบควบคุมหลอกไฟอัจฉริยะ (Smart Light) ด้วย ESP32 ที่สามารถควบคุมได้ผ่านมือถือ ไม่ว่าจะเป็นการเปิด/ปิดไฟ ปรับความสว่าง หรือตั้งเวลาอัตโนมัติ โดยเชื่อมต่อกับ CynoIoT Platform
🔧 อุปกรณ์ที่ต้องใช้
Hardware Components
- ✓ESP32 Development Board (NodeMCU, Wemos, หรืออื่นๆ) - 120 บาท
- ✓Relay Module 5V (1-channel หรือ 2-channel) - 40 บาท
- ✓LED Bulb หรือ Lamp (ไฟบ้านธรรมดา) - 50 บาท
- ✓Jumper Wires (สายไฟเชื่อมต่อ) - 20 บาท
- ✓Breadboard (ไม่บังคับ) - 30 บาท
- ✓USB Cable (สำหรับ programming) - 40 บาท
Software Tools
- ✓Arduino IDE - ดาวน์โหลดฟรี
- ✓CynoIoT Account - สมัครฟรีที่ cynoiot.com
⚡ วิธีต่อวงจร
การต่อวงจร Relay Module กับ ESP32 ทำได้ง่ายดาย ดังนี้:
Pin Connections:
| Relay Module | ESP32 |
|---|---|
| VCC | 5V (หรือ VIN) |
| GND | GND |
| IN (Signal) | GPIO 23 (หรือขาใดก็ได้) |
⚠️ คำเตือนความปลอดภัย: โปรเจกต์นี้ใช้ไฟฟ้ากระแสสลับ (AC) 220V ซึ่งอันตรายถึงชีวิต หากไม่มีประสบการณ์ แนะนำให้ใช้ LED ขนาดเล็กที่ใช้แรงดันต่ำแทน
💻 ติดตั้งซอฟต์แวร์
1. ติดตั้ง Arduino IDE
ดาวน์โหลดและติดตั้ง Arduino IDE จาก arduino.cc
2. เพิ่ม ESP32 Board Support
- เปิด Arduino IDE และไปที่ File → Preferences
- ในช่อง Additional Boards Manager URLs ใส่: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- ไปที่ Tools → Board → Boards Manager
- ค้นหา "ESP32" และติดตั้ง esp32 by Espressif Systems
3. ติดตั้ง CynoIoT Library
ไปที่ Sketch → Include Library → Manage Libraries และค้นหา "CynoIoT"
📝 โค้ดโปรแกรม
นี่คือโค้ดที่สมบูรณ์สำหรับควบคุมหลอกไฟอัจฉริยะด้วย ESP32 และ CynoIoT:
/*
* DIY Smart Light with ESP32 and CynoIoT
* ควบคุมไฟอัจฉริยะผ่านมือถือ
*
* Hardware: ESP32 + Relay Module + LED Bulb
* Platform: CynoIoT (cynoiot.com)
*/
#include <WiFi.h>
#include <HTTPClient.h>
// ===============================
// ตั้งค่า WiFi
// ===============================
const char* ssid = "YOUR_WIFI_SSID"; // ชื่อ WiFi ของคุณ
const char* password = "YOUR_WIFI_PASSWORD"; // รหัสผ่าน WiFi
// ===============================
// ตั้งค่า CynoIoT
// ===============================
const char* cynoiot_server = "api.cynoiot.com";
const String device_id = "YOUR_DEVICE_ID"; // Device ID จาก CynoIoT
// ===============================
// ตั้งค่า Hardware
// ===============================
const int RELAY_PIN = 23; // GPIO pin ที่ต่อกับ Relay
// ===============================
// ตัวแปรสำหรับเก็บสถานะ
// ===============================
bool lightState = false; // false = ปิด, true = เปิด
unsigned long lastCheckTime = 0;
const unsigned long CHECK_INTERVAL = 2000; // ตรวจสอบทุก 2 วินาที
void setup() {
// เริ่มต้น Serial Monitor สำหรับ Debug
Serial.begin(115200);
Serial.println("\n=== DIY Smart Light ESP32 ===");
// ตั้งค่า Relay Pin
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // เริ่มต้นให้ไฟปิด
// เชื่อมต่อ WiFi
connectToWiFi();
Serial.println("✅ พร้อมใช้งาน!");
}
void loop() {
// ตรวจสอบคำสั่งจาก CynoIoT ทุก 2 วินาที
if (millis() - lastCheckTime >= CHECK_INTERVAL) {
checkCynoIoTCommand();
lastCheckTime = millis();
}
// รักษาการเชื่อมต่อ WiFi
if (WiFi.status() != WL_CONNECTED) {
Serial.println("⚠️ WiFi หลุด! กำลังเชื่อมต่อใหม่...");
connectToWiFi();
}
delay(100); // รอเล็กน้อยเพื่อไม่ให้ CPU ทำงานหนักเกินไป
}
// ===============================
// ฟังก์ชันเชื่อมต่อ WiFi
// ===============================
void connectToWiFi() {
Serial.print("🔗 กำลังเชื่อมต่อ WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\n✅ เชื่อมต่อ WiFi สำเร็จ!");
Serial.print("📡 IP Address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\n❌ ไม่สามารถเชื่อมต่อ WiFi ได้");
}
}
// ===============================
// ฟังก์ชันตรวจสอบคำสั่งจาก CynoIoT
// ===============================
void checkCynoIoTCommand() {
if (WiFi.status() != WL_CONNECTED) {
return;
}
// สร้าง HTTP Request ไปที่ CynoIoT API
HTTPClient http;
String url = "http://" + String(cynoiot_server) + "/api/v1/devices/" + device_id + "/command";
http.begin(url);
http.setTimeout(5000); // ตั้ง timeout 5 วินาที
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
String response = http.getString();
response.trim();
Serial.println("📨 ได้รับคำสั่ง: " + response);
// ตรวจสอบคำสั่งและควบคุม Relay
if (response == "ON" || response == "on" || response == "1") {
turnLightOn();
} else if (response == "OFF" || response == "off" || response == "0") {
turnLightOff();
} else if (response == "TOGGLE" || response == "toggle") {
toggleLight();
}
}
http.end();
}
// ===============================
// ฟังก์ชันเปิดไฟ
// ===============================
void turnLightOn() {
if (!lightState) {
digitalWrite(RELAY_PIN, HIGH);
lightState = true;
Serial.println("💡 เปิดไฟแล้ว");
// ส่งสถานะกลับไปยัง CynoIoT (ถ้าจำเป็น)
sendStateToCynoIoT("ON");
}
}
// ===============================
// ฟังก์ชันปิดไฟ
// ===============================
void turnLightOff() {
if (lightState) {
digitalWrite(RELAY_PIN, LOW);
lightState = false;
Serial.println("🌑 ปิดไฟแล้ว");
// ส่งสถานะกลับไปยัง CynoIoT (ถ้าจำเป็น)
sendStateToCynoIoT("OFF");
}
}
// ===============================
// ฟังก์ชันสลับสถานะไฟ
// ===============================
void toggleLight() {
if (lightState) {
turnLightOff();
} else {
turnLightOn();
}
}
// ===============================
// ฟังก์ชันส่งสถานะไปยัง CynoIoT
// ===============================
void sendStateToCynoIoT(String state) {
if (WiFi.status() != WL_CONNECTED) {
return;
}
HTTPClient http;
String url = "http://" + String(cynoiot_server) + "/api/v1/devices/" + device_id + "/state";
http.begin(url);
http.addHeader("Content-Type", "application/json");
// สร้าง JSON payload
String jsonPayload = "{\"state\":\"" + state + "\"}";
int httpResponseCode = http.POST(jsonPayload);
if (httpResponseCode > 0) {
Serial.println("✅ ส่งสถานะไปยัง CynoIoT สำเร็จ");
} else {
Serial.println("❌ ไม่สามารถส่งสถานะได้: " + String(httpResponseCode));
}
http.end();
}💡 Tip: อย่าลืมเปลี่ยน YOUR_WIFI_SSID, YOUR_WIFI_PASSWORD และ YOUR_DEVICE_ID ก่อนอัปโหลดโค้ดไปยัง ESP32
🔗 เชื่อมต่อ CynoIoT
สมัครบัญชี CynoIoT
- ไปที่ cynoiot.com
- คลิกปุ่ม Sign Up และกรอกข้อมูล
- ยืนยันอีเมลเพื่อเปิดใช้งานบัญชี
สร้าง Device ใหม่
- ล็อกอินเข้าสู่ CynoIoT Dashboard
- ไปที่ Devices → Add Device
- ตั้งชื่อ Device:
Smart Light - Living Room - เลือก Device Type:
Light/Switch - คัดลอก Device ID มาใช้ในโค้ด
ควบคุมผ่าน Mobile App
เมื่อเชื่อมต่อเสร็จแล้ว คุณสามารถควบคุมไฟได้ผ่าน:
- CynoIoT Web Dashboard
- Mobile App (iOS/Android)
- Voice Commands (Google Assistant, Alexa)
✅ การทดสอบระบบ
ทดสอบ Hardware
- อัปโหลดโค้ดไปยัง ESP32
- เปิด Serial Monitor (115200 baud)
- ดูว่าเชื่อมต่อ WiFi สำเร็จหรือไม่
- ทดสอบเปิด/ปิด Relay ด้วยคำสั่งจาก CynoIoT
ทดสอบ Remote Control
- ไปที่ CynoIoT Dashboard
- เลือก Device ของคุณ
- กดปุ่ม ON และ OFF
- ยืนยันว่าไฟติด/ดับตามคำสั่ง
🔧 การแก้ปัญหา
ESP32 เชื่อมต่อ WiFi ไม่ได้
- ตรวจสอบว่าชื่อและรหัสผ่าน WiFi ถูกต้อง
- ลองใช้ WiFi 2.4GHz (ESP32 ไม่รองรับ 5GHz)
- ย้าย ESP32 ใกล้ Router มากขึ้น
Relay ทำงานไม่ถูกต้อง
- ตรวจสอบการต่อสาย VCC, GND, IN
- ลองเปลี่ยน GPIO Pin อื่น (บางขาใช้ภายใน)
- ทดสอบ Relay ด้วยการเชื่อมต่อ VCC และ GND โดยตรง
CynoIoT ส่งคำสั่งไม่ได้
- ตรวจสอบ Device ID ว่าถูกต้อง
- ดู Serial Monitor ว่ามี Error อะไร
- ลองใช้ Postman ทดสอบ API โดยตรง
🚀 ขั้นตอนถัดไป
ยินดีด้วย! คุณสร้างระบบควบคุมไฟอัจฉริยะเสร็จแล้ว ต่อไปนี้คือไอเดียสำหรับพัฒนาต่อ:
ตั้งเวลาอัตโนมัติ
ตั้งเวลาเปิด/ปิดไฟตามเวลาที่กำหนด
ปรับความสว่าง
เพิ่ม Dimmer Module เพื่อปรับแสงได้
Voice Control
เชื่อมต่อกับ Google Assistant หรือ Alexa
ขยายไปทั้งบ้าน
เพิ่มหลอกไฟในหลายห้อง
🎉 สรุป
ในบทความนี้ คุณได้เรียนรู้วิธีสร้างระบบควบคุมไฟอัจฉริยะด้วย ESP32 และ CynoIoT Platform ตั้งแต่การเลือกอุปกรณ์ การต่อวงจร การเขียนโค้ด ไปจนถึงการเชื่อมต่อกับระบบ Cloud
ตอนนี้คุณสามารถ:
- ควบคุมไฟผ่านมือถือได้จากทุกที่
- ตั้งเวลาเปิด/ปิดไฟอัตโนมัติ
- เชื่อมต่อกับ Voice Assistant
- ขยายระบบไปสู่ Smart Home ที่สมบูรณ์
หากมีคำถามหรือปัญหา สามารถสอบถามได้ที่ CynoIoT Community หรืออีเมล support@cynoiot.com