Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 对传入的MQTT消息没有反应_Arduino_Mqtt_Publish Subscribe - Fatal编程技术网

Arduino 对传入的MQTT消息没有反应

Arduino 对传入的MQTT消息没有反应,arduino,mqtt,publish-subscribe,Arduino,Mqtt,Publish Subscribe,我有一个简单的wemos d1迷你设置,带有一个按钮和一些LED。它可以发送和接收MQTT消息,并应根据这些消息进行操作 我希望它在按下按钮时发送“11”,并在收到特定消息时点亮LED,在本例中为“21” 这一切似乎都在正常工作,消息正在传出,它报告说,当消息传入时,它“看到”了“21”。但是它跳过了IF语句,在该语句中,我将传入消息与字符串进行比较。它们都打印出相同的内容,但是IF比较似乎表明它们不是。这是在回调循环中完成的 谁能告诉我哪里出错了 long lastMsg = 0; char

我有一个简单的wemos d1迷你设置,带有一个按钮和一些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("");
}

long lastMsg=0;
半焦味精[50];
int值=0;
char*msgIN;
字符串msgIN_触发器;
char*msgOUT;
字符串boxID=“1”;
int-boxID_len=boxID.length()+1;
字符串clientID=“rememberbox”+boxID;
int clientID_len=clientID.length()+1;
无效回调(字符*主题,字节*有效负载,无符号整数长度){
Serial.print(“消息到达:[”);
连续打印(主题);
序列号。打印(“]”);
字符串msgIN=“”;
msgIN+=(char*)有效载荷;
字符串msgString=msgIN;
串行打印(msgIN.substring(0,2));
Serial.println(“/”);
if(msgString==msgIN\u触发器){
Serial.println(“消息是给我的!”);
Serial.println(“唤醒MP3播放器”);
myMP3.wakeUp();
Serial.println(“播放曲目5”);
myMP3.play(5);
Serial.println(“五彩纸屑!!!”);
五彩纸屑();
Serial.println(“并褪色为黑色”);
对于(int i=0;i
您正在使用一个操作数来尝试比较两个字符串…这可能导致不正确的操作。试试这个

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

这就是我使用的,它似乎工作得很好。

哪个
if
语句?请将代码精简到一个最小可行的测试用例,这样我们就不需要费力地阅读所有的测试用例来找到您正在谈论的内容。这是一个微不足道的调试。在比较之前打印要比较的字符串,这将告诉您。完成。很抱歉最后一个问题有人让我发布我的完整代码。@Gambit支持。这就是我在代码中所做的。全部打印出来,显示msgString是“21”,msgIN_触发器也是“21”。仍然在调用时:
if(msgString==msgIN\u trigger)
,它仍然直接转到“else”语句