2017-07-03 5 views
0

私の問題:MQTT Mosquittoと2つのESP8266

私はラズベリーパイを持っている、と私はそれにMosquitto MQTTブローカーがインストールされています。私の目的は、2つのMQTTクライアントをMosquittoブローカー経由で通信させることです。下のコードを2つのESP8266(WeMos D1 mini) にインストールし、このMQTTコマンドを作成しました:mosquitto_pub -h 192.168.1.20 -t /wassim/led -m "on"

したがって、ESPクライアントを1つしか接続しないと、シリアルモニタに「オン」というメッセージが表示されます。しかし、2番目のESPクライアントを接続すると、シリアルモニタにメッセージが表示されません。(しかし、ラズベリーの端末にあれば、すべて見ることができます。コード:

#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"))です。

+0

あなたがここで質問していることは明らかではありません。あるクライアントが '/ wassim/led'と'/wassim/tmp'にサブスクライブしているということですか?そうであれば '/ wassim/led'にしか公開しないので、1つのデバイスだけがメッセージを受信します。 – hardillb

答えて

0

MQTTは「メッセージバス」アプリケーションです....複数の「サブスクライバ」に「パブリッシャ」によってバス上に置かれている同じメッセージを受信させるには、両方とも同じトピックをサブスクライブする必要があります...またはトピック+ワイルドカードの少なくとも十分なもの...公開されたメッセージを送信するには。あなたは、あなたの2人のクライアントのうちの1人だけあなたの 'mosquitto_pub'コマンドが送信しているトピックを聞いています。受信するには、完全なトピック(mqtt.subscribe("/wassim/led"))を指定するか、送信されたすべての 'wassim'メッセージ(mqtt.subscribe("/wassim/#"))を受け取るワイルドカードを指定します。

関連する問題