MQTT (การเข้าคิวข้อความการส่งข้อความทางไกล) เป็นโปรโตคอลการส่งข้อความที่มีน้ำหนักเบาที่ใช้กันทั่วไปในแอพพลิเคชั่น IoT (Internet of Things) สำหรับการสื่อสารที่เชื่อถือได้และมีประสิทธิภาพระหว่างอุปกรณ์ การโฮสต์เซิร์ฟเวอร์ MQTT บน Raspberry Pi ช่วยให้คุณสามารถสร้างศูนย์กลางการส่งข้อความท้องถิ่นสำหรับโครงการ IoT ของคุณ คู่มือนี้จะนำคุณผ่านการตั้งค่าและเรียกใช้เซิร์ฟเวอร์ MQTT บน Raspberry Pi
สิ่งที่คุณต้องการ
- Raspberry Pi (รุ่นใด ๆ ที่มีการสนับสนุน GPIO เช่น PI 3, PI 4)
- การ์ด microSD (อย่างน้อย 8GB, คลาส 10 หรือดีกว่า)
- แหล่งจ่ายไฟ (5V, 2.5A ขั้นต่ำสำหรับ PI 3; 5V, 3A สำหรับ PI 4)
- Raspberry Pi OS (เวอร์ชัน lite หรือเดสก์ท็อป)
- การเชื่อมต่ออินเทอร์เน็ต
- ลูกค้า MQTT (เช่นเครื่องมือซอฟต์แวร์ ESP8266, ESP32 หรือ MQTT)
ขั้นตอนที่ 1: อัปเดต Raspberry Pi
- ตรวจสอบให้แน่ใจว่า Raspberry Pi ของคุณทันสมัย:
sudo apt update && sudo apt upgrade -y
ขั้นตอนที่ 2: ติดตั้ง Mosquitto MQTT Broker
Mosquitto เป็นนายหน้า MQTT ที่มีน้ำหนักเบาและใช้กันอย่างแพร่หลาย
-
ติดตั้ง Mosquitto และเครื่องมือไคลเอนต์:
sudo apt install -y mosquitto mosquitto-clients
-
เปิดใช้งาน Mosquitto เพื่อเริ่มต้นที่ Boot:
sudo systemctl enable mosquitto
-
เริ่มบริการ Mosquitto:
sudo systemctl start mosquitto
ขั้นตอนที่ 3: ทดสอบนายหน้า MQTT
-
เปิดหน้าต่างเทอร์มินัลหรือเซสชัน SSH สองครั้งไปยัง Raspberry Pi ของคุณ
-
ในเทอร์มินัลแรกสมัครรับหัวข้อทดสอบ:
mosquitto_sub -h localhost -t test/topic
-
ในเทอร์มินัลที่สองเผยแพร่ข้อความทดสอบ:
mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
-
คุณควรเห็นข้อความ "สวัสดี MQTT!" ในเทอร์มินัลแรก
ขั้นตอนที่ 4: กำหนดค่า mosquitto สำหรับการเชื่อมต่อภายนอก
-
เปิดไฟล์การกำหนดค่า Mosquitto:
sudo nano /etc/mosquitto/mosquitto.conf
-
เพิ่มบรรทัดต่อไปนี้เพื่ออนุญาตการเชื่อมต่อภายนอก:
listener 1883 allow_anonymous true
บันทึก: สำหรับสภาพแวดล้อมการผลิตให้ตั้งค่าการรับรองความถูกต้องของผู้ใช้แทนการอนุญาตให้เข้าถึงแบบไม่ระบุชื่อ
-
รีสตาร์ทบริการ Mosquitto เพื่อใช้การเปลี่ยนแปลง:
sudo systemctl restart mosquitto
-
ทดสอบการเชื่อมต่อจากอุปกรณ์อื่นในเครือข่ายเดียวกันโดยใช้เครื่องมือไคลเอนต์ MQTT (เช่น MQTT.FX หรือ MQTT Explorer)
ขั้นตอนที่ 5: รักษาความปลอดภัย MQTT Broker (ไม่บังคับ)
-
เปิดใช้งานการตรวจสอบรหัสผ่าน:
sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
- ป้อนและยืนยันรหัสผ่านสำหรับผู้ใช้
-
อัปเดตไฟล์การกำหนดค่า Mosquitto เพื่อใช้ไฟล์รหัสผ่าน:
allow_anonymous false password_file /etc/mosquitto/passwd
-
รีสตาร์ทบริการ Mosquitto:
sudo systemctl restart mosquitto
-
ทดสอบการเชื่อมต่อโดยใช้ชื่อผู้ใช้และรหัสผ่าน
ขั้นตอนที่ 6: เชื่อมต่ออุปกรณ์ IoT กับนายหน้า MQTT
-
สำหรับ esp8266/esp32: ใช้ Arduino IDE เพื่อตั้งโปรแกรมอุปกรณ์ IoT ของคุณเพื่อเผยแพร่/สมัครรับหัวข้อใน Raspberry Pi MQTT Broker ของคุณ
#include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "YourSSID"; const char* password = "YourPassword"; const char* mqtt_server = "<raspberry-pi-ip>"; WiFiClient espClient; PubSubClient client(espClient); void setup() { WiFi.begin(ssid, password); client.setServer(mqtt_server, 1883); } void loop() { if (!client.connected()) { client.connect("ESPClient"); } client.loop(); client.publish("test/topic", "Hello from ESP8266!"); delay(1000); }
-
สำหรับไคลเอนต์ซอฟต์แวร์: ใช้ mqtt.fx, mqtt explorer หรือ python กับ
paho-mqtt
ห้องสมุด.import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("test/topic") def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("<raspberry-pi-ip>", 1883, 60) client.loop_forever()
การแก้ไขปัญหา
-
ไม่สามารถเชื่อมต่อกับนายหน้า MQTT:
- ตรวจสอบให้แน่ใจว่า Mosquitto กำลังทำงานอยู่:
sudo systemctl status mosquitto
- ตรวจสอบการตั้งค่าไฟร์วอลล์บน Raspberry Pi ของคุณ
- ตรวจสอบให้แน่ใจว่า Mosquitto กำลังทำงานอยู่:
-
ข้อผิดพลาดการรับรองความถูกต้อง:
- ตรวจสอบชื่อผู้ใช้และรหัสผ่านในการกำหนดค่า Mosquitto และการตั้งค่าไคลเอนต์
-
ปฏิเสธการเชื่อมต่อ:
- ตรวจสอบให้แน่ใจว่าอุปกรณ์อยู่ในเครือข่ายเดียวกันกับ Raspberry Pi
- ตรวจสอบว่าพอร์ต 1883 เปิดอยู่
แอปพลิเคชันของ MQTT
- การสื่อสารอุปกรณ์ IoT
- ระบบอัตโนมัติในบ้าน
- การสตรีมข้อมูลแบบเรียลไทม์
- การตรวจสอบและควบคุมระยะไกล
บทสรุป
การโฮสต์เซิร์ฟเวอร์ MQTT บน Raspberry Pi เป็นวิธีที่ยอดเยี่ยมในการเปิดใช้งานการสื่อสารที่มีน้ำหนักเบาและเชื่อถือได้สำหรับโครงการ IoT ของคุณ โดยทำตามคำแนะนำนี้คุณสามารถตั้งค่าและรักษาความปลอดภัยของนายหน้า MECQUITTO MQTT เชื่อมต่ออุปกรณ์ IoT และเริ่มสร้างแอปพลิเคชันที่ทรงพลัง ทดลองกับการกำหนดค่าที่แตกต่างกันเพื่อสำรวจศักยภาพทั้งหมดของ MQTT!