ESP32 + MQTT: สร้างสวิตช์ควบคุมอุปกรณ์ไฟฟ้าผ่านเน็ตเวิร์ก

ESP32 MQTT Guide

ESP32 กับ MQTT Protocol

เชื่อมต่ออุปกรณ์ IoT แบบเรียลไทม์ด้วยโปรโตคอลที่มีประสิทธิภาพ

📡🔌💬
MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอลการสื่อสารที่ออกแบบมาสำหรับอุปกรณ์ IoT โดยเฉพาะ ด้วยความเบาและประหยัดแบนด์วิธ ทำให้เหมาะกับการใช้งานกับ ESP32 ในโครงการที่ต้องการส่งข้อมูลแบบเรียลไทม์ระหว่างอุปกรณ์หลายตัว

MQTT คืออะไร?

MQTT เป็นโปรโตคอลการสื่อสารแบบ Publish-Subscribe ที่ทำงานผ่าน Broker กลาง ซึ่งแตกต่างจากการสื่อสารแบบ Client-Server ทั่วไป

🎯 หลักการทำงานของ MQTT

  • Publisher: อุปกรณ์ที่ส่งข้อมูล (เช่น เซ็นเซอร์อุณหภูมิ)
  • Subscriber: อุปกรณ์ที่รับข้อมูล (เช่น แอปมือถือ, จอแสดงผล)
  • Broker: ตัวกลางที่รับและกระจายข้อมูล
  • Topic: ช่องทางการสื่อสาร (เช่น "home/temperature")
การทำงานของ MQTT Protocol
แผนภาพการทำงานของ MQTT: Publisher ส่งข้อมูลผ่าน Broker ไปยัง Subscriber

ข้อดีของ MQTT:

  • เบาและรวดเร็ว - ใช้แบนด์วิธน้อย เหมาะกับเครือข่ายที่จำกัด
  • 🔄 Real-time Communication - ส่งข้อมูลแบบทันทีทันใด
  • 📱 Many-to-Many - อุปกรณ์หลายตัวสื่อสารกันได้พร้อมกัน
  • 🛡️ Quality of Service (QoS) - รับประกันการส่งข้อมูล
  • 🔌 Persistent Connection - รักษาการเชื่อมต่อไว้ตลอดเวลา

📊 MQTT Protocol

ข้อดี:

  • Real-time สูง
  • Many-to-Many
  • ใช้แบนด์วิธน้อย
  • มี QoS

ข้อเสีย:

  • ต้องมี Broker
  • ซับซ้อนกว่า HTTP

🌐 HTTP Protocol

ข้อดี:

  • ใช้งานง่าย
  • รองรับทั่วไป
  • ไม่ต้องมี Broker

ข้อเสีย:

  • ใช้แบนด์วิธมาก
  • ไม่ Real-time
  • One-to-One เท่านั้น
การส่งข้อมูลผ่าน Serial Monitor
ตัวอย่างการส่งข้อมูลผ่าน Serial Monitor เพื่อทดสอบการเชื่อมต่อ

การตั้งค่า ESP32 กับ MQTT

อุปกรณ์ที่ต้องใช้:

  • 🔷 บอร์ด ESP32 (รุ่นใดก็ได้)
  • 💻 Arduino IDE หรือ PlatformIO
  • 📡 MQTT Broker (เช่น Mosquitto, HiveMQ, หรือ Cloud Service)
  • 🌐 เครือข่าย WiFi
ESP32 Board พร้อมสวิตช์
บอร์ด ESP32 พร้อมสวิตช์สำหรับส่งข้อมูล

ขั้นตอนการติดตั้ง:

1️⃣ ติดตั้ง Library ที่จำเป็น

เปิด Arduino IDE และติดตั้ง Library ต่อไปนี้:

  • PubSubClient - สำหรับ MQTT
  • WiFi - สำหรับเชื่อมต่อ WiFi (มีใน ESP32 Core อยู่แล้ว)

2️⃣ ตั้งค่า MQTT Broker

คุณสามารถเลือกใช้ Broker ได้หลายแบบ:

  • Local Broker: ติดตั้ง Mosquitto บนคอมพิวเตอร์
  • Cloud Broker: ใช้บริการฟรีเช่น HiveMQ Cloud, CloudMQTT
  • Self-hosted: ติดตั้งบน Raspberry Pi หรือ Server
ตัวอย่างโค้ดพื้นฐาน:

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

const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char* mqtt_server = "broker.hivemq.com";

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  client.setServer(mqtt_server, 1883);
}

💡 เคล็ดลับการตั้งค่า

  • ใช้ชื่อ Client ID ที่ไม่ซ้ำกันสำหรับแต่ละอุปกรณ์
  • ตั้งค่า QoS ตามความสำคัญของข้อมูล (0, 1, หรือ 2)
  • ใช้ Topic แบบ Hierarchical (เช่น "home/room1/temperature")
  • เพิ่ม Reconnect Logic เพื่อรองรับการขาดการเชื่อมต่อ

การส่งและรับข้อมูล

การ Publish ข้อมูล (ส่งข้อมูล):

void publishData() {
  float temperature = readTemperature();
  String payload = String(temperature);
  client.publish("home/temperature", payload.c_str());
  Serial.println("Published: " + payload);
}

