INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MQTT Topic abbonieren?
17.01.2021, 22:18
Beitrag #25
RE: MQTT Topic abbonieren?
Moin Steinspiel,
war die Zeile vom Tommy auch auskommentiert, als der Fehler kam?
Code:
//float f = atof((char *)payload);  // <--- von tommy
Außerdem sollte die außerhalb der for-Schleife stehen, auch der Teil den Tommy in seinem letzten Post geschrieben hat. (Tommy: Du korrigierst mich bitte, wenn's nicht richtig sein sollte)
Gruß Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.01.2021, 22:21 (Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2021 22:22 von Tommy56.)
Beitrag #26
RE: MQTT Topic abbonieren?
Natürlich gehört das nicht in die for-Schleife, da hast Du Recht.

Das ist eben das Problem, wenn nur kopiert und nix verstanden wird.
Irgendwann haben wir alle das lernen müssen, nur manche denken, sie kommen ohne (mit auf St.Nimmerleinstag verschoben) aus.
Dann geht das halt laufend schief.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.01.2021, 21:15
Beitrag #27
RE: MQTT Topic abbonieren?
Moin,
(17.01.2021 22:18)nbk83 schrieb:  [...]
war die Zeile vom Tommy auch auskommentiert, als der Fehler kam?

Ja, war sie. Hatte den Fehler inzwischen schon zwei, drei mal und habe den ESP32 erst mal still gelegt. Mit einem neuen Controller kam der Fehler bisher nicht vor, also im "normalen" Betrieb meine ich.

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.01.2021, 21:27 (Dieser Beitrag wurde zuletzt bearbeitet: 20.01.2021 21:29 von Steinspiel.)
Beitrag #28
RE: MQTT Topic abbonieren?
Moin Tommy,
(17.01.2021 22:21)Tommy56 schrieb:  [...]
nur manche denken, sie kommen ohne (mit auf St.Nimmerleinstag verschoben) aus.
Dann geht das halt laufend schief.

Meine (Frei) Zeitsituation ist immer noch "leicht" angespannt, trotzdem wollte ich kurz mitteilen das euer steter Tropfen den Stein auch höhlt... Wink

Dieses "MQTT/Variabeln/Display Ding" ist ja mein erstes größeres Projekt in diese Richtung und für mich im Moment wichtig. Um diese ziemlich Verwirrenden "Variablen Sachverhalte", die ich die letzten Tage so gelesen habe, üerhaupt in eine Bahn zu bringen habe ich mir ein Sketch erstellt (mit Funktionsabschnitten und Funktionsaufrufen!Wink) welches Zufallszahlen generiert. Diese int Zufallszahlen die alle paar Sekunden anfallen,
wandel ich inzwischen in char um und gebe sie auf dem Dispaly aus!
Sicher nix dolles, aber für mich schon ne große Sache!

[Bild: ryqer02.gif]

Bleibt der MQTT Input, der auf dem seriellen Monitor ausgegeben wird und auf dem Display ausgegeben werden soll:

Code:
void callback
(char* topic, byte* payload, unsigned int length) {
  for (int i = 0; i < length; i++)
  {
  Serial.print((char)payload[i]);  
  }  
  Serial.println("");
}

obiger Funktionsabschnitt führt zur Ausgabe von z.B. "23.60"...

Der topic ist als char* deklariert, also als Zeichenfolge die auf dem ser. Monitor in ASCII ausgegeben wird, der Payload in byte*, eine Zahl zwischen 0 - 255 als vorzeichenlose Ganzzahl, richtig?

die "for Schleife" ist eine Zählschleife die immer um 1 hochzählt. Auf dem ser. Monitor wird dann der Payload, als char umgewandelt, nacheinander ausgegeben. Ist das auch richtig?

Ich weiß jetzt nicht wie bekomme ich "payload
" aus der callback-Funktion heraus ? Also "heraus" um es evtl. noch einmal in char umzuwandeln und weiter unten im Sketch in die Displayfunktion ein zu fügen.?

Testweise habe ich die Displayfunktion in callback eingefügt
Code:
display.println(XXX);
topic lässt sich anzeigen , payload oder (char)payload[i] sehen aber aus als müssten sie noch umgewandelt werden.Huh

[Bild: hbiDIiu.png]

Da weiß ich jetzt nicht wie ich weiter machen soll, also [i] payload
so auf zu bereitend das es auf dem Display ausgegeben werden kann.

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.01.2021, 21:34
Beitrag #29
RE: MQTT Topic abbonieren?
Was sagt denn der Code (mehrere Varianten), den ich Dir gegeben habe? Etwas konkrete Rückmeldung wäre schon sinnvoll.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2021, 21:47
Beitrag #30
RE: MQTT Topic abbonieren?
Moin,

(20.01.2021 21:34)Tommy56 schrieb:  [...]Etwas konkrete Rückmeldung wäre schon sinnvoll.

Da gebe ich Dir Recht!

Deinen Code habe ich in die callback-Funktion eingefügt:

Code:
void callback
(char* topic, byte* payload, unsigned int length) {

//---------------
  char tmp[10];
  Serial.print(F("Laenge: "));
  Serial.println(length);
  //strncpy(tmp,payload,length);
  //float f = atof(tmp);
  float f = atof((char *)payload);
  Serial.println(f);
//---------------  
      
  for (int i = 0; i < length; i++)
  {
  //Serial.println((char)payload[i]);
  }  
  Serial.println("");
}

Die Zeile "strncpy(tmp,payload,length);" habe ich auskommatiert. Es gab die Fehlermeldung

Code:
invalid conversion from 'byte* {aka unsigned char*}' to 'const char*' [-fpermissive]

Bei "float f = atof(tmp);" gibt das "f" nur ein 0.00 auf dem ser. Monitor aus, deshalb habe ich sie ersetzt so wie Du vorgeschlagen hattest.

Aber: als "Laenge:" wird eine 5 ausgegeben (ich schätze mal wegen : z.B. 22.50 = fünf Stellen...) und "f" gibt die Temperatur auf dem seriellen Monitor aus! Ist dat nicht Super? Big Grin

Allerdings haben meine Versuche (als stochern im dunkeln) nichts gebracht um das "f" aus der callback-Funktion heraus zu bekommen damit ich es im Displayaufruf an anderer Stelle im Sketch einfügen kann. Ich habe dann den Displayaufruf ins callback geholt (zwischen Deinem Code und der for Schleife) und siehe da die Temperatur wird (fast) sauber auf dem Display ausgegeben. "fast" weil ich ein "display.clearDisplay();" einfügen muss weil die Werte immer "übereiander" geschrieben und dadurch unleserlich werden.
Aber das sind kosmetische Sachen und eigentlich noch unwichtig.

Auf jeden Fall Danke für Deine geduldige Hilfe und Du kannst Dir auf Dein Rabenbanner schreiben das ich wirklich was gelernt habe!

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2021, 22:03 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2021 22:09 von Tommy56.)
Beitrag #31
RE: MQTT Topic abbonieren?
(21.01.2021 21:47)Steinspiel schrieb:  und "f" gibt die Temperatur auf dem seriellen Monitor aus! Ist dat nicht Super? Big Grin

