สร้าง Smart Doorbell ด้วย ESP8266 งบน้อยกว่า 300 บาท

เรียนรู้วิธีสร้างกระดิ่งประตูอัจฉริยะด้วย ESP8266 NodeMCU ราคาประหยัด แจ้งเตือนผ่านมือถือทุกที่ทุกเวลา พร้อมโค้ดตัวอย่างและคำอธิบายภาษาไทย

📅 11 เมษายน 2026⏱️ 15 นาที🎯 ระดับ: เริ่มต้น - กลาง

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

กระดิ่งประตูอัจฉริยะ (Smart Doorbell) เป็นหนึ่งในโปรเจกต์ IoT ที่น่าสนใจและมีประโยชน์มากที่สุด ด้วยงบประมาณ น้อยกว่า 300 บาท คุณสามารถสร้างระบบแจ้งเตือนเมื่อมีคนกดกระดิ่งหน้าบ้าน และรับการแจ้งเตือนผ่านมือถือได้ทันที ไม่ว่าคุณจะอยู่ที่ไหนในโลก ตราบใดที่มีอินเทอร์เน็ต

✨ จุดเด่นของโปรเจกต์นี้

  • ราคาประหยัด: วัสดุทั้งหมดไม่เกิน 300 บาท
  • ง่ายต่อการติดตั้ง: ไม่ต้องเจาะรูหรือดัดแปลงประตู
  • แจ้งเตือนไกลบ้าน: รับ notification ผ่านมือถือ
  • ปรับแต่งได้: เพิ่มฟีเจอร์เสียง, กล้อง, หรืออื่นๆ
  • เหมาะสำหรับมือใหม่: โค้ดง่าย เข้าใจได้เร็ว

🎓 สิ่งที่คุณจะได้เรียนรู้

  • • การใช้งาน ESP8266 NodeMCU เบื้องต้น
  • • การเชื่อมต่อ WiFi และการส่ง HTTP Request
  • • การใช้งาน IFTTT (If This Then That) สำหรับ IoT
  • • การต่อใช้งาน Push Button และ Buzzer
  • • การสร้าง IoT project ที่ใช้งานได้จริง

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

อุปกรณ์ รายละเอียด ราคาโดยประมาณ
ESP8266 NodeMCUMicrocontroller ที่มี WiFi ในตัว~80-120 บาท
Push Buttonสวิตช์กด 1 ตัว~5-10 บาท
Buzzerตัวกระดิ่งเสียง (5V)~10-20 บาท
Resistor 10kΩตัวต้านทาน 10 กิโลโอห์ม (Pull-down)~0.50 บาท
Breadboard & Jumper Wiresแผงวงจรและสายไฟ~30-50 บาท
USB Cableสาย Micro USB สำหรับ programming~20-30 บาท
รวมทั้งหมด ~150-230 บาท

💡 หมายเหตุ

  • • ราคาอาจแตกต่างตามร้านค้าและยี่ห้อ
  • • หากมีอุปกรณ์บางอย่างอยู่แล้ว สามารถนำมาใช้ได้เลย
  • • สามารถใช้ 3D Printer พิมพ์กล่องบรรจุได้ (มี Template ให้ดาวน์โหลด)

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

ขาต่อวงจร (Pinout)

📍 ต่อ Push Button ที่ขา D3 (GPIO 0)

  • • ขาหนึ่งของ Button → ขา D3 (GPIO 0)
  • • อีกขาหนึ่ง → ขา GND
  • • ต่อตัวต้านทาน 10kΩ ระหว่าง D3 และ GND (Pull-down)

🔊 ต่อ Buzzer ที่ขา D5 (GPIO 14)

  • • ขาบวก (+) ของ Buzzer → ขา D5 (GPIO 14)
  • • ขาลบ (-) ของ Buzzer → ขา GND
  • • (แนะนำให้ใช้ Transistor ถ้าใช้ Buzzer ที่กระแสสูง)

⚠️ ข้อควรระวัง

  • อย่า ต่อ Buzzer โดยตรงกับขา 3.3V เพราะอาจไหม้
  • • ตรวจสอบขา GPIO ให้ถูกต้องก่อนต่อวงจร
  • • ใช้ Resistor pull-down เพื่อป้องกันการเปลี่ยนแปลงของสัญญาณ
  • • ทดสอบวงจรด้วย Multimeter ก่อนจ่ายไฟเต็ม

