ทำหลอกไฟอัจฉริยะ DIY ด้วย ESP32 ควบคุมผ่านมือถือ

เรียนรู้วิธีสร้างระบบควบคุมไฟอัจฉริยะด้วย ESP32 และ CynoIoT Platform พร้อมโค้ดตัวอย่างและขั้นตอนการติดตั้งที่ทำตามได้ง่าย

📅 16 มีนาคม 2026⏱️ 15 นาที🎯 ระดับเริ่มต้น

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

ในบทความนี้ คุณจะได้เรียนรู้วิธีสร้างระบบควบคุมหลอกไฟอัจฉริยะ (Smart Light) ด้วย ESP32 ที่สามารถควบคุมได้ผ่านมือถือ ไม่ว่าจะเป็นการเปิด/ปิดไฟ ปรับความสว่าง หรือตั้งเวลาอัตโนมัติ โดยเชื่อมต่อกับ CynoIoT Platform

🔌
งบประมาณ
~300 บาท
⏱️
ระยะเวลา
2-3 ชั่วโมง
📊
ระดับ
เริ่มต้น

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

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 ModuleESP32
VCC5V (หรือ VIN)
GNDGND
IN (Signal)GPIO 23 (หรือขาใดก็ได้)

⚠️ คำเตือนความปลอดภัย: โปรเจกต์นี้ใช้ไฟฟ้ากระแสสลับ (AC) 220V ซึ่งอันตรายถึงชีวิต หากไม่มีประสบการณ์ แนะนำให้ใช้ LED ขนาดเล็กที่ใช้แรงดันต่ำแทน

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

1. ติดตั้ง Arduino IDE

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

2. เพิ่ม ESP32 Board Support

  1. เปิด Arduino IDE และไปที่ File → Preferences
  2. ในช่อง Additional Boards Manager URLs ใส่:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  3. ไปที่ Tools → Board → Boards Manager
  4. ค้นหา "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

  1. ไปที่ cynoiot.com
  2. คลิกปุ่ม Sign Up และกรอกข้อมูล
  3. ยืนยันอีเมลเพื่อเปิดใช้งานบัญชี

สร้าง Device ใหม่

  1. ล็อกอินเข้าสู่ CynoIoT Dashboard
  2. ไปที่ Devices → Add Device
  3. ตั้งชื่อ Device: Smart Light - Living Room
  4. เลือก Device Type: Light/Switch
  5. คัดลอก Device ID มาใช้ในโค้ด

ควบคุมผ่าน Mobile App

เมื่อเชื่อมต่อเสร็จแล้ว คุณสามารถควบคุมไฟได้ผ่าน:

  • CynoIoT Web Dashboard
  • Mobile App (iOS/Android)
  • Voice Commands (Google Assistant, Alexa)

✅ การทดสอบระบบ

ทดสอบ Hardware

  1. อัปโหลดโค้ดไปยัง ESP32
  2. เปิด Serial Monitor (115200 baud)
  3. ดูว่าเชื่อมต่อ WiFi สำเร็จหรือไม่
  4. ทดสอบเปิด/ปิด Relay ด้วยคำสั่งจาก CynoIoT

ทดสอบ Remote Control

  1. ไปที่ CynoIoT Dashboard
  2. เลือก Device ของคุณ
  3. กดปุ่ม ON และ OFF
  4. ยืนยันว่าไฟติด/ดับตามคำสั่ง

🔧 การแก้ปัญหา

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

© 2026 CynoIoT Platform. All rights reserved.

สร้างด้วย ❤️ สำหรับคนรัก IoT และ Electronics