โฮสต์เซิร์ฟเวอร์ MQTT บน Raspberry Pi

MQTT (การเข้าคิวข้อความการส่งข้อความทางไกล) เป็นโปรโตคอลการส่งข้อความที่มีน้ำหนักเบาที่ใช้กันทั่วไปในแอพพลิเคชั่น IoT (Internet of Things) สำหรับการสื่อสารที่เชื่อถือได้และมีประสิทธิภาพระหว่างอุปกรณ์ การโฮสต์เซิร์ฟเวอร์ MQTT บน Raspberry Pi ช่วยให้คุณสามารถสร้างศูนย์กลางการส่งข้อความท้องถิ่นสำหรับโครงการ IoT ของคุณ คู่มือนี้จะนำคุณผ่านการตั้งค่าและเรียกใช้เซิร์ฟเวอร์ MQTT บน Raspberry Pi


สิ่งที่คุณต้องการ

  1. Raspberry Pi (รุ่นใด ๆ ที่มีการสนับสนุน GPIO เช่น PI 3, PI 4)
  2. การ์ด microSD (อย่างน้อย 8GB, คลาส 10 หรือดีกว่า)
  3. แหล่งจ่ายไฟ (5V, 2.5A ขั้นต่ำสำหรับ PI 3; 5V, 3A สำหรับ PI 4)
  4. Raspberry Pi OS (เวอร์ชัน lite หรือเดสก์ท็อป)
  5. การเชื่อมต่ออินเทอร์เน็ต
  6. ลูกค้า MQTT (เช่นเครื่องมือซอฟต์แวร์ ESP8266, ESP32 หรือ MQTT)

ขั้นตอนที่ 1: อัปเดต Raspberry Pi

  1. ตรวจสอบให้แน่ใจว่า Raspberry Pi ของคุณทันสมัย:
    sudo apt update && sudo apt upgrade -y
    

ขั้นตอนที่ 2: ติดตั้ง Mosquitto MQTT Broker

Mosquitto เป็นนายหน้า MQTT ที่มีน้ำหนักเบาและใช้กันอย่างแพร่หลาย

  1. ติดตั้ง Mosquitto และเครื่องมือไคลเอนต์:

    sudo apt install -y mosquitto mosquitto-clients
    
  2. เปิดใช้งาน Mosquitto เพื่อเริ่มต้นที่ Boot:

    sudo systemctl enable mosquitto
    
  3. เริ่มบริการ Mosquitto:

    sudo systemctl start mosquitto
    

ขั้นตอนที่ 3: ทดสอบนายหน้า MQTT

  1. เปิดหน้าต่างเทอร์มินัลหรือเซสชัน SSH สองครั้งไปยัง Raspberry Pi ของคุณ

  2. ในเทอร์มินัลแรกสมัครรับหัวข้อทดสอบ:

    mosquitto_sub -h localhost -t test/topic
    
  3. ในเทอร์มินัลที่สองเผยแพร่ข้อความทดสอบ:

    mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
    
  4. คุณควรเห็นข้อความ "สวัสดี MQTT!" ในเทอร์มินัลแรก


ขั้นตอนที่ 4: กำหนดค่า mosquitto สำหรับการเชื่อมต่อภายนอก

  1. เปิดไฟล์การกำหนดค่า Mosquitto:

    sudo nano /etc/mosquitto/mosquitto.conf
    
  2. เพิ่มบรรทัดต่อไปนี้เพื่ออนุญาตการเชื่อมต่อภายนอก:

    listener 1883
    allow_anonymous true
    

    บันทึก: สำหรับสภาพแวดล้อมการผลิตให้ตั้งค่าการรับรองความถูกต้องของผู้ใช้แทนการอนุญาตให้เข้าถึงแบบไม่ระบุชื่อ

  3. รีสตาร์ทบริการ Mosquitto เพื่อใช้การเปลี่ยนแปลง:

    sudo systemctl restart mosquitto
    
  4. ทดสอบการเชื่อมต่อจากอุปกรณ์อื่นในเครือข่ายเดียวกันโดยใช้เครื่องมือไคลเอนต์ MQTT (เช่น MQTT.FX หรือ MQTT Explorer)


ขั้นตอนที่ 5: รักษาความปลอดภัย MQTT Broker (ไม่บังคับ)

  1. เปิดใช้งานการตรวจสอบรหัสผ่าน:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
    
    • ป้อนและยืนยันรหัสผ่านสำหรับผู้ใช้
  2. อัปเดตไฟล์การกำหนดค่า Mosquitto เพื่อใช้ไฟล์รหัสผ่าน:

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    
  3. รีสตาร์ทบริการ Mosquitto:

    sudo systemctl restart mosquitto
    
  4. ทดสอบการเชื่อมต่อโดยใช้ชื่อผู้ใช้และรหัสผ่าน


ขั้นตอนที่ 6: เชื่อมต่ออุปกรณ์ IoT กับนายหน้า MQTT

  1. สำหรับ 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);
    }
    
  2. สำหรับไคลเอนต์ซอฟต์แวร์: ใช้ 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()
    

การแก้ไขปัญหา

  1. ไม่สามารถเชื่อมต่อกับนายหน้า MQTT:

    • ตรวจสอบให้แน่ใจว่า Mosquitto กำลังทำงานอยู่: sudo systemctl status mosquitto
    • ตรวจสอบการตั้งค่าไฟร์วอลล์บน Raspberry Pi ของคุณ
  2. ข้อผิดพลาดการรับรองความถูกต้อง:

    • ตรวจสอบชื่อผู้ใช้และรหัสผ่านในการกำหนดค่า Mosquitto และการตั้งค่าไคลเอนต์
  3. ปฏิเสธการเชื่อมต่อ:

    • ตรวจสอบให้แน่ใจว่าอุปกรณ์อยู่ในเครือข่ายเดียวกันกับ Raspberry Pi
    • ตรวจสอบว่าพอร์ต 1883 เปิดอยู่

แอปพลิเคชันของ MQTT

  1. การสื่อสารอุปกรณ์ IoT
  2. ระบบอัตโนมัติในบ้าน
  3. การสตรีมข้อมูลแบบเรียลไทม์
  4. การตรวจสอบและควบคุมระยะไกล

บทสรุป

การโฮสต์เซิร์ฟเวอร์ MQTT บน Raspberry Pi เป็นวิธีที่ยอดเยี่ยมในการเปิดใช้งานการสื่อสารที่มีน้ำหนักเบาและเชื่อถือได้สำหรับโครงการ IoT ของคุณ โดยทำตามคำแนะนำนี้คุณสามารถตั้งค่าและรักษาความปลอดภัยของนายหน้า MECQUITTO MQTT เชื่อมต่ออุปกรณ์ IoT และเริ่มสร้างแอปพลิเคชันที่ทรงพลัง ทดลองกับการกำหนดค่าที่แตกต่างกันเพื่อสำรวจศักยภาพทั้งหมดของ MQTT!

แสดงความคิดเห็น

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.