MQTT(消息排队遥测运输)是一种轻巧的消息传递协议(物联网)应用程序中,用于可靠和高效的设备之间的通信。在Raspberry Pi上托管MQTT服务器可以使您可以为您的IoT项目创建本地消息传递中心。本指南将引导您通过在Raspberry Pi上设置并运行MQTT服务器。
你需要什么
- 覆盆子pi (任何具有GPIO支持的模型,例如PI 3,PI 4)
- microSD卡 (至少8GB,10级或更高)
- 电源 (PI 3; 5V,PI 4的最低5V,2.5a)
- 覆盆子Pi OS (Lite或桌面版本)
- 互联网连接
- MQTT客户 (例如,ESP8266,ESP32或MQTT软件工具)
步骤1:更新覆盆子Pi
- 确保您的Raspberry Pi是最新的:
sudo apt update && sudo apt upgrade -y
步骤2:安装蚊子MQTT经纪人
蚊子是一家轻巧且广泛使用的MQTT经纪人。
-
安装蚊子及其客户工具:
sudo apt install -y mosquitto mosquitto-clients
-
启用蚊子可以从启动开始:
sudo systemctl enable mosquitto
-
开始蚊子服务:
sudo systemctl start mosquitto
步骤3:测试MQTT经纪人
-
在Raspberry Pi上打开两个终端窗口或SSH会话。
-
在第一个终端中,订阅一个测试主题:
mosquitto_sub -h localhost -t test/topic
-
在第二端子中,发布一条测试消息:
mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
-
您应该看到消息“你好,mqtt!”在第一个终端。
步骤4:为外部连接配置蚊子
-
打开蚊子配置文件:
sudo nano /etc/mosquitto/mosquitto.conf
-
添加以下行以允许外部连接:
listener 1883 allow_anonymous true
笔记: 对于生产环境,设置用户身份验证,而不是允许匿名访问。
-
重新启动蚊子服务以应用更改:
sudo systemctl restart mosquitto
-
使用MQTT客户端工具(例如MQTT.FX或MQTT Explorer)从同一网络上的另一个设备上测试连接。
步骤5:保护MQTT经纪人(可选)
-
启用密码身份验证:
sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
- 输入并确认用户的密码。
-
更新蚊子配置文件以使用密码文件:
allow_anonymous false password_file /etc/mosquitto/passwd
-
重新启动蚊子服务:
sudo systemctl restart mosquitto
-
使用用户名和密码测试连接。
步骤6:将IoT设备连接到MQTT经纪人
-
对于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); }
-
对于软件客户: 使用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经纪人:
- 确保蚊子运行:
sudo systemctl status mosquitto
- 检查Raspberry Pi上的防火墙设置。
- 确保蚊子运行:
-
身份验证错误:
- 在蚊子配置和客户端设置中验证用户名和密码。
-
连接被拒绝:
- 确保设备与Raspberry Pi在同一网络上。
- 检查端口1883是打开的。
MQTT的应用
- 物联网设备通信
- 家庭自动化系统
- 实时数据流
- 远程监控和控制
结论
在Raspberry Pi上托管MQTT服务器是为您的IoT项目启用轻质和可靠的通信的绝佳方法。通过遵循本指南,您可以设置并保护Mosquitto MQTT经纪人,连接IoT设备并开始构建强大的应用程序。实验不同的配置,以探索MQTT的全部潜力!