在Raspberry Pi上托管MQTT服务器

MQTT(消息排队遥测运输)是一种轻巧的消息传递协议(物联网)应用程序中,用于可靠和高效的设备之间的通信。在Raspberry Pi上托管MQTT服务器可以使您可以为您的IoT项目创建本地消息传递中心。本指南将引导您通过在Raspberry Pi上设置并运行MQTT服务器。


你需要什么

  1. 覆盆子pi (任何具有GPIO支持的模型,例如PI 3,PI 4)
  2. microSD卡 (至少8GB,10级或更高)
  3. 电源 (PI 3; 5V,PI 4的最低5V,2.5a)
  4. 覆盆子Pi OS (Lite或桌面版本)
  5. 互联网连接
  6. MQTT客户 (例如,ESP8266,ESP32或MQTT软件工具)

步骤1:更新覆盆子Pi

  1. 确保您的Raspberry Pi是最新的:
    sudo apt update && sudo apt upgrade -y
    

步骤2:安装蚊子MQTT经纪人

蚊子是一家轻巧且广泛使用的MQTT经纪人。

  1. 安装蚊子及其客户工具:

    sudo apt install -y mosquitto mosquitto-clients
    
  2. 启用蚊子可以从启动开始:

    sudo systemctl enable mosquitto
    
  3. 开始蚊子服务:

    sudo systemctl start mosquitto
    

步骤3:测试MQTT经纪人

  1. 在Raspberry Pi上打开两个终端窗口或SSH会话。

  2. 在第一个终端中,订阅一个测试主题:

    mosquitto_sub -h localhost -t test/topic
    
  3. 在第二端子中,发布一条测试消息:

    mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
    
  4. 您应该看到消息“你好,mqtt!”在第一个终端。


步骤4:为外部连接配置蚊子

  1. 打开蚊子配置文件:

    sudo nano /etc/mosquitto/mosquitto.conf
    
  2. 添加以下行以允许外部连接:

    listener 1883
    allow_anonymous true
    

    笔记: 对于生产环境,设置用户身份验证,而不是允许匿名访问。

  3. 重新启动蚊子服务以应用更改:

    sudo systemctl restart mosquitto
    
  4. 使用MQTT客户端工具(例如MQTT.FX或MQTT Explorer)从同一网络上的另一个设备上测试连接。


步骤5:保护MQTT经纪人(可选)

  1. 启用密码身份验证:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
    
    • 输入并确认用户的密码。
  2. 更新蚊子配置文件以使用密码文件:

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    
  3. 重新启动蚊子服务:

    sudo systemctl restart mosquitto
    
  4. 使用用户名和密码测试连接。


步骤6:将IoT设备连接到MQTT经纪人

  1. 对于ESP8266/ESP32: 使用Arduino IDE对您的IoT设备进行编程,以发布/订阅Raspberry Pi MQTT经纪人上的主题。

    #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经纪人:

    • 确保蚊子运行: sudo systemctl status mosquitto
    • 检查Raspberry Pi上的防火墙设置。
  2. 身份验证错误:

    • 在蚊子配置和客户端设置中验证用户名和密码。
  3. 连接被拒绝:

    • 确保设备与Raspberry Pi在同一网络上。
    • 检查端口1883是打开的。

MQTT的应用

  1. 物联网设备通信
  2. 家庭自动化系统
  3. 实时数据流
  4. 远程监控和控制

结论

在Raspberry Pi上托管MQTT服务器是为您的IoT项目启用轻质和可靠的通信的绝佳方法。通过遵循本指南,您可以设置并保护Mosquitto 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.