MQTT 接收来自不同主题的传感器数据,但在一个有效负载中遇到
MQTT receiving sensor data from different topics but coming across in one payload
目前我有 2 个传感器读数作为来自 2 个主题的一个有效载荷到达(或者它看起来是那样),将这个有效载荷分成 2 个变量(温度、湿度)的推荐方法是什么;
传感器读数来自不同的主题。
我已经尝试了各种方法,一个经验不足的人会尝试从 for 循环尝试将一半数据写入串行监视器,但无济于事。
我试图将主题输入到这个函数中,但它无法编译。
void messageReceived(MQTTClient*client, char topic[], char payload[], int payload_length) {
for (byte i=0;i<6;i++){
Serial.print(payload[i]);
}
}
串行监视器上的输出将是
23.4555.33
如果我在 for 循环之后放置一个 println,我得到
23.45
55.33
我应该收到 2 条无效消息吗?一个用于温度,另一个用于湿度?
说
messageReceivedtemp()
messageReceivedHum()
您没有收到一条消息,而是分别收到了 2 条消息。
您的代码有 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();
}
目前我有 2 个传感器读数作为来自 2 个主题的一个有效载荷到达(或者它看起来是那样),将这个有效载荷分成 2 个变量(温度、湿度)的推荐方法是什么;
传感器读数来自不同的主题。
我已经尝试了各种方法,一个经验不足的人会尝试从 for 循环尝试将一半数据写入串行监视器,但无济于事。
我试图将主题输入到这个函数中,但它无法编译。
void messageReceived(MQTTClient*client, char topic[], char payload[], int payload_length) {
for (byte i=0;i<6;i++){
Serial.print(payload[i]);
}
}
串行监视器上的输出将是
23.4555.33
如果我在 for 循环之后放置一个 println,我得到
23.45
55.33
我应该收到 2 条无效消息吗?一个用于温度,另一个用于湿度?
说
messageReceivedtemp()
messageReceivedHum()
您没有收到一条消息,而是分别收到了 2 条消息。
您的代码有 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();
}