บทความ: คู่มือเลือกโปรโตคอล IoT ที่เหมาะกับโปรเจกต์ของคุณ

เปรียบเทียบ MQTT, HTTP, WebSocket และ CoAP ทีละอย่าง เลือกใช้ให้ถูกต้องตามการใช้งาน พร้อมตัวอย่างโค้ดและคำอธิบายภาษาไทย

7 เมษายน 2026 20 นาที ระดับกลาง
📡
MQTT
🌐
HTTP/REST
🔄
WebSocket
CoAP

🤔 ทำไมต้องเลือกโปรโตคอล IoT ให้ถูกต้อง?

การเลือกโปรโตคอลสื่อสารที่เหมาะสมเป็นหัวใจสำคัญของโปรเจกต์ IoT ที่ประสบความสำเร็จ โปรโตคอลที่เลือกจะส่งผลต่อ:

  • ประสิทธิภาพการใช้พลังงาน - สำคัญมากสำหรับอุปกรณ์ที่ใช้แบตเตอรี่
  • ความเร็วในการตอบสนอง - Real-time หรือ Delay ได้บ้าง?
  • การใช้ Bandwidth - ข้อมูลเล็กน้อยหรือส่งไฟล์ใหญ่ๆ?
  • ความซับซ้อนในการพัฒนา - ต้องการเวลาเรียนรู้นานแค่ไหน?
  • ความเข้ากันได้กับระบบเดิม - ต้องเชื่อมต่อกับระบบอื่นๆ อย่างไร?

💡 หลักการพื้นฐาน: ไม่มีโปรโตคอลที่ "ดีที่สุด" สำหรับทุกสถานการณ์ การเลือกใช้ต้องขึ้นอยู่กับความต้องการเฉพาะของโปรเจกต์คุณ

📡 MQTT - Message Queuing Telemetry Transport

MQTT เป็นโปรโตคอล Messaging ที่ออกแบบมาเพื่อ IoT โดยเฉพาะ มีน้ำหนักเบา ใช้พลังงานน้อย และทำงานบน TCP/IP

✅ ข้อดี

  • เบามาก - Header เพียง 2 bytes สำหรับข้อความเล็กๆ
  • ประหยัดแบต - สามารถ Deep Sleep และตื่นเพื่อส่งข้อมูลได้
  • Pub/Sub Pattern - การสื่อสารแบบหนึ่งต่อหลาย (1-to-many) ง่ายๆ
  • QoS Levels - 3 ระดับ ให้มั่นใจว่าข้อมูลถึงปลายทาง
  • Last Will Testament - แจ้งเตือนเมื่ออุปกรณ์ตัดการเชื่อมต่อ
  • Retained Messages - เก็บข้อความล่าสุดไว้สำหรับ Subscriber ใหม่

❌ ข้อเสีย

  • ต้องมี Broker (ตัวกลาง) ทำงานอยู่ตลอดเวลา
  • ไม่รองรับการส่งไฟล์ขนาดใหญ่
  • ต้องเรียนรู้ Concept ของ Pub/Sub

🎯 เหมาะสำหรับ

  • 🌡️ ส่งข้อมูลเซ็นเซอร์แบบ Real-time (Temperature, Humidity)
  • 🏠 Smart Home Automation (ควบคุมไฟ, เปิด-ปิดอุปกรณ์)
  • 🌾 การเกษตรและ Environment Monitoring
  • 🔋 อุปกรณ์ที่ใช้แบตเตอรี่ (Battery-powered sensors)
  • 📊 ระบบที่ต้องการ 1-to-many communication

📌 MQTT Topics ที่ควรรู้:
- home/livingroom/temperature (Sensor data)
- home/livingroom/light/set (Control command)
- home/+/temperature (Wildcard - ทุกห้อง)

🌐 HTTP/REST API - มาตรฐานที่คุ้นเคย

HTTP เป็นโปรโตคอลที่พัฒนาและใช้งานง่ายที่สุด เพราะทุกคนรู้จักและมี Tools รองรับเต็มไปหมด ใช้ Request/Response Pattern

✅ ข้อดี

  • ง่ายต่อการพัฒนา - ทุกภาษาโปรแกรมมี Library
  • RESTful - ใช้ HTTP Methods (GET, POST, PUT, DELETE)
  • Stateless - Server ไม่ต้องเก็บ Session
  • Firewall Friendly - ผ่าน Port 80/443 ได้เสมอ
  • Debug ง่าย - ใช้ Postman, Browser, curl ได้
  • JSON Format - มนุษย์อ่านเข้าใจง่าย

❌ ข้อเสีย

  • Overhead สูง - Header ใหญ่ ไม่เหมาะกับข้อมูลเล็กๆ
  • Request/Response - ต้องรอ Server ตอบทุกครั้ง
  • ไม่ Real-time - Client ต้อง Poll (ถามซ้ำๆ)
  • ใช้พลังงานมาก - ไม่เหมาะกับแบตเตอรี่

