没有足够的信息来提供真正的答案,因此这是您应该已经完成并在您的问题中描述的调试说明。
您需要弄清楚所有代码中的哪些代码无效。
从最简单的闪烁实现开始(故意慢):
void setup() { pinMode(relayPin, OUTPUT); } void loop() { digitalWrite(relayPin, HIGH); delay(1000); digitalWrite(relayPin, LOW); delay(1000); }
如果这不起作用,你至少打折了所有的MQTT东西。
如果它确实有效,如果响应既不是“ON”也不是“OFF”,你所拥有的代码将不会做任何事情,因为你的代码需要一个或另一个,而实际上你只对“OFF”感兴趣所以改为(再次故意)慢):
if( response == "OFF" ) { Serial.println( "Asserting OFF" ); digitalWrite(relayPin, HIGH); } else { Serial.println( "BLINKING" ); digitalWrite(relayPin, LOW); delay(1000); digitalWrite(relayPin, HIGH); delay(1000); }
现在,如果它闪烁但你无法将其关闭,那么“OFF”不是你得到的响应,或者可能是瞬态的并且无法无限期地维护,在这种情况下你需要一个静态变量来锁定响应。观察串行输出以查看代码在每个路径上采用的路径 loop() 迭代。
loop()