【问题标题】:no reaction to incoming MQTT message对传入的 MQTT 消息没有反应
【发布时间】:2020-05-23 11:45:52
【问题描述】:

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

我希望它在按下按钮时发送“11”并在接收到特定消息时点亮 LED - 在本例中为“21”。

似乎一切正常,消息正在发出,它报告当消息进入时它“看到”“21”。但随后它跳过了 IF 语句,在该语句中我将传入消息与一个字符串。它们都打印出相同的内容,但IFcomparison 似乎说它们不是。这是在回调循环中完成的。

谁能指出我哪里出错了?


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 声明?请将代码精简为一个最小的可行测试用例,这样我们就不需要费力地寻找你在说什么。
  • 这是微不足道的调试。在比较之前打印您正在比较的字符串,这会告诉您。
  • 完成。对不起。最后一个问题有人让我发布我的完整代码。
  • @Gambit 支持。这就是我在代码中所做的。全部打印出来,显示 msgString 是“21”,msgIN_trigger 也是“21”。仍然当然后调用:if (msgString == msgIN_trigger),它仍然直接进入“else”语句

标签: arduino mqtt publish-subscribe


【解决方案1】:

您正在使用操作数来尝试比较两个字符串...这可能会导致操作不稳定。试试这个

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

这是我使用的,它似乎工作正常。

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2016-04-24
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多