💻 การเขียนโปรแกรม

1. ติดตั้ง Arduino IDE และ ESP8266 Board

// 1. เปิด Arduino IDE
// 2. ไปที่ File → Preferences
// 3. ในช่อง "Additional Board Manager URLs" ใส่:
// http://arduino.esp8266.com/stable/package_esp8266com_index.json

// 4. ไปที่ Tools → Board → Boards Manager
// 5. ค้นหา "esp8266" และติดตั้ง

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

// ไปที่ Sketch → Include Library → Manage Libraries
// ค้นหาและติดตั้ง:
// - ESP8266WiFi (มักจะมีมาให้อยู่แล้ว)

3. อัปโหลดโค้ด

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

// ==================== ตั้งค่า WiFi ====================
const char* ssid = "YOUR_WIFI_SSID";        // ชื่อ WiFi ของคุณ
const char* password = "YOUR_WIFI_PASSWORD"; // รหัสผ่าน WiFi

// ==================== ตั้งค่า IFTTT ====================
const char* iftttHost = "maker.ifttt.com";
const char* iftttKey = "YOUR_IFTTT_WEBHOOK_KEY"; // Webhook Key จาก IFTTT
const char* iftttEvent = "doorbell_pressed";     // ชื่อ Event

// ==================== ตั้งค่า Hardware ====================
const int buttonPin = D3;  // GPIO 0 - Push Button
const int buzzerPin = D5;  // GPIO 14 - Buzzer

// ตัวแปรสำหรับ Debouncing
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50; // 50ms debounce delay

// ตัวแปรสำหรับป้องกันการ trigger ซ้ำ
unsigned long lastTriggerTime = 0;
unsigned long triggerDelay = 3000; // รอ 3 วินาทีก่อน trigger ใหม่

WiFiClientSecure client;

void setup() {
  Serial.begin(115200);          // เปิด Serial Monitor สำหรับ Debug
  pinMode(buttonPin, INPUT);     // ตั้งค่า Button pin เป็น input
  pinMode(buzzerPin, OUTPUT);    // ตั้งค่า Buzzer pin เป็น output
  digitalWrite(buzzerPin, LOW);  // ปิด Buzzer เริ่มต้น

  // เชื่อมต่อ WiFi
  Serial.println("\n\nเริ่มเชื่อมต่อ WiFi...");
  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());

  // ข้ามการตรวจสอบ SSL certificate (สำหรับ IFTTT)
  client.setInsecure();
}

void loop() {
  // อ่านค่าจาก Button
  int buttonState = digitalRead(buttonPin);

  // ถ้า Button ถูกกด (HIGH)
  if (buttonState == HIGH) {
    // Reset debounce timer
    if ((millis() - lastDebounceTime) > debounceDelay) {
      lastDebounceTime = millis();

      // ตรวจสอบว่าผ่านระยะเวลา trigger หรือยัง
      if ((millis() - lastTriggerTime) > triggerDelay) {
        lastTriggerTime = millis();

        Serial.println("🔔 กระดิ่งถูกกด!");

        // ส่งเสียง Buzzer
        digitalWrite(buzzerPin, HIGH);
        delay(200);
        digitalWrite(buzzerPin, LOW);

        // ส่ง notification ไปยัง IFTTT
        sendIFTTTNotification();

        // รอจนกว่า Button จะถูกปล่อย
        while (digitalRead(buttonPin) == HIGH) {
          delay(10);
        }
      }
    }
  }

  delay(10); // ลดการใช้ CPU
}

void sendIFTTTNotification() {
  Serial.println("📤 กำลังส่ง notification ไปยัง IFTTT...");

  // เชื่อมต่อกับ IFTTT server
  if (client.connect(iftttHost, 443)) {
    Serial.println("✅ เชื่อมต่อ IFTTT สำเร็จ!");

    // สร้าง HTTP POST request
    String url = "/trigger/" + String(iftttEvent) + "/with/key/" + String(iftttKey);
    String value = "{\"value1\":\"Someone is at the door!\"}";

    // ส่ง HTTP header
    client.print("POST ");
    client.print(url);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(iftttHost);
    client.println("Content-Type: application/json");
    client.print("Content-Length: ");
    client.println(value.length());
    client.println();
    client.println(value);

    // รอ response
    while (client.connected()) {
      String line = client.readStringUntil('\n');
      if (line == "\r") {
        break;
      }
    }

    String response = client.readString();
    Serial.println("📥 IFTTT Response:");
    Serial.println(response);

    Serial.println("✅ ส่ง notification สำเร็จ!");
  } else {
    Serial.println("❌ ไม่สามารถเชื่อมต่อ IFTTT ได้");
  }

  client.stop();
}