🎯 เหมาะสำหรับ

  • 📱 Mobile Apps ที่เรียกข้อมูลเป็นระยะๆ
  • 🔌 การเชื่อมต่อกับ Third-party Services
  • 📊 Dashboard ที่ Update ไม่บ่อย
  • 🖥️ Web Application ทั่วไป
  • 🔄 การส่งข้อมูลขนาดใหญ่ (Logs, Images)

💡 เลือก HTTP เมื่อ: คุณต้องการความง่ายในการพัฒนา, มี Developer ที่คุ้นเคยกับ REST API, หรือต้องเชื่อมต่อกับ Services อื่นๆ ที่รองรับ HTTP

🔄 WebSocket - การสื่อสารสองทิศทางแบบ Real-time

WebSocket เป็นโปรโตคอลที่ให้การสื่อสาร Full-duplex (สองทิศทางพร้อมกัน) ผ่านการเชื่อมต่อ TCP เดียว เหมาะสำหรับ Real-time Applications

✅ ข้อดี

  • Real-time Bi-directional - Server และ Client ส่งข้อมูลได้ทันที
  • Low Latency - ไม่ต้องเปิด Connection ใหม่ทุกครั้ง
  • Efficient - หลังจาก Handshake แล้ว Header เล็กมาก
  • Push Notifications - Server สามารถ Push ข้อมูลหา Client ได้

❌ ข้อเสีย

  • Stateful - Server ต้องเก็บ Connection ของทุก Client
  • Scalability - ต้องมีการจัดการ Connection เป็นพิเศษ
  • Firewall Issues - บาง Proxy ไม่อนุญาต
  • Reconnection - ต้องจัดการเมื่อ Connection หลุด

🎯 เหมาะสำหรับ

  • 📈 Real-time Charts & Dashboards
  • 💬 Chat Applications
  • 🎮 Online Gaming
  • 🏠 Home Automation (Real-time control)
  • 🔔 Live Notifications

💡 WebSocket vs MQTT: WebSocket ดีกว่าสำหรับ Server-to-Client communication ที่ต้องการ Real-time แต่ MQTT ยังดีกว่าสำหรับ Device-to-Cloud IoT scenarios เพราะ QoS และประหยัดพลังงาน

⚡ CoAP - Constrained Application Protocol

CoAP ถูกออกแบบโดย IETF สำหรับอุปกรณ์ที่มีทรัพยากรจำกัด (Constrained Devices) ทำงานบน UDP และมีความคล้ายคลึงกับ HTTP มาก

✅ ข้อดี

  • เบามาก - Header เพียง 4 bytes (ขั้นต่ำ)
  • UDP-based - ไม่มี Connection overhead
  • REST-like - ใช้ GET/POST/PUT/DELETE เหมือน HTTP
  • Resource Discovery - ค้นหา Resources ในเครือข่ายได้
  • Observe - Subscribe การเปลี่ยนแปลงของ Resource
  • Multicast Support - ส่งข้อมูลถึงหลาย Device พร้อมกัน

❌ ข้อเสีย

  • ไม่รับประกันการส่ง - เพราะใช้ UDP
  • Less Popular - มี Library และ Tools น้อยกว่า MQTT/HTTP
  • ความปลอดภัย - DTLS ซับซ้อนกว่า TLS

🎯 เหมาะสำหรับ

  • 🌐 6LoWPAN Networks (IPv6 บน Low-power Wireless)
  • 🏭 Industrial IoT (IIoT)
  • 🌳 Smart City Sensors
  • 🔌 Thread & Zigbee Networks (ที่มี Border Router)
  • ⚡ อุปกรณ์ที่มี RAM/CPU น้อยมากๆ

🔗 CoAP ใน Matter Smart Home: โปรโตคอล Matter ใช้ UDP และมีแนวคิดคล้าย CoAP ทำให้เหมาะสำหรับ Smart Home Devices ที่ต้องการตอบสนองเร็วและประหยัดพลังงาน

📊 ตารางเปรียบเทียบทั้ง 4 โปรโตคอล

FeatureMQTTHTTPWebSocketCoAP
TransportTCPTCPTCPUDP
PatternPub/SubReq/ResFull-duplexReq/Res
Overheadต่ำมากสูงปานกลางต่ำมาก
Real-time✅✅⚠️
Battery Friendly
Scalabilityสูงมากปานกลางต่ำสูง
Ease of Useปานกลางง่ายมากปานกลางซับซ้อน
Use CaseIoT SensorsWeb APIReal-time AppConstrained IoT

💻 ตัวอย่างโค้ด ESP32

MQTT Example (ESP32)

#include <WiFi.h>
#include <PubSubClient.h>

// WiFi credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// MQTT Broker
const char* mqtt_server = "broker.cynoiot.com";

WiFiClient espClient;
PubSubClient client(espClient);

// เชื่อมต่อ WiFi
void setup_wifi() {
  delay(10);
  Serial.println("Connecting to WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");
}

// Callback รับข้อความจาก MQTT
void callback(char* topic, byte* message, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("]: ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
  }
  Serial.println();
}

