对传入的 MQTT 消息没有反应
no reaction to incoming MQTT message
我有一个带有按钮和一些 LED 的 wemos d1 mini 的简单设置。它可以发送和接收 MQTT 消息,并应根据这些消息采取行动。
我希望它在按下按钮时发送“11”并在收到特定消息时点亮 LED - 在本例中为“21”。
一切似乎都正常,消息正在发出,并且当该消息进来时报告它 "sees" “21”。但随后它跳过了 IF
语句,其中我将传入的消息与字符串进行比较。它们都打印出相同的内容,但是 IF
比较似乎表明它们不是。这是在回调循环中完成的。
谁能指出我哪里出错了?
long lastMsg = 0;
char msg[50];
int value = 0;
char* msgIN;
String msgIN_trigger;
char* msgOUT;
String boxID = "1";
int boxID_len = boxID.length() + 1;
String clientID = "rememberbox " + boxID;
int clientID_len = clientID.length() + 1;
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived: [");
Serial.print(topic);
Serial.print("] ");
String msgIN = "";
msgIN += (char *)payload;
String msgString = msgIN;
Serial.print(msgIN.substring(0,2));
Serial.println("/");
if (msgString == msgIN_trigger) {
Serial.println("message is for me!");
Serial.println("wake up MP3 player");
myMP3.wakeUp();
Serial.println("play track 5");
myMP3.play(5);
Serial.println("confetti!!!");
confetti();
Serial.println("and fade to black");
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
delay(7500);
myMP3.sleep();
message_out = false;
Serial.println("message_out = false");
Serial.println("");
}
Serial.println("nothing intended for me");
Serial.print("only reacting to message: ");
Serial.print(msgIN_trigger);
Serial.println("/");
Serial.println("");
}
您正在使用一个操作数来尝试比较两个字符串...这可能会导致不稳定的操作。试试这个
if (strcmp(msgString, msgIN_trigger) == 0) {
...
}
这就是我使用的,似乎工作正常。
我有一个带有按钮和一些 LED 的 wemos d1 mini 的简单设置。它可以发送和接收 MQTT 消息,并应根据这些消息采取行动。
我希望它在按下按钮时发送“11”并在收到特定消息时点亮 LED - 在本例中为“21”。
一切似乎都正常,消息正在发出,并且当该消息进来时报告它 "sees" “21”。但随后它跳过了 IF
语句,其中我将传入的消息与字符串进行比较。它们都打印出相同的内容,但是 IF
比较似乎表明它们不是。这是在回调循环中完成的。
谁能指出我哪里出错了?
long lastMsg = 0;
char msg[50];
int value = 0;
char* msgIN;
String msgIN_trigger;
char* msgOUT;
String boxID = "1";
int boxID_len = boxID.length() + 1;
String clientID = "rememberbox " + boxID;
int clientID_len = clientID.length() + 1;
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived: [");
Serial.print(topic);
Serial.print("] ");
String msgIN = "";
msgIN += (char *)payload;
String msgString = msgIN;
Serial.print(msgIN.substring(0,2));
Serial.println("/");
if (msgString == msgIN_trigger) {
Serial.println("message is for me!");
Serial.println("wake up MP3 player");
myMP3.wakeUp();
Serial.println("play track 5");
myMP3.play(5);
Serial.println("confetti!!!");
confetti();
Serial.println("and fade to black");
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
delay(7500);
myMP3.sleep();
message_out = false;
Serial.println("message_out = false");
Serial.println("");
}
Serial.println("nothing intended for me");
Serial.print("only reacting to message: ");
Serial.print(msgIN_trigger);
Serial.println("/");
Serial.println("");
}
您正在使用一个操作数来尝试比较两个字符串...这可能会导致不稳定的操作。试试这个
if (strcmp(msgString, msgIN_trigger) == 0) {
...
}
这就是我使用的,似乎工作正常。