我有一個Raspberry Pi,並且我已經安裝了Mosquitto MQTT broker。我的目標是讓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"))
。
你不清楚你在這裏問。你的意思是說一個客戶訂閱了'/ wassim/led',一個訂閱了'/ wassim/tmp'?如果是這樣,你只發布到'/ wassim/led',這樣只有一個設備會收到這條消息。 – hardillb