// เชื่อมต่อ MQTT Broker
void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (client.connect("ESP32Client")) {
      Serial.println("connected");
      client.subscribe("home/livingroom/light/set");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  // ส่งข้อมูลอุณหภูมิทุก 5 วินาที
  static unsigned long lastSend = 0;
  if (millis() - lastSend > 5000) {
    float temp = random(200, 300) / 10.0;
    char msg[50];
    sprintf(msg, "{\"temperature\": %.1f}", temp);
    client.publish("home/livingroom/temperature", msg);
    lastSend = millis();
  }
}

HTTP Example (ESP32)

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* serverUrl = "https://api.cynoiot.com/sensor-data";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(serverUrl);
    http.addHeader("Content-Type", "application/json");

    // สร้าง JSON data
    String jsonData = "{\"temperature\": 25.5, \"humidity\": 60.2}";

    // ส่ง POST request
    int httpResponseCode = http.POST(jsonData);

    if (httpResponseCode > 0) {
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
      String response = http.getString();
      Serial.println(response);
    } else {
      Serial.print("Error code: ");
      Serial.println(httpResponseCode);
    }
    http.end();
  }
  delay(10000); // ส่งทุก 10 วินาที
}

WebSocket Example (ESP32)

#include <WiFi.h>
#include <WebSocketsClient.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* wsServer = "ws://your-websocket-server.com";
const int wsPort = 81;

WebSocketsClient webSocket;

// WebSocket event handler
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
  switch(type) {
    case WStype_DISCONNECTED:
      Serial.println("Disconnected!");
      break;
    case WStype_CONNECTED:
      Serial.println("Connected!");
      // ส่งข้อความเมื่อเชื่อมต่อสำเร็จ
      webSocket.sendTXT("Hello Server!");
      break;
    case WStype_TEXT:
      Serial.printf("Message: %s\n", payload);
      break;
  }
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");

  // เชื่อมต่อ WebSocket
  webSocket.begin(wsServer, wsPort, "/");
  webSocket.onEvent(webSocketEvent);
}

void loop() {
  webSocket.loop();

  // ส่งข้อมูลทุก 5 วินาที
  static unsigned long lastSend = 0;
  if (millis() - lastSend > 5000) {
    float temp = random(200, 300) / 10.0;
    String msg = "{\"temp\": " + String(temp) + "}";
    webSocket.sendTXT(msg);
    lastSend = millis();
  }
}

🎯 แนวทางปฏิบัติที่ดี

1. เลือกโปรโตคอลให้เหมาะกับ Use Case

  • ถ้าต้องการ Real-time sensor data → MQTT
  • ถ้าต้องการความง่ายในการพัฒนา → HTTP
  • ถ้าต้องการ Real-time dashboard → WebSocket
  • ถ้าอุปกรณ์มีทรัพยากรน้อยมาก → CoAP

2. ความปลอดภัย

  • ใช้ TLS/SSL สำหรับทุกโปรโตคอล (HTTPS, WSS, MQTTS, CoAPS)
  • ใช้ Authentication (API Keys, JWT, Username/Password)
  • ใช้ Encryption สำหรับข้อมูลที่ละเอียดอ่อน

3. การจัดการ Connection

  • ใส่ Reconnection Logic สำหรับทุกโปรโตคอล
  • ใช้ Keep-Alive หรือ Ping/Pong ตรวจสอบสถานะ
  • ใช้ Deep Sleep สำหรับประหยัดแบต (MQTT/CoAP)

4. การออกแบบ Architecture

  • ใช้ Message Broker (MQTT) สำหรับระบบที่ซับซ้อน
  • ใช้ Gateway แปลงโปรโตคอลระหว่างระบบ
  • ใช้ Edge Processing ลดการส่งข้อมูลที่ไม่จำเป็น

📝 สรุป

การเลือกโปรโตคอล IoT ที่เหมาะสมเป็นการตัดสินใจที่สำคัญ สรุปได้ดังนี้:

  • MQTT - เลือกสำหรับโปรเจกต์ IoT ทั่วไปที่ต้องการ Real-time และประหยัดพลังงาน
  • HTTP - เลือกเมื่อต้องการความง่ายในการพัฒนาและเชื่อมต่อกับระบบเดิม
  • WebSocket - เลือกสำหรับ Real-time Dashboard และ Interactive Applications
  • CoAP - เลือกสำหรับ Constrained Devices และ Industrial IoT

💡 หมายเหตุ: ในโปรเจกต์จริง คุณอาจต้องใช้หลายโปรโตคอลร่วมกัน เช่น ใช้ MQTT สำหรับ Sensor และ HTTP สำหรับ Dashboard

CynoIoT

แพลตฟอร์ม IoT ที่ครบวงจรสำหรับการทำโปรเจกต์ Smart Home และ Automation

ติดต่อเรา

คำถามหรือข้อสงสัย? ติดต่อเราได้ที่ support@cynoiot.com

© 2026 CynoIoT. All rights reserved.