บทความรูปแบบ Tutorial — เรียนรู้วิธีใช้ CoAP (Constrained Application Protocol) สำหรับเชื่อมต่ออุปกรณ์ IoT ที่มีทรัพยากรจำกัด ตั้งแต่หลักการไปจนถึงการใช้งานจริง
เมื่อพูดถึงโปรโตคอลสำหรับ IIoT หลายคนนึกถึง MQTT ก่อนเป็นอันดับแรก แต่มีอีกโปรโตคอลหนึ่งที่ถูกออกแบบมาโดยเฉพาะสำหรับอุปกรณ์ที่มีข้อจำกัดด้านพลังงานและหน่วยความจำ — CoAP (Constrained Application Protocol) ซึ่งกำหนดโดย IETF ใน RFC 7252
CoAP เป็นโปรโตคอลแบบ RESTful Web Transfer ที่ทำงานบน UDP (ไม่ใช่ TCP เหมือน HTTP) ทำให้มี overhead ต่ำมาก เหมาะสำหรับไมโครคอนโทรลเลอร์และเซ็นเซอร์ที่ทำงานด้วยแบตเตอรี่ โดยเฉพาะในเครือข่าย 6LoWPAN (IPv6 over Low-Power Wireless Personal Area Networks)
ทำไมต้อง CoAP แทน HTTP?
HTTP ถูกออกแบบมาสำหรับคอมพิวเตอร์ที่มีทรัพยากรเพียบพร้อม แต่เซ็นเซอร์ IIoT จำนวนมากมี RAM เพียง 10–100 KB และทำงานบนเครือข่ายที่มี packet loss สูง CoAP จึงถูกสร้างขึ้นเพื่อแก้ปัญหาเหล่านี้:
| คุณสมบัติ | CoAP | HTTP |
|---|---|---|
| Transport Layer | UDP | TCP |
| Header Size | 4 bytes (fixed) | ~200–800 bytes |
| Methods | GET, POST, PUT, DELETE + Observe | GET, POST, PUT, DELETE, PATCH |
| Security | DTLS (Datagram TLS) | TLS/SSL |
| Power Consumption | ต่ำมาก (No TCP handshake) | สูง (TCP 3-way handshake) |
| Message Encoding | Binary | Text-based |
CoAP Message Format: ขนาด 4 Bytes เท่านั้น
CoAP Header มีขนาดคงที่ 4 bytes (32 bits) ซึ่งเล็กมากเมื่อเทียบกับ HTTP header ที่อาจยาวหลายร้อยไบต์ โครงสร้างประกอบด้วย:
- Version (2 bits): ระบุเวอร์ชัน CoAP (ปัจจุบัน = 1)
- Type (2 bits): ประเภทของ message — Confirmable (CON), Non-Confirmable (NON), Acknowledgement (ACK), Reset (RST)
- Token Length (4 bits): ความยาว Token สำหรับจับคู่ request/response
- Code (8 bits): Method code (GET=0.01, POST=0.02, PUT=0.03, DELETE=0.04) หรือ Response code
- Message ID (16 bits): ใช้ตรวจจับ duplicate messages และ matching
ประเภทของ CoAP Messages
CoAP กำหนด message type 4 ประเภท ซึ่งเป็นกุญแจสำคัญของความน่าเชื่อถือบน UDP:
- Confirmable (CON): ต้องการ ACK — ผู้ส่งจะ retry หากไม่ได้รับการยืนยันภายในเวลาที่กำหนด (exponential backoff)
- Non-Confirmable (NON): ไม่ต้องการ ACK — เหมาะกับข้อมูลเซ็นเซอร์ที่ส่งต่อเนื่อง หากหายไปบางชุดก็ไม่วิกฤต
- Acknowledgement (ACK): ตอบรับ CON message — อาจ piggyback payload ไปด้วย
- Reset (RST): แจ้งว่าไม่สามารถประมวลผล message ได้
Observe Extension: Push Notification สำหรับ IIoT
ฟีเจอร์เด่นของ CoAP คือ Observe Method (RFC 7641) ซึ่งเป็นการขยายจาก GET ปกติ เมื่อ Client ส่ง Observe Request ไปยัง Server (เซ็นเซอร์) Server จะส่งค่าอัปเดตกลับมา ทุกครั้งที่ค่าเปลี่ยน โดยไม่ต้องให้ Client poll ซ้ำ — คล้ายกับ Pub/Sub ของ MQTT แต่ทำงานในรูปแบบ RESTful
ตัวอย่างเช่น เซ็นเซอร์วัดอุณหภูมิในห้องเก็บของเย็น สามารถ push notification ผ่าน Observe ได้ทันทีเมื่ออุณหภูมิเปลี่ยนแปลงเกิน threshold ที่กำหนด ทำให้ระบบตอบสนองได้แบบเรียลไทม์โดยไม่เปลืองแบตเตอรี่จากการ polling
Tutorial: การใช้งาน CoAP ในโรงงาน
ขั้นตอนที่ 1: การค้นพบทรัพยากร (Resource Discovery)
CoAP มีบริการ Discovery ในตัวผ่าน path /.well-known/core Client สามารถ query path นี้เพื่อค้นพบเซ็นเซอร์ทั้งหมดที่มีในเครือข่าย โดยไม่ต้องทราบ URL ล่วงหน้า:
GET coap://sensor-node-01.local/.well-known/core
Response:
</temperature>;rt="temperature";ct=41,
</humidity>;rt="humidity";ct=41,
</pressure>;rt="pressure";ct=41
ขั้นตอนที่ 2: การอ่านค่าเซ็นเซอร์
GET coap://sensor-node-01.local/temperature
Response (2.05 Content):
{"value": 28.5, "unit": "celsius", "timestamp": 1723286400}
ขั้นตอนที่ 3: การสมัครรับการแจ้งเตือน (Observe)
GET coap://sensor-node-01.local/temperature
with Observe option = 0 (register)
# Server จะ push ค่าใหม่เมื่ออุณหภูมิเปลี่ยน:
{"value": 29.1, "unit": "celsius"}
{"value": 30.5, "unit": "celsius"}
# → แจ้งเตือนทันทีเมื่อเกิน 30°C!
ความปลอดภัย: DTLS สำหรับ CoAP
CoAP ใช้ DTLS (Datagram Transport Layer Security) สำหรับการเข้ารหัสและยืนยันตัวตน เนื่องจากทำงานบน UDP จึงไม่สามารถใช้ TLS แบบเดียวกับ HTTP ได้ DTLS รองรับการเข้ารหัสด้วย AES-128 และ mutual authentication ผ่านใบรับรองดิจิทัล อย่างไรก็ตาม DTLS handshake ต้องการทรัพยากรมากกว่า CoAP ปกติ จึงมักใช้เฉพาะในโหมดที่ต้องการความปลอดภัยสูง
Honey Corporation กับการนำ CoAP ไปใช้งาน
ทีมวิศวกรของ Honey Corporation เคยออกแบบระบบ IoT Monitoring สำหรับห้องเก็บของเย็นในอุตสาหกรรมอาหาร โดยใช้เซ็นเซอร์อุณหภูมิและความชื้นที่สื่อสารผ่าน CoAP เพื่อลดการใช้พลังงานและเพิ่มอายุแบตเตอรี่ ประสบการณ์นี้สะท้อนว่าเลือกโปรโตคอลให้เหมาะกับข้อจำกัดของอุปกรณ์ได้ ระบบจะทำงานได้นานขึ้นและดูแลรักษาง่ายขึ้น
Key Takeaways
- CoAP ใช้ UDP: ลด overhead และการใช้พลังงาน — เหมาะกับอุปกรณ์ที่ทำงานด้วยแบตเตอรี่
- Header 4 bytes เท่านั้น: ขนาดเล็กกว่า HTTP header หลายสิบเท่า ประหยัดแบนด์วิดท์ในเครือข่ายความเร็วต่ำ
- RESTful Architecture: ใช้ Methods GET/POST/PUT/DELETE และ URI เหมือน HTTP ทำให้นักพัฒนาเข้าใจง่าย
- Observe Extension: Server push ค่าอัปเดตอัตโนมัติเมื่อข้อมูลเปลี่ยน — ลดการ polling ที่เปลืองพลังงาน
- DTLS Security: เข้ารหัสด้วย AES-128 บน UDP ให้ความปลอดภัยโดยไม่ต้องพึ่ง TCP
- Resource Discovery: ค้นพบเซ็นเซอร์อัตโนมัติผ่าน
/.well-known/coreโดยไม่ต้องตั้งค่า manual - เหมาะกับ 6LoWPAN: ทำงานได้ดีบนเครือข่าย Low-Power Wide-Area เช่น Thread, BLE Mesh
- CoAP vs MQTT: CoAP เหมาะกับ Request/Response + Discovery, MQTT เหมาะกับ Pub/Sub แบบหลายผู้รับ
Honey Corporation พร้อมให้คำปรึกษา
ทีมงานของเรามีความเชี่ยวชาญด้านระบบ IoT Connectivity และการออกแบบโครงสร้างเครือข่ายเซ็นเซอร์ที่เหมาะสมกับสภาพแวดล้อมของโรงงานคุณ พร้อมให้คำปรึกษาและประเมินระบบฟรี
📞 โทร: 09-23242995 | อีเมล: support@honey.co.th
เว็บไซต์: www.honey.co.th