💡 อธิบายการทำงานของโค้ด

  • Setup: เชื่อมต่อ WiFi, ตั้งค่า pin modes
  • Loop: ตรวจสอบการกดปุ่มอย่างต่อเนื่อง
  • Debouncing: ป้องกันการ trigger ซ้ำจากการสั่นของปุ่ม
  • Trigger Delay: รอ 3 วินาทีก่อนส่ง notification ใหม่
  • IFTTT: ส่ง HTTP request ไปยัง IFTTT Webhook

🔄 ตั้งค่า IFTTT

IFTTT (If This Then That) เป็นบริการฟรีที่เชื่อมต่อแอปและอุปกรณ์ต่างๆ เราจะใช้ IFTTT เพื่อส่งการแจ้งเตือนไปยังมือถือเมื่อมีคนกดกระดิ่ง

ขั้นตอนการตั้งค่า IFTTT

1️⃣ สร้างบัญชี IFTTT

ไปที่ ifttt.com และสร้างบัญชีฟรี

2️⃣ สร้าง Applet ใหม่

  • • คลิก "Create" → "If This Then That"
  • • คลิก "Add" ในส่วน "If This"

3️⃣ เลือก Webhooks Trigger

  • • ค้นหา "Webhooks"
  • • เลือก "Receive a web request"
  • • ตั้งชื่อ Event เป็น: doorbell_pressed
  • • คลิก "Create trigger"

4️⃣ เลือก Action (แจ้งเตือน)

  • • คลิก "Add" ในส่วน "Then That"
  • • เลือก "Notifications"
  • • เลือก "Send a notification from the IFTTT app"
  • • แก้ไขข้อความเป็น: 🔔 กระดิ่ง! มีคนหน้าบ้าน
  • • คลิก "Create action"

5️⃣ บันทึกและรับ Webhook Key

  • • คลิก "Continue"
  • • ตั้งชื่อ Applet เช่น: "Smart Doorbell"
  • • คลิก "Finish"
  • • ไปที่ Webhooks Settings
  • • คัดลอก "Webhook Key" และใส่ในโค้ด ESP8266

📱 ติดตั้งแอป IFTTT บนมือถือ

อย่าลืมดาวน์โหลดแอป IFTTT บนมือถือ (iOS หรือ Android) และล็อกอินด้วยบัญชีเดียวกับที่สร้าง Applet เพื่อรับการแจ้งเตือน

🧪 การทดสอบ

ขั้นตอนการทดสอบ

1

อัปโหลดโค้ด

เชื่อมต่อ ESP8266 กับคอมพิวเตอร์ และอัปโหลดโค้ดด้วย Arduino IDE

2

เปิด Serial Monitor

เปิด Serial Monitor (115200 baud) เพื่อดูข้อความ Debug

3

ตรวจสอบการเชื่อมต่อ WiFi

ดูใน Serial Monitor ว่า ESP8266 เชื่อมต่อ WiFi สำเร็จหรือไม่

4

ทดสอบกดปุ่ม

กดปุ่ม Push Button และฟังเสียง Buzzer และดู Serial Monitor

5

ตรวจสอบการแจ้งเตือน

ดูมือถือของคุณว่าได้รับการแจ้งเตือนจาก IFTTT หรือไม่

✅ ผลลัพธ์ที่คาดหวัง

  • • เมื่อกดปุ่ม Buzzer จะส่งเสียง "ดิง" 1 ครั้ง
  • • Serial Monitor แสดง "🔔 กระดิ่งถูกกด!"
  • • ESP8266 ส่ง HTTP request ไปยัง IFTTT
  • • มือถือได้รับ notification ภายใน 5-10 วินาที

🔧 ปัญหาที่พบบ่อยและวิธีแก้ไข

