允许访问 Azure 上 Ubuntu 服务器 运行 上的 MQTT
Allow access for MQTT on Ubuntu Server running on Azure
我在 Azure 机器上有一个 Ubuntu 服务器 14.04 运行。我已经在此 Ubuntu 服务器上安装了 MQTT 代理。此外,我有多个 ESP8266 设备,假设它们通过此代理订阅和发布到不同的 MQTT 主题。现在我的问题是,当我将两台设备连接到 Broker 时,一台用于接收数据,另一台用于发布,它们工作正常,但是当我尝试将另一台设备连接到 Broker 时,所有设备都停止工作,我的 ESP 只显示此消息 "trying to connect Broker" 一遍又一遍。
(在我机器的端点中,我为 HTTP 添加了 1883,为 HTTPS 添加了 443,为 SSH 添加了 22)
我的问题是如何允许多个设备与 Azure 代理上的 MQTT 代理 运行 通信?
所有客户端设备都需要具有唯一的客户端 ID。您所描述的情况听起来就像您所有的 esp8266 设备都具有相同的硬编码客户端 ID
MQTT 客户端在连接前获取 clientID 作为参数以提供唯一性。 ESP8266 具有唯一的 ChipID。所以用它来解决问题。
这里以 Arduino 固件为例:
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
mqttClient.setServer(MQTT_BROKER, MQTT_BROKER_PORT);
String clientId = "IoTDevice-" + String(ESP.getChipId());
mqttClient.connect(clientId.c_str(), MQTT_USERNAME, MQTT_KEY);
这是 NodeMCU 固件示例:
mqtt_cli:connect(MQTT_BROKER, MQTT_BROKER_PORT, 0, CALLBACK_FN);
mqtt_cli = mqtt.Client("IoTDevice-"..node.chipid(), 120, MQTT_USERNAME, MQTT_KEY);
我在 Azure 机器上有一个 Ubuntu 服务器 14.04 运行。我已经在此 Ubuntu 服务器上安装了 MQTT 代理。此外,我有多个 ESP8266 设备,假设它们通过此代理订阅和发布到不同的 MQTT 主题。现在我的问题是,当我将两台设备连接到 Broker 时,一台用于接收数据,另一台用于发布,它们工作正常,但是当我尝试将另一台设备连接到 Broker 时,所有设备都停止工作,我的 ESP 只显示此消息 "trying to connect Broker" 一遍又一遍。 (在我机器的端点中,我为 HTTP 添加了 1883,为 HTTPS 添加了 443,为 SSH 添加了 22)
我的问题是如何允许多个设备与 Azure 代理上的 MQTT 代理 运行 通信?
所有客户端设备都需要具有唯一的客户端 ID。您所描述的情况听起来就像您所有的 esp8266 设备都具有相同的硬编码客户端 ID
MQTT 客户端在连接前获取 clientID 作为参数以提供唯一性。 ESP8266 具有唯一的 ChipID。所以用它来解决问题。 这里以 Arduino 固件为例:
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
mqttClient.setServer(MQTT_BROKER, MQTT_BROKER_PORT);
String clientId = "IoTDevice-" + String(ESP.getChipId());
mqttClient.connect(clientId.c_str(), MQTT_USERNAME, MQTT_KEY);
这是 NodeMCU 固件示例:
mqtt_cli:connect(MQTT_BROKER, MQTT_BROKER_PORT, 0, CALLBACK_FN);
mqtt_cli = mqtt.Client("IoTDevice-"..node.chipid(), 120, MQTT_USERNAME, MQTT_KEY);