Arduino.从arduino读取两个MQTT主题,并将主题的有效负载存储在两个不同的变量中



我是Arduino的新手!我有两个关于MQTT服务器的主题;arduino/temp";以及";arduino/潮湿";。在Arduino上,我想存储在两个不同的变量中,这个主题的有效载荷("Arduino/temp"one_answers"ardui诺/潮湿"(

我的代码在这里:

char myTemp[5];
char myHum[5];
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
//  if(strcmp(topic, "arduino/temp") == 0) {
if (String(topic) == "arduino/temp") {
Serial.println(strcmp(topic, "arduino/temp") == 0);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
myTemp[i] = (char) payload[i];
}
Serial.println();
Serial.println(myTemp);
Serial.println("-----------------------");
}
else {
Serial.println(strcmp(topic, "arduino/humid") == 0);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
myHum[i] = (char) payload[i];
}
Serial.println();
Serial.println(myHum);
Serial.println("-----------------------");
} 
}

我得到了正确的有效载荷,但我不能对变量进行核心设计。这就是结果:

13:08:34.741 -> Message arrived in topic: arduino/temp
13:08:34.741 -> 1
13:08:34.741 -> Message: 21.30
13:08:34.741 ->  21.30
13:08:34.741 -> -----------------------
13:08:35.670 -> Message arrived in topic: arduino/humid
13:08:35.670 -> 1
13:08:35.670 -> Message: 43.30
13:08:35.670 ->  43.3021.30
13:08:35.670 -> -----------------------

你能帮我吗?

一个快速解决方案是在两者中再添加一个字符,并将其值设置为''。您缺少的这个字符被称为null终止符,它会让println()函数知道您的字符串已经结束。

char myTemp[6];
char myHum[6];
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
if (String(topic) == "arduino/temp") {
Serial.println(strcmp(topic, "arduino/temp") == 0);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
myTemp[i] = (char) payload[i];
}
myTemp[5] = '';
Serial.println();
Serial.println(myTemp);
Serial.println("-----------------------");
}
else {
Serial.println(strcmp(topic, "arduino/humid") == 0);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
myHum[i] = (char) payload[i];
}
myHum[5] = '';
Serial.println();
Serial.println(myHum);
Serial.println("-----------------------");
} 
}

注意:您也可以通过只添加额外的字符而不设置值来进行测试,因为某些编译器会在默认情况下将其设置为0。

最新更新