我是 Arduino 的新手!我在 MQTT 服務器上有兩個主題,“arduino/temp”和“arduino/濕”。在 Arduino 上,我想存盤兩個不同的變數,這個主題的有效載荷(“arduino/temp”和“arduino/濕”)
我的代碼在這里:
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("-----------------------");
}
}
我得到了正確的有效載荷,但我無法將 corectlly 分配給變數。這是結果:
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 -> -----------------------
你能幫我嗎?
uj5u.com熱心網友回復:
一個快速解決方法是向兩者添加一個 char 并將其值設定為'\0'. 您缺少的這個字符稱為空終止符,它將讓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] = '\0';
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] = '\0';
Serial.println();
Serial.println(myHum);
Serial.println("-----------------------");
}
}
注意:您也可以通過僅添加額外的字符而不設定值來進行測驗,因為某些編譯器默認將其設定為 0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/520439.html