Allerdings haben meine Versuche (als stochern im dunkeln) nichts gebracht um das "f" aus der callback-Funktion heraus zu bekommen
Dann deklariere doch die float-Variable global und weise sie im Callback zu. Ist zwar nicht unbedingt lehrbuchreif aber funktioniert.

Code:
// globale Variable
float wert;

// im Callback
wert = atof((char *)payload);

Gruß Tommy

Edit: Auf Grafikdisplays überschreibt man entweder den alten Text mit der Hintergrundfarbe oder malt ein passendes Rechteck mit der Hintergrundfarbe, um nicht immer das ganze Display zu löschen, was zum Flackern führt.

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2021, 22:37
Beitrag #32
RE: MQTT Topic abbonieren?
(21.01.2021 22:03)Tommy56 schrieb:  Ist zwar nicht unbedingt lehrbuchreif aber funktioniert.

Das weißt aber auch nur Du! ;-)
Es funktioniert, Danke. Das ist das was ich wollte!

Zitat:Edit: Auf Grafikdisplays überschreibt man entweder den alten Text mit der Hintergrundfarbe
Das werde ich probieren! Ich habe zwar jetzt ein millis(); eingebaut, aber es flackert wenn die Zeit um ist. :-(
Ich werde berichten...

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Einer RGB-LED am ESP Werte aus MQTT zuweisen. Manny 2 69 Gestern 16:50
Letzter Beitrag: Manny
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 23 3.308 09.04.2021 16:15
Letzter Beitrag: amshh
  BUILTIN_LED vom ESP mit MQTT und NodeRed schalten. Manny 7 572 22.03.2021 18:24
Letzter Beitrag: Manny
  433MHz-WiFi-MQTT-Sender nbk83 25 2.036 04.01.2021 16:35
Letzter Beitrag: nbk83
  Wo MQTT LogIn Daten einfügen? Steinspiel 10 1.099 28.12.2020 14:32
Letzter Beitrag: Tommy56
  Sensorausgabe mit MQTT publishen ? Steinspiel 14 1.368 16.12.2020 13:06
Letzter Beitrag: biologist
  Hilfe bei async-mqtt-client für ESP32 amshh 7 1.016 12.11.2020 09:19
Letzter Beitrag: amithlon
  DHT11 Daten via MQTT an Raspi senden Hanibal_Smith 5 754 10.11.2020 16:24
Letzter Beitrag: biologist
  wert an client schicken während Deepsleep mqtt & ibroker stevensen 13 1.365 06.11.2020 21:07
Letzter Beitrag: nbk83
  MQTT Connect schleife looped crazysky 1 538 29.10.2020 15:21
Letzter Beitrag: crazysky

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste