บทความรูปแบบ 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 Protocol for Constrained IoT Devices
ภาพประกอบ: อุปกรณ์ IoT ขนาดเล็กที่ใช้ CoAP สื่อสารผ่านเครือข่าย 6LoWPAN ด้วย UDP (ภาพจาก Unsplash)

ทำไมต้อง 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:

  1. Confirmable (CON): ต้องการ ACK — ผู้ส่งจะ retry หากไม่ได้รับการยืนยันภายในเวลาที่กำหนด (exponential backoff)
  2. Non-Confirmable (NON): ไม่ต้องการ ACK — เหมาะกับข้อมูลเซ็นเซอร์ที่ส่งต่อเนื่อง หากหายไปบางชุดก็ไม่วิกฤต
  3. Acknowledgement (ACK): ตอบรับ CON message — อาจ piggyback payload ไปด้วย
  4. Reset (RST): แจ้งว่าไม่สามารถประมวลผล message ได้
CoAP Message Types and Protocol Architecture Diagram
ภาพประกอบ: โครงสร้าง Message Type ของ CoAP ที่รองรับทั้ง Reliable (CON) และ Unreliable (NON) Communication (ภาพจาก Unsplash)

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

  1. CoAP ใช้ UDP: ลด overhead และการใช้พลังงาน — เหมาะกับอุปกรณ์ที่ทำงานด้วยแบตเตอรี่
  2. Header 4 bytes เท่านั้น: ขนาดเล็กกว่า HTTP header หลายสิบเท่า ประหยัดแบนด์วิดท์ในเครือข่ายความเร็วต่ำ
  3. RESTful Architecture: ใช้ Methods GET/POST/PUT/DELETE และ URI เหมือน HTTP ทำให้นักพัฒนาเข้าใจง่าย
  4. Observe Extension: Server push ค่าอัปเดตอัตโนมัติเมื่อข้อมูลเปลี่ยน — ลดการ polling ที่เปลืองพลังงาน
  5. DTLS Security: เข้ารหัสด้วย AES-128 บน UDP ให้ความปลอดภัยโดยไม่ต้องพึ่ง TCP
  6. Resource Discovery: ค้นพบเซ็นเซอร์อัตโนมัติผ่าน /.well-known/core โดยไม่ต้องตั้งค่า manual
  7. เหมาะกับ 6LoWPAN: ทำงานได้ดีบนเครือข่าย Low-Power Wide-Area เช่น Thread, BLE Mesh
  8. CoAP vs MQTT: CoAP เหมาะกับ Request/Response + Discovery, MQTT เหมาะกับ Pub/Sub แบบหลายผู้รับ

Honey Corporation พร้อมให้คำปรึกษา

ทีมงานของเรามีความเชี่ยวชาญด้านระบบ IoT Connectivity และการออกแบบโครงสร้างเครือข่ายเซ็นเซอร์ที่เหมาะสมกับสภาพแวดล้อมของโรงงานคุณ พร้อมให้คำปรึกษาและประเมินระบบฟรี

📞 โทร: 09-23242995 | อีเมล: support@honey.co.th
เว็บไซต์: www.honey.co.th