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!"); }
Was klappt nicht in loop? Etwas genauere Fehlerbeschreibung wäre wünschenswert. Womit sendest du das Topic? Und was sendest du?
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.
:
Bearbeitet durch User
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. Muss ich ports freigeben?
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?
Hast du mal die Pubsubclient Lib getestet? Die ist eigentlich ausreichend und funzt bei mir seit Monaten problemlos inkl. Deepsleep.
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?
Sch*** Sch**** Sch***! Ich hatte einen tippfehler drin. Alles war richtig! Ich hab statt OnOff "OnOf" geschrieben und desshalb hat er das nicht ausgelesen. Trotzdem vielen Dank!
Fl0_ F. schrieb: > Ich hab statt OnOff "OnOf" geschrieben und desshalb hat er das > nicht ausgelesen. Ich freue mich für Dich mit. Wie bist du darauf gekommen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.