MQTT Topic abbonieren?
|
14.01.2021, 20:52
Beitrag #9
|
|||
|
|||
RE: MQTT Topic abbonieren?
Moin Jan,
(10.01.2021 23:39)nbk83 schrieb: [...] Hat etwas länger gedauert bis ich mich jetzt wieder melde... Den verlinkten Sketch habe ich am laufen. Funktioniert bestens: kann Topics empfangen , in Topics schreiben , soweit erst einmal genau das was ich wollte! Auch das Buch ist in der Zwischenzeit angekommen...! Mein Display habe ich in dem Sketch eingebunden und es gibt schon mal vordefinierten Text aus. ![]() Nun ist ja mein Plan mit dem Sketch die MQTT Topics der umliegenden Temperatursensoren zu empfangen und auf dem Display aus zu geben. Das ich den (Temperatur) Wert in eine Variable schreiben und umwandeln muss um sie auf dem Display aus zu geben weiß ich und in meinem Test Sketch mit festem float funktioniert das auch gut: Code: #include <U8g2lib.h> In meinem MQTT Sketch klappt dieses Beispiel nicht, die "callback Funktion" in der der MQTT Wert ausgelesen und am ser. Monitor ausgegeben wird, habe ich wahlweise um Variablen "float" bzw. "int" ergänzt: Code: void callback(char* topic, byte* payload, unsigned int length) { und vor dem void setup() diese auch definiert Code: //float wert; im void setup() Code: dtostrf(wert,7, 2, Wert_str); eingefügt. Am Display wird allerdigns nur ein "0,00" ausgegeben... Ändere ich den Nachkommawert bei dtostrf, sö ändert sich auch der Nachkommawert auf dem Display... Mein Problem scheint also in der "callback Funktion" zu liegen! Kannst Du mir sagen wie ich den "payload" richtig in eine Variable schreiben muss? Einen schönen Abend noch... bis dann, Steinspiel |
|||
14.01.2021, 21:40
Beitrag #10
|
|||
|
|||
RE: MQTT Topic abbonieren?
Warum schreibst Du den Payload nicht einfach im Callback Zeichen für Zeichen aufs Display?
Gruß Jan |
|||
14.01.2021, 22:27
Beitrag #11
|
|||
|
|||
RE: MQTT Topic abbonieren?
(14.01.2021 21:40)nbk83 schrieb: Warum schreibst Du den Payload nicht einfach im Callback Zeichen für Zeichen aufs Display? Das hatte ich versucht. Code: void callback(char* topic, byte* payload, unsigned int length) { Allerdings gibt es da die Fehlermeldung Code: Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi Alles was ich zu dieser Meldung gefunden habe handelte sich um "konvertierung in ein char arry" oder ähnliches. Deshalb nahm ich an das der Wert den MQTT liefert zwar auf den ser. Monitor ausgegeben werden kann, fürs Display aber in ein anderes Format gebracht werden muss. Manchmal habe ich den Eindruck das sich LCD Displays "leichter" ansteuern lassen wie mein OLED Dispaly, einfach Code: lcd.write Code: Serial.print bis dann, Steinspiel |
|||
14.01.2021, 23:29
Beitrag #12
|
|||
|
|||
RE: MQTT Topic abbonieren?
Was passiert denn, wenn du nur u8g2.drawStr(0,10, payload); außerhalb der for-Schleife setzt? (ungetestet)
Gruß Jan |
|||
15.01.2021, 05:03
Beitrag #13
|
|||
|
|||
RE: MQTT Topic abbonieren?
Guten Morgen,
(14.01.2021 23:29)nbk83 schrieb: Was passiert denn, wenn du nur u8g2.drawStr(0,10, payload); außerhalb der for-Schleife setzt? (ungetestet) Code: void callback(char* topic, byte* payload, unsigned int length) { mit "i" gibt es eine Code: exit status 1 Meldung, ohne "i" Code: u8g2.drawStr(0,10, (char)payload); // <--- Display Code: exit status 1 "byte" ? Ist das nicht auch ein Variablentyp? Danke, einen gesunden Tag noch... bis dann, Steinspiel |
|||
15.01.2021, 05:58
Beitrag #14
|
|||
|
|||
RE: MQTT Topic abbonieren?
Und ohne das (char) vorweg?
|
|||
15.01.2021, 20:04
Beitrag #15
|
|||
|
|||
RE: MQTT Topic abbonieren?
Moin Jan,
(15.01.2021 05:58)nbk83 schrieb: Und ohne das (char) vorweg? Innerhalb und Außerhalb der "for Schleife" die gleiche Fehlermeldung: ![]() Code: invalid conversion from 'byte* {aka unsigned char*}' to 'const char*' [-fpermissive] Also für mich ist das ja nur ein blinde Stochern ins blaue... Aber ich habe die Displayausgabe mal außer acht gelassen und nur die jeweilige Variable (float, int, byte) am seriellen Monitor ausgegeben Code: Serial.print (wert); dort erscheint nur "00000" oder "00,00" je nachdem... Also scheint das schreiben des (MQTT) Wertes in einer Variablen, so wie ich es gemacht habe, nicht richtig zu sein oder es wird aus einem anderen Grund der MQTT Wert zwar am ser. Monitor ausgegeben aber nicht in einer Variable gespeichert. Variable deklarieren Code: float wert; Code: void callback(char* topic, byte* payload, unsigned int length) { Variable erstellen Code: dtostrf(wert,4, 2, Wert_str); Gibt es eine andere Möglichkeit zu prüfen ob ein Wert in der Variablen steht oder erstelle ich die Variable falsch? bis dann, Steinspiel |
|||
15.01.2021, 20:10
Beitrag #16
|
|||
|
|||
RE: MQTT Topic abbonieren?
Was soll diese Zeile bewirken?
float ((char)payload[i]); Wo setzt Du wert? Lerne mal ein paar Grundlagen über Zeichenketten. Ich habe da mal ein Tutorial dazu geschrieben. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste