对传入的MQTT信息没有反应

问题描述 投票:-1回答:1

我有一个简单的wemos d1 mini的设置,有一个按钮和一些LED。它可以发送和接收MQTT消息,并且应该对它们采取行动。

我想让它在按下按钮时发送 "11",并在收到特定消息时点亮LED灯--本例中是 "21"。

这一切似乎都很正常,消息正在发送,并且它报告说它 "看到""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("");
}
arduino mqtt publish-subscribe
1个回答
1
投票

你正在使用操作数来尝试和比较两个字符串...这可能会导致片状操作。 试试这个

if (strcmp(msgString, msgIN_trigger) == 0) {
   ...
}

这是我使用的,似乎很好用。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.