12/04/2026 18:16น.

EP.117 การเชื่อมต่อ IoT Device หลายตัวด้วย WebSocket (Real-time IoT Network)
#ระบบเรียลไทม์
#IoT
#Go
#WebSocket
ระบบ IoT สมัยใหม่ไม่ได้ประกอบด้วยแค่อุปกรณ์เดียวอีกต่อไป แต่มีหลายร้อยหรือหลายพันอุปกรณ์ที่ต้องเชื่อมต่อพร้อมกัน เช่น:
- Sensor วัดอุณหภูมิ/ความชื้น
- อุปกรณ์ Smart Home
- เครื่องจักรหรือหุ่นยนต์ในโรงงาน
- GPS Tracker และระบบติดตามรถ
ทุกอุปกรณ์ต้องการการสื่อสาร แบบเรียลไทม์ที่เสถียร, ประหยัดพลังงาน, และ ปลอดภัย
ทำไมต้องใช้ WebSocket กับ IoT?
WebSocket เป็นหนึ่งในเทคโนโลยีที่เหมาะกับงาน IoT แบบ Real-time มากที่สุด เพราะ:
✅ เชื่อมต่อครั้งเดียว ส่งข้อมูลได้ต่อเนื่อง
✅ Latency ต่ำระดับมิลลิวินาที
✅ ประหยัด Bandwidth
✅ รองรับ Full-duplex Communication
🧱 1. สถาปัตยกรรมระบบ IoT ด้วย WebSocket
ระบบ IoT แบบ Real-time จะมีองค์ประกอบหลัก ๆ 4 ส่วน:
1) IoT Device (Client)
อาจเป็น Sensor, ESP32, Raspberry Pi, หรือแม้แต่ Mobile App ที่ initiate การเชื่อมต่อ WebSocket
2) WebSocket Gateway (Server)
หน้าที่:
- ยืนยันตัวตนอุปกรณ์
- รับ/ส่งข้อมูลจาก Sensor
- ส่งต่อข้อมูลไปยัง DB หรือ Message Broker
- Broadcast ให้ Dashboard แบบเรียลไทม์
3) Message Broker / Data Stream Layer
เช่น Redis Pub/Sub, Kafka, หรือ NATS ใช้กระจายข้อมูลจากอุปกรณ์ไปยังหลายบริการพร้อมกัน
4) Monitoring Dashboard
ส่วนแสดงข้อมูลแบบ Real-time เช่น หน้าจอดูสภาพเครื่องจักรในโรงงาน
🔐 2. การยืนยันตัวตนอุปกรณ์ (Device Authentication)
Security คือสิ่งสำคัญที่สุดในระบบ IoT
วิธีที่นิยมใช้:
✅ Device Token
สร้าง token เฉพาะสำหรับแต่ละ device เช่น:
device_id: SENSOR-01
device_secret: 98asdh9283dj29
✅ JWT ที่ผูกกับ Device ID
เหมาะกับระบบที่มีการจัดการขนาดใหญ่
✅ IP Whitelist (ใช้ร่วมกันในระบบเครือข่ายปิด)
📡 3. การแมปอุปกรณ์กับ Connection
โค้ดฝั่ง Server ต้องแมป device_id กับ websocket.Conn
var devices = make(map[string]*websocket.Conn)
type DeviceAuth struct {
DeviceID string `json:"device_id"`
Token string `json:"token"`
}
func handleDevice(c *websocket.Conn) {
var auth DeviceAuth
c.ReadJSON(&auth)
if !validateToken(auth.DeviceID, auth.Token) {
c.WriteMessage(websocket.TextMessage, []byte("AUTH_FAILED"))
c.Close()
return
}
devices[auth.DeviceID] = c
fmt.Println("Device connected:", auth.DeviceID)
}
📊 4. การส่งข้อมูล Sensor แบบเรียลไทม์
{
"device_id": "TEMP-01",
"temperature": 26.5,
"humidity": 80
}
type SensorData struct {
DeviceID string `json:"device_id"`
Temperature float64 `json:"temperature"`
Humidity float64 `json:"humidity"`
}
func listenDevice(deviceID string, conn *websocket.Conn) {
for {
var data SensorData
if err := conn.ReadJSON(&data); err != nil {
delete(devices, deviceID)
return
}
broadcastToDashboard(data) // ส่งข้อมูลไป Dashboard
}
}
🔄 5. Bandwidth Management จัดการการส่งข้อมูลถี่
Sensor บางชนิดส่งข้อมูลทุก 100ms หากไม่ควบคุม อาจทำให้ Server ล่มได้
วิธีแก้ปัญหา:
- ✅ Rate Limit ต่ออุปกรณ์ (เช่น 10 ข้อความ/วินาที)
- ✅ Message Aggregation รวมข้อมูลหลายชุดก่อนส่ง
- ✅ Adaptive Data Rate ปรับความถี่ตามสถานการณ์
- ✅ Compression เช่น GZIP หรือใช้ Protobuf
🖥 6. ตัวอย่าง Dashboard Listener
func dashboardListener() {
conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/dashboard", nil)
if err != nil { panic(err) }
for {
_, msg, _ := conn.ReadMessage()
fmt.Println("New Sensor Update:", string(msg))
}
}
📈 7. การขยายระบบ (Scaling) รองรับ 10,000+ Device
- ✅ Horizontal Scaling: รัน WebSocket หลาย instance
- ✅ Redis Pub/Sub: กระจาย message ระหว่าง instance
- ✅ Kubernetes + HPA: Auto-scale ตามภาระงาน
- ✅ Sharding Device: แบ่ง device เป็นกลุ่ม เช่น shard-01, shard-02
🧪 ท้าให้ลอง!
ลองสร้างระบบ IoT Demo:
- เครื่องจำลอง (ESP32 หรือ Go script) ส่งอุณหภูมิทุก 1 วินาที
- WebSocket Server รับและบันทึกลง DB
- Dashboard รับข้อมูลแบบ Real-time
- เพิ่มระบบแจ้งเตือนเมื่ออุณหภูมิเกิน Threshold
นี่คือพื้นฐานของ Smart Home, Smart Factory และ Smart Farming!
🔮 EP ถัดไป การรวม AI เข้ากับ WebSocket
EP.118 เราจะสร้างระบบ AI + WebSocket สำหรับ IoT สอนการใช้ AI/ML ตรวจจับ Anomaly, วิเคราะห์ข้อมูล sensor, และ Predictive Maintenance แบบเรียลไทม์!
หากคุณทำระบบนี้ได้… แสดงว่าคุณก้าวสู่ระดับโปรของระบบ Real-time เต็มตัวแล้ว! 🎯 แล้วพบกันในตอนต่อไปครับ!