首页 文章

允许在Azure上运行的Ubuntu Server上访问MQTT

提问于
浏览
1

我有一台在Azure机器上运行的Ubuntu Server 14.04 . 我在这个Ubuntu服务器上安装了MQTT代理 . 此外,我有多个ESP8266设备,假设通过此代理订阅和发布到不同的MQTT主题 . 现在我的问题是,当我将两个设备连接到Broker,一个用于接收数据而另一个用于发布时,它们工作正常,但是当我尝试连接另一个设备到代理时,所有设备都停止工作,我的ESP只显示此消息“试图连接经纪人“一遍又一遍 . (在我的机器的 endpoints ,我为HTTP添加了1883,为HTTPS添加了443,为SSH增加了22)

My question is how I can allow multiple devices to communicate with MQTT broker running on Azure broker?

2 回答

  • 1

    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);
    
  • 2

    所有客户端设备都需要具有唯一的客户端ID . 您描述的情况与您所有esp8266设备具有相同的硬编码客户端ID的情况完全相同

相关问题