MQTT Library und Thingspeak API
› Foren › Das NanoESP & Pretzel Board Forum › MQTT Library und Thingspeak API
Schlagwörter: Library, MQTT, ThingSpeak
- Dieses Thema hat 3 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 7 Jahren, 10 Monaten von Yunaria.
-
AutorBeiträge
-
Februar 8, 2017 um 12:12 Uhr #2061jpbTeilnehmer
Hat schon einmal jemand erfolgreich die Nanoesp MQTT Library mit einem anderen Broker speziell dem von Thingspeak benutzt?
Wenn ich mir die Thingspeak API anschaue sollte ich doch eigentlich mit dem Befehl
(mqtt.connect(0, "mqtt.thingspeak.com", 1883, mqttId)
eine Verbindung zum Broker bekommen können, was mache ich da falsch?
Ich erhalte nur den Fehler „error connecting“Zum weiteren Verständnis:
Wenn der Fehler behoben ist müsste ich im nächsten Schritt doch dann meine NachrichtnewMsg = {"channels/<em><ChannelID></em>/publish/fields/field1/<em><ApiKey></em>", "0", 0, true};
mit
mqtt.publish(0, &newMsg)
schicken können?- Dieses Thema wurde geändert vor 7 Jahren, 10 Monaten von jpb.
Februar 9, 2017 um 14:39 Uhr #2063jpbTeilnehmerinzwischen bin ich ein Stück weiter gekommen und erreiche ein erfolgreiches connect hierfür ist es bei Thingspeak notwendig dass das
CleanSession flag auf 1
undlastWill flag auf 0
steht.
dies erreiche ich im meinem Programm durch:mqtt_msg lastWill = {"", "", 0, true}; if (mqtt.connect(0,"mqtt.thingspeak.com", 1883 , mqttId, true, 120, &lastWill, "", "")) { Serial.println(F("Connected to Broker")); } else { Serial.println(F("error connecting")); setupOk = false; };
Jetzt bleibt noch das Publish zu lösen hier funktioniert es noch nicht wie gedacht und ich bin für Ratschläge dankbar.
Februar 19, 2017 um 15:41 Uhr #2065YunariaTeilnehmerHallo jpb,
möglicherweise konnten Sie das Problem schon lösen. Falls nicht –
hier die wesentlichen Zeilen aus einem funktionierendem Programm, die für Sie interessant sein könnten.
Lastwill usw. behandle ich im Moment (noch) nicht.
Mir ging es einmal rein darum, an ThingSpeak per MQQT Werte zu senden.mqtt_msg newPing; void setup() { newPing = {"channels/210619/publish/fields/field8/" + ThingSpeakKEY, "0"}; if (mqtt.connect(0, "mqtt.thingspeak.com", 1883, ThingSpeakKEY)) { Serial.println("Mit ThingSpeak MQTT verbunden"); digitalWrite(MQTTLED, HIGH); } else { Serial.println("Verbinden mit ThingSpeak MQTT gescheitert"); digitalWrite(MQTTLED, LOW); } } void loop() { sendValues(); delay(15000); } void sendValues() { newPing.value = String(holePing()); mqtt.publish(0, &newPing); } int holePing() { int pingZeit = nanoesp.ping("www.google.at"); return pingZeit; }
Abgeleitet ist dies von http://iot.fkainka.de/day23-2016
LG Yunaria
Februar 20, 2017 um 15:53 Uhr #2067YunariaTeilnehmerNochmal ich…
Das gleichzeitige Übertragen mehrerer Sensordaten / mehrerer Felder funktioniert auch auf diese Art.
Den unschönen Code bitte ich zu entschuldigen.Die relevanten Zeilen:
mqtt_msg newData; void setup() { newData = {"channels/210619/publish/" + ThingSpeakKEY, "0"}; if (mqtt.connect(0, "mqtt.thingspeak.com", 1883, ThingSpeakKEY)) { Serial.println("Mit ThingSpeak MQTT verbunden"); } else { Serial.println("Verbinden mit ThingSpeak MQTT gescheitert"); } } void loop() { sendValues(); delay(15000); } void sendValues() { newData.value = String("field1=" + String(getDHT11Temp()) + "&field2=" + String(getDHT11Hum()) + "&field3=" + String(getDS18B20()) + "&field4=" + String(getLDR()) + "&field5=" + String(getPing())); mqtt.publish(0, &newData); delay(500); } //--------------------------------Sensoren---------------------------------------------------- float getDHT11Temp() { float DHTtemp = dht.readTemperature(); return DHTtemp; } int getDHT11Hum() { float DHThum = dht.readHumidity(); return DHThum; } double getDS18B20() { sensors.requestTemperatures(); double SensorDS = sensors.getTempCByIndex(0); return SensorDS; } int getPing() { int pingZeit=0; do { pingZeit = nanoesp.ping("www.google.at"); } while (pingZeit<=0); return pingZeit; } double getLDR() { double LDRinput = analogRead(LDR); LDRinput = LDRinput/10; return LDRinput; }
LG Yunaria
Attachments:
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.