📑 เนื้อหาในบทความ
🎯 ภาพรวมโปรเจกต์
กระดิ่งประตูอัจฉริยะ (Smart Doorbell) เป็นหนึ่งในโปรเจกต์ IoT ที่น่าสนใจและมีประโยชน์มากที่สุด ด้วยงบประมาณ น้อยกว่า 300 บาท คุณสามารถสร้างระบบแจ้งเตือนเมื่อมีคนกดกระดิ่งหน้าบ้าน และรับการแจ้งเตือนผ่านมือถือได้ทันที ไม่ว่าคุณจะอยู่ที่ไหนในโลก ตราบใดที่มีอินเทอร์เน็ต
✨ จุดเด่นของโปรเจกต์นี้
- ✅ ราคาประหยัด: วัสดุทั้งหมดไม่เกิน 300 บาท
- ✅ ง่ายต่อการติดตั้ง: ไม่ต้องเจาะรูหรือดัดแปลงประตู
- ✅ แจ้งเตือนไกลบ้าน: รับ notification ผ่านมือถือ
- ✅ ปรับแต่งได้: เพิ่มฟีเจอร์เสียง, กล้อง, หรืออื่นๆ
- ✅ เหมาะสำหรับมือใหม่: โค้ดง่าย เข้าใจได้เร็ว
🎓 สิ่งที่คุณจะได้เรียนรู้
- • การใช้งาน ESP8266 NodeMCU เบื้องต้น
- • การเชื่อมต่อ WiFi และการส่ง HTTP Request
- • การใช้งาน IFTTT (If This Then That) สำหรับ IoT
- • การต่อใช้งาน Push Button และ Buzzer
- • การสร้าง IoT project ที่ใช้งานได้จริง
🔧 อุปกรณ์ที่ต้องใช้
| อุปกรณ์ | รายละเอียด | ราคาโดยประมาณ |
|---|---|---|
| ESP8266 NodeMCU | Microcontroller ที่มี 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 เพื่อรับการแจ้งเตือน
🧪 การทดสอบ
ขั้นตอนการทดสอบ
อัปโหลดโค้ด
เชื่อมต่อ ESP8266 กับคอมพิวเตอร์ และอัปโหลดโค้ดด้วย Arduino IDE
เปิด Serial Monitor
เปิด Serial Monitor (115200 baud) เพื่อดูข้อความ Debug
ตรวจสอบการเชื่อมต่อ WiFi
ดูใน Serial Monitor ว่า ESP8266 เชื่อมต่อ WiFi สำเร็จหรือไม่
ทดสอบกดปุ่ม
กดปุ่ม Push Button และฟังเสียง Buzzer และดู Serial Monitor
ตรวจสอบการแจ้งเตือน
ดูมือถือของคุณว่าได้รับการแจ้งเตือนจาก 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!