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?
14.01.2021, 20:52
Beitrag #9
RE: MQTT Topic abbonieren?
Moin Jan,
(10.01.2021 23:39)nbk83 schrieb:  [...]
Aber bevor ich das jetzt alles niederschreibe, hier findest Du einen MQTT-Sketch, der das Nötigste enthält

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. Smile

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>

#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  //display

static float wert = 777.14159265359;  //eingelesenen variable
static char Wert_str[15];             //name der varuablen

void setup() {

    dtostrf(wert,7, 4, Wert_str);     //umwandlung der variablen "wert" in zeichenkette

    Serial.begin(9600);
    u8g2.begin();                     //display

}

void loop() {

    Serial.println(Wert_str);
    delay(5000);

    u8g2.clearBuffer();        
    u8g2.setFont(u8g2_font_ncenB08_te);
    u8g2.drawStr(0, 10, Wert_str);  // <--- Display Ausgabe
    u8g2.sendBuffer();        
    delay(5000);        
}

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) {
  Serial.print("Nachricht eingegangen [");
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    //float ((char)payload[i]); // <----------- wahlweise Eingefügt
    //int ((char)payload[i]); // <--------------- wahlweise Eingefügt    
  }
    
  Serial.println();
}

und vor dem void setup() diese auch definiert

Code:
//float wert;
//int wert;
char Wert_str[15];

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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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) {
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);

    u8g2.drawStr(0,10, (char)payload[i]); // <--- Display  
  }    
  Serial.println();
}

Allerdings gibt es da die Fehlermeldung
Code:
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
invalid conversion from 'char' to 'const char*' [-fpermissive]

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
und schon klappt die Ausgabe wie bei
Code:
Serial.print

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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) {
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }

  Serial.println();
  
  u8g2.drawStr(0,10, (char)payload[i]); // <--- Display    
}

mit "i" gibt es eine

Code:
exit status 1
'i' was not declared in this scope

Meldung, ohne "i"

Code:
u8g2.drawStr(0,10, (char)payload); // <--- Display
eine
Code:
exit status 1
cast from 'byte* {aka unsigned char*}' to 'char' loses precision [-fpermissive]

"byte" ? Ist das nicht auch ein Variablentyp?

Danke, einen gesunden Tag noch...

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.01.2021, 05:58
Beitrag #14
RE: MQTT Topic abbonieren?
Und ohne das (char) vorweg?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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: Huh

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;
char Wert_str[15];


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

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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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)
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 573 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