ฟังก์ชันนี้จะอ่านค่าอุณหภูมิและส่งไปยัง Topic "home/temperature" ผ่าน Broker

อุปกรณ์รับข้อมูล MQTT
อุปกรณ์ ESP32 ที่ทำหน้าที่รับข้อมูลจาก MQTT Broker

การ Subscribe ข้อมูล (รับข้อมูล):

void callback(char* topic, byte* payload, unsigned int length) {
  String message = "";
  for (int i = 0; i < length; i++) {
    message += (char)payload[i];
  }
  Serial.println("Received: " + message);
  // ประมวลผลข้อมูลที่ได้รับ
}

void setup() {
  client.setCallback(callback);
  client.subscribe("home/command");
}

ฟังก์ชัน callback จะถูกเรียกทุกครั้งที่มีข้อมูลใหม่เข้ามาใน Topic ที่ Subscribe ไว้

🔄 ตัวอย่างการใช้งานจริง

สถานการณ์: ควบคุมไฟ LED ผ่าน MQTT

  • 📱 แอปมือถือ Publish คำสั่ง "ON" หรือ "OFF" ไปยัง Topic "home/led"
  • 📡 ESP32 Subscribe Topic "home/led" และรอรับคำสั่ง
  • 💡 เมื่อได้รับคำสั่ง ESP32 จะเปิดหรือปิด LED ตามคำสั่ง
  • 📊 ESP32 Publish สถานะกลับไปยัง Topic "home/led/status"

⚙️ Quality of Service (QoS) Levels

  • QoS 0: ส่งครั้งเดียว ไม่รับประกัน (เร็วที่สุด)
  • QoS 1: ส่งอย่างน้อย 1 ครั้ง รับประกันว่าถึง (แนะนำ)
  • QoS 2: ส่งครั้งเดียวแน่นอน (ช้าที่สุดแต่แม่นยำ)

ตัวอย่างโครงการ

โครงการที่นิยมใช้ MQTT กับ ESP32:

🏠 Smart Home

  • ควบคุมไฟและเครื่องใช้ไฟฟ้า
  • ตรวจวัดอุณหภูมิและความชื้น
  • ระบบรักษาความปลอดภัย
  • แจ้งเตือนผ่านมือถือ

🌱 Smart Farm

  • ตรวจวัดความชื้นในดิน
  • ควบคุมระบบรดน้ำอัตโนมัติ
  • ติดตามสภาพอากาศ
  • บันทึกข้อมูลเพื่อวิเคราะห์

🏭 Industrial IoT

  • ตรวจสอบสถานะเครื่องจักร
  • แจ้งเตือนเมื่อมีปัญหา
  • เก็บข้อมูลการผลิต
  • ควบคุมระบบอัตโนมัติ

🚗 Vehicle Tracking

  • ติดตามตำแหน่ง GPS
  • ตรวจสอบสถานะรถ
  • แจ้งเตือนการบำรุงรักษา
  • วิเคราะห์การขับขี่

🎯 Best Practices

  • ใช้ TLS/SSL: เข้ารหัสการสื่อสารเพื่อความปลอดภัย
  • Username/Password: ตั้งค่าการยืนยันตัวตนบน Broker
  • Keep Alive: ตั้งค่า Keep Alive เพื่อตรวจสอบการเชื่อมต่อ
  • Error Handling: จัดการกรณีขาดการเชื่อมต่อ
  • Topic Design: ออกแบบ Topic Structure ให้เป็นระบบ

🔧 การแก้ปัญหาที่พบบ่อย

  • ไม่สามารถเชื่อมต่อ Broker: ตรวจสอบ IP, Port และ Firewall
  • ข้อมูลไม่ถึง: ตรวจสอบ Topic และ QoS Level
  • การเชื่อมต่อขาดบ่อย: เพิ่ม Reconnect Logic และปรับ Keep Alive
  • ข้อมูลล่าช้า: ตรวจสอบคุณภาพสัญญาณ WiFi

แหล่งข้อมูลเพิ่มเติม:

  • 📚 MQTT.org - เอกสารอย่างเป็นทางการ
  • 🎓 HiveMQ Blog - บทความและ Tutorial
  • 💻 GitHub - ตัวอย่างโค้ดและ Library
  • 👥 Arduino Forum - ชุมชนและการแก้ปัญหา

เริ่มต้นโครงการ IoT ของคุณ

พร้อมสร้างโครงการ IoT ด้วย ESP32 และ MQTT แล้วหรือยัง? เข้าร่วมชุมชนของเราเพื่อเรียนรู้เพิ่มเติม แบ่งปันประสบการณ์ และรับคำแนะนำจากผู้เชี่ยวชาญ

เนื้อหาโดย GlobalByte - แหล่งเรียนรู้โครงการ IoT และอิเล็กทรอนิกส์

แท็ก


Blog posts

© 2026 บริษัท โกลบอลโทรนิค อินเตอร์เทรด จํากัด, ขับเคลื่อนโดย Shopify

    • PayPal

    เข้าสู่ระบบ

    ลืมรหัสผ่านใช่ไหม?

    ยังไม่มีบัญชีใช่ไหม?
    สร้างบัญชี