Хотите сделать мигание навсегда, пока я не нажму OFF в nodemcu - PullRequest
1 голос
/ 09 марта 2019

Я тестирую nodeMCU с Adafruit io для iot. Я просто моргнул. Но мигание не работает. Я хочу сделать мигание в цикле, чтобы, когда я передаю команду MQTT OFF, он перестал работать.

#include <Adafruit_MQTT.h>            //Adafruit MQTT Libraries
#include <Adafruit_MQTT_Client.h>     //
#include <ESP8266WiFi.h>              //ESP8266 Wi-Fi libraries

#define relayPin 16

void setup ():

void setup() 
{pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, LOW);  
  Serial.begin(9600);
  delay(10);
  WiFi.begin(WLAN_SSID, WLAN_PASS);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }

  mqtt.subscribe(&onoffbutton); // Setup MQTT subscription for onoff feed.
}

и это цикл

 void loop() 
    {
       MQTT_connect();
       Adafruit_MQTT_Subscribe *subscription;
        while ((subscription = mqtt.readSubscription(5000))) 
      {
        if (subscription == &onoffbutton) {
          Serial.print(F("Got: "));
          Serial.println((char *)onoffbutton.lastread);
          String response = (char*)onoffbutton.lastread; //converts the received ON or OFF to string to compare in the if-else statement
          Serial.println(response);
          if (response == "ON")
          {
            digitalWrite(relayPin, LOW);
            delay(100);
            digitalWrite(relayPin, HIGH);
            delay(100);
          }
          else if(response == "OFF")
          {
            digitalWrite(relayPin, HIGH);
          }
        }
      }
    }

1 Ответ

0 голосов
/ 09 марта 2019

Недостаточно информации для реального ответа, так что это скорее инструкция по отладке, которую вы уже должны были сделать и описали в своем вопросе.

Вам нужно выяснить, что из всего этого кода не работает.

Начните с самой простой из мерцающих реализаций (намеренно медленной):

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().

...