1. ESP8266 เชื่อมต่อ WiFi ไม่ได้

อาการ: Serial Monitor แสดง "....." ตลอด

สาเหตุ: ชื่อ WiFi หรือรหัสผ่านผิด หรือสัญญาณ WiFi อ่อน

วิธีแก้: ตรวจสอบชื่อและรหัสผ่าน WiFi ย้าย ESP8266 ไปใกล้ Router หรือลองใช้ WiFi Hotspot จากมือถือ

2. IFTTT ไม่ส่ง notification

อาการ: Serial Monitor แสดง "เชื่อมต่อ IFTTT สำเร็จ!" แต่ไม่มีการแจ้งเตือน

สาเหตุ: Webhook Key ผิด, Event ไม่ตรงกัน, หรือ Applet ไม่ได้เปิดอยู่

วิธีแก้: ตรวจสอบ Webhook Key, ชื่อ Event, และตรวจสอบว่า Applet ถูกเปิดอยู่ใน IFTTT

3. Buzzer ไม่ส่งเสียง

อาการ: กดปุ่มแต่ Buzzer ไม่ดัง

สาเหตุ: ต่อสายผิดขา, Buzzer เสีย, หรือกระแสไม่พอ

วิธีแก้: ตรวจสอบการต่อสาย, ลอง Buzzer ตัวอื่น, หรือใช้ Transistor เพื่อเพิ่มกระแส

4. ปุ่มกดแล้ว trigger ซ้ำหลายครั้ง

อาการ: กดครั้งเดียวแต่ได้รับ notification หลายรายการ

สาเหตุ: ไม่มี Debouncing หรือ Debounce delay สั้นเกินไป

วิธีแก้: เพิ่ม debounce delay ในโค้ด (เราได้ตั้งไว้ที่ 50ms แล้ว)

🚀 พัฒนาต่อยอด

นี่คือแค่จุดเริ่มต้น! คุณสามารถพัฒนาโปรเจกต์นี้ต่อได้อีกมากมาย:

📹 เพิ่มกล้อง (ESP8266 + Camera)

ใช้ ESP8266-CAM ถ่ายรูปผู้มาเยือนและส่งไปยัง Line หรือ Telegram

🎤 เพิ่มไมโครโฟน

ให้ผู้มาเยือนพูดคุยและส่งเสียงไปยังมือถือของคุณ

💬 เชื่อมต่อ CynoIoT Platform

ส่งข้อมูลไปยัง CynoIoT เพื่อเก็บ log และวิเคราะห์ข้อมูล

🔋 ใช้แบตเตอรี่

ใช้ Li-Po battery + Solar panel เพื่อให้ใช้งานได้โดยไม่ต้องเสียบปลั๊ก

🎵 เปลี่ยนเสียง Buzzer

ใช้ MP3 module หรือ Speaker เพื่อเล่นเสียงเพลงหรือเสียงที่กำหนดเอง

🌐 เชื่อมต่อ Home Assistant

ส่งข้อมูลไปยัง Home Assistant เพื่อควบคุมอุปกรณ์อื่นๆ

📝 สรุป

ในบทความนี้ คุณได้เรียนรู้วิธีสร้าง Smart Doorbell ด้วย ESP8266 งบประมาณน้อยกว่า 300 บาท ตั้งแต่การเลือกซื้ออุปกรณ์ การต่อวงจร การเขียนโปรแกรม ไปจนถึงการตั้งค่า IFTTT เพื่อรับการแจ้งเตือน

นี่คือโปรเจกต์ที่เหมาะสำหรับผู้เริ่มต้นที่ต้องการเรียนรู้เกี่ยวกับ IoT และสามารถนำไปประยุกต์ใช้กับโปรเจกต์อื่นๆ ได้

ถ้าคุณชอบบทความนี้ อย่าลืมแชร์ให้เพื่อนๆ และติดตามบทความ IoT อื่นๆ ใน CynoIoT Platform!

CynoIoT

แพลตฟอร์ม IoT ที่ครบวงจร สำหรับการพัฒนาและจัดการอุปกรณ์ IoT ของคุณ

ติดต่อเรา

  • 📧 info@cynoiot.com
  • 📱 08X-XXX-XXXX
  • 📍 ประเทศไทย

© 2026 CynoIoT. All rights reserved.