首页 文章

MQTT Mosquitto和两个ESP8266

提问于
浏览
0

我的问题:

我有一个Raspberry Pi,我已经安装了Mosquitto MQTT代理 . 我的目标是让2个MQTT客户端通过Mosquitto代理进行通信,所以我在两个ESP8266(WeMos D1 mini)上安装了下面的代码,并创建了这个MQTT命令: mosquitto_pub -h 192.168.1.20 -t /wassim/led -m "on" .

因此,当我只连接一个ESP客户端时,我在串行监视器中看到“on”消息 . 但是当我连接第二个ESP客户端时,我在串行监视器上看不到任何消息...(但是如果在Raspberry的终端上,那么我可以看到所有内容 . 在客户端我看不到任何东西) . 代码:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <MQTTClient.h>

float temp;
float lm;
String aw="";
const char* host = "192.168.1.20";
const char* ssid = "THOMSON1121";
const char* password = "Wassim";
WiFiClient net;
MQTTClient mqtt;

void connect();

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println("Booting...");
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  mqtt.begin(host, net);
  connect();
  if(mqtt.subscribe("/wassim/led")) {
    Serial.println("Subscription Valid !");
  }
  Serial.println("Setup completed...");
}

void loop() {
  if (!mqtt.connected()) {
    connect();
  }
  mqtt.loop();
  delay(3000);
}

void connect() {
  while(WiFi.waitForConnectResult() != WL_CONNECTED) {
    WiFi.begin(ssid, password);
    Serial.println("WiFi connection failed. Retry.");
  }
  Serial.print("Wifi connection successful - IP-Address: ");
  Serial.println(WiFi.localIP());
  while (!mqtt.connect(host)) {
    Serial.print(".");
  }
  Serial.println("MQTT connected!");
}

void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
  Serial.print("incoming: ");
  Serial.print(topic);
  Serial.print(" - ");
  Serial.print(payload);
  Serial.println();
}

从一个客户端到另一个客户端的更改是 if(mqtt.subscribe("/wassim/tmp")) .

1 回答

  • 0

    MQTT是一个'message bus'应用程序....为了让多个'subscribers'接收到由'publisher'放在总线上的相同消息,它们都必须订阅相同的主题...或至少足够的主题通配符...为了发送已发布的消息 . 您只有两个客户端中的一个侦听您的'mosquitto_pub'命令发出的主题 . 要接收它,您可以指定完整主题( mqtt.subscribe("/wassim/led") ),也可以使用通配符来获取发出的所有'wassim'消息( mqtt.subscribe("/wassim/#") ) .

相关问题