Недостаточно информации для реального ответа, так что это скорее инструкция по отладке, которую вы уже должны были сделать и описали в своем вопросе.
Вам нужно выяснить, что из всего этого кода не работает.
Начните с самой простой из мерцающих реализаций (намеренно медленной):
void setup()
{
pinMode(relayPin, OUTPUT);
}
void loop()
{
digitalWrite(relayPin, HIGH);
delay(1000);
digitalWrite(relayPin, LOW);
delay(1000);
}
Если это не сработает, вы, по крайней мере, обесценили все вещи MQTT.
Если это работает, ваш код ничего не изменит, если ответ не «ВКЛ» или «ВЫКЛ», поскольку ваш код требует одно или другое, хотя на самом деле вас интересует только «ВЫКЛ», поэтому измените на (снова намеренно медленно):
if( response == "OFF" )
{
Serial.println( "Asserting OFF" );
digitalWrite(relayPin, HIGH);
}
else
{
Serial.println( "BLINKING" );
digitalWrite(relayPin, LOW);
delay(1000);
digitalWrite(relayPin, HIGH);
delay(1000);
}
Теперь, если он мигает, но вы не можете его отключить, тогда «ВЫКЛ» - это не ответ, который вы получаете, или, возможно, он временный и не поддерживается бесконечно, в этом случае вам нужна статическая переменная для фиксации ответа. Наблюдайте за последовательным выводом, чтобы увидеть, по какому пути идет код на каждой итерации loop()
.