簡體   English   中英

MQTT 接收來自不同主題的傳感器數據,但在一個有效負載中遇到

[英]MQTT receiving sensor data from different topics but coming across in one payload

目前我有 2 個傳感器讀數作為來自 2 個主題的一個有效載荷到達(或者看起來那樣),將這個有效載荷分成 2 個變量(溫度、濕度)的推薦方法是什么?

傳感器讀數來自不同的主題。

我已經嘗試過各種方法,一個沒有經驗的人會嘗試從 for 循環嘗試將一半數據寫入串行監視器,但無濟於事。

我試圖在這個 function 中輸入主題,但它不會編譯。

void messageReceived(MQTTClient*client, char topic[], char payload[], int payload_length) {
  for (byte i=0;i<6;i++){ 
    Serial.print(payload[i]);
 }
}

串行監視器上的 output 將是

23.4555.33

如果我在 for 循環之后放一個 println 我得到

23.45
55.33

我應該收到 2 條無效消息嗎? 一個用於溫度,另一個用於濕度?

messageReceivedtemp()

messageReceivedHum()

您沒有收到一條消息,而是收到單獨的 2 條消息。

您的代碼有 2 個問題。

  1. 首先,您沒有檢查消息到達的主題,因此您不知道哪個值是哪個。
  2. 您只是將值直接傳遞到串行端口而不檢查長度。 您使用的是固定值 6,但您應該使用payload_length值。

代碼應該是這樣的:

void messageReceived(MQTTClient*client, char topic[], char payload[], int payload_length) {

  if (strcmp(topic, "temp") == 0) {
    //message arrived on the 'temp' topic
    Serial.print("temp: ");
  } else if (strcmp(topic, "hum") == 0 {
    //message arrived on the 'hum' topic
    Serial.print("hum: ");
  }

  for (int i=0;i<payload_length;i++){ 
    Serial.print(payload[i]);
  }
  Serial.println();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM