Wemos d1 mini Adafruit Mqtt

OP (Firma: Alexa) #5831641
Lesenswert?

Hi, ich möchte eine led mit adafruit steuern, jedoch macht das ganze 
probleme. Im Wlan verbindet der wemos d1 mini sich und auch Mqtt 
connectet, jedoch klappt nach  MQTT_connect(); nichts in void loop mehr.



#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

#define WIFI_SSID "FRITZ!Box 7590 SZ"
#define WIFI_PASS "PW"

#define MQTT_SERV "io.adafruit.com"
#define MQTT_PORT 1883
#define MQTT_NAME "sntlyeet"
#define MQTT_PASS "Key"

int led = 0;

WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, 
MQTT_PASS);

Adafruit_MQTT_Subscribe onoff = Adafruit_MQTT_Subscribe(&mqtt, MQTT_NAME 
"/f/ONOF");
Adafruit_MQTT_Publish LightsStatus = Adafruit_MQTT_Publish(&mqtt, 
MQTT_NAME "/f/LightsStatus");


void setup()
{
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);


  //Connect to WiFi
  Serial.print("\n\nConnecting Wifi>");
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  digitalWrite(LED_BUILTIN, LOW);

  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(">");
    delay(50);
  }

  Serial.println("OK!");

  //Subscribe to the onoff topic
  mqtt.subscribe(&onoff);

  pinMode(led, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  digitalWrite(led, LOW);

}

void loop()
{
  //Connect/Reconnect to MQTT
  MQTT_connect();

  //Read from our subscription queue until we run out, or
  //wait up to 5 seconds for subscription to update
  Adafruit_MQTT_Subscribe * subscription;
  while ((subscription = mqtt.readSubscription(5000)))
  {
    //If we're in here, a subscription updated...
    if (subscription == &onoff)
    {
      //Print the new value to the serial monitor
      Serial.print("onoff: ");
      Serial.println((char*) onoff.lastread);

      //If the new value is  "ON", turn the light on.
      //Otherwise, turn it off.
      if (!strcmp((char*) onoff.lastread, "ON"))
      {
        //active low logic
        digitalWrite(led, HIGH);
        LightsStatus.publish("ON");
      }
      else if (!strcmp((char*) onoff.lastread, "OFF"))
      {
        digitalWrite(led, LOW);
        LightsStatus.publish("OFF");

      }
      else
      {
        LightsStatus.publish("ERROR");
      }
    }
    else
    {
      //LightsStatus.publish("ERROR");
    }
  }
  //  if (!mqtt.ping())
  //  {
  //    mqtt.disconnect();
  //  }
}


void MQTT_connect()
{

  //  // Stop if already connected
  if (mqtt.connected() && mqtt.ping())
  {
    //    mqtt.disconnect();
    return;
  }

  int8_t ret;

  mqtt.disconnect();

  Serial.print("Connecting to MQTT... ");
  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) // connect will return 0 for 
connected
  {
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);  // wait 5 seconds
    retries--;
    if (retries == 0)
    {
      ESP.reset();
    }
  }
  Serial.println("MQTT Connected!");
}
OP (Firma: Alexa) #5831712
Lesenswert?

es scheint als würde der nicht subscriben können und die Befehle nicht 
auslesen. Im loop funktioniert nach dem Mqtt connect nicht mehr, also es 
kommt weger im serial monitor ein error oder das irgendwas erkannt 
wurde. Durch ifttt wird im feed in adafruit On gepostet -> der esp8266 
soll das ekennen und eine led schalten.
Gast #5831726
Lesenswert?

Fl0_ F. schrieb:
> er connected mit mqtt und danach geht nichts mehr, also er macht
> nicht
> weiter. Ich denke das liegt daran dass er nicht von den befehlen
> erkennt.

Klingt jetzt nicht sehr eindeutig. Ich würde das mal mit Wireshark 
untersuchen. Damit bekommst du auch eine eindeutige Antwort auf deine 
Frage:

>  Muss ich ports freigeben?
OP (Firma: Alexa) #5831740
Lesenswert?

Nein, leider nicht. Ich werde es die tage mal probieren. Das problem 
ist, dass ich relativ neu bin und wenig ahnung von webhooks, bzw mqtt 
habe. Das mit der led ist halt von Yt und bisschen rumproblieren 
entstanden. Ist es denn möglich diese Library auf Adafruit anzuwenden?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren