0
我编写了一个处理MQTT消息(有效负载)的回调函数。我想切换的引脚不是基于传入的有效负载。我现在的问题是第一条语句在发送11时很好地执行。但第二条语句不起作用。奇怪的是,当我发送两条消息,一条包含1x和另一条x1时,我可以再次切换两个引脚。这是一个非常奇怪的问题! 任何人都可以帮助我,非常感谢。我正在使用PubSubClient库。回调函数不执行第二条语句 - C++ MQTT
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
//Set GPIO0 to HIGH or LOW on first character received in message
if (payload[0] == '1') {
digitalWrite(GPIO0, HIGH); // Turn the relay on
client.publish(getOutTopic().c_str(), "GPIO0 set to HIGH");
} else if (payload[0] == '0') {
digitalWrite(GPIO0, LOW); // Turn the relay off
client.publish(getOutTopic().c_str(), "GPIO0 set to LOW");
}
//Set GPIO2 to HIGH or LOW on first character received in message
if (payload[1] == '1') {
digitalWrite(GPIO2, HIGH); // turn LED off. With High it is inactive on the ESP-01)
client.publish(getOutTopic().c_str(), "GPIO2 set to HIGH");
} else if (payload[1] == '0') {
digitalWrite(GPIO2, LOW); // Turn the LED on by making the voltage LOW
client.publish(getOutTopic().c_str(), "GPIO2 set to LOW");
}
}
当有效载荷为11时for循环的输出是什么?另外,您应该在for循环中放置一个分隔符来区分有效载荷[1]和有效载荷[1]。 – Rezniaq
forloop正确显示有效载荷。 – Ansjovis86
在第一个'if/elseif'之后再次输出你的'payload'数据。我有一种感觉,你的'client.publish()'会破坏你的'payload'指针?如果它在第一个for循环之后输出了'11',我在代码中没有看到为什么第二个'if/else'不会触发的原因。你是否也可以删除所有'client.publish()'调用,只需用LED指示灯看看GPIO输出引脚? –