Pubsubclient und Parola lib

So jetzt muss ich doch mal die Frage stellen… :frowning: Nach mehreren Tagen Verzweiflung

Mittels MQTT einen Text an eine DOTMatrix MAX72xx senden. Das ganze habe ich mittels der Pubsubclient und der Parola lib gemacht.

Subscriben und Publishen läuft.

Nur habe ich noch Probleme mittels der callback Routine den Payload umzusetzen um als Text-String anzeigen zu lassen. Der Payload kommt als byte* daher.
Folgendes habe ich bereits “gebastelt” :

void callback(char* topic, byte* payload, unsigned int length)
  { 
  Serial.print("Message arrived on topic: [");
  Serial.println(topic);
  Serial.print("Message: ");

        Serial.print("] ");
      for (int i = 0; i < length; i++)
        {
        Serial.println((char)payload[i]);
        payload[length] = '\0';
        }
  }

Der Payload sollte dann den Text “Hello World” ersetzen:

Parola.displayText("Hello World", PA_CENTER, 50, 2000, PA_SCROLL_RIGHT, PA_SCROLL_LEFT);

Wie muss ich den Payload noch umwandeln?

Danke für einen Hinweis.

Pat

"Hello World" ist ein Objekt der String-Klasse. Um das quick und dirty zum Laufen zu bringen: Dein Byte-Array payload muss in ein String-Objekt umgewandelt werden, siehe StringConstructor

Klartext:

String myString = String(payload);

und statt "Hello World" dann myString

Man beachte: die String Klasse kann bei Mikrocontrollern zu Fehlfunktionen führen. Wenn es um ein dauerhaftes Projekt geht: lieber einen Weg suchen, wie man char- oder byte-Arrays direkt ausgeben kann. Das muss Dir die Parola-Lib zeigen.

Danke Dir.

Die lib benötigt jedoch ein char*:

void MD_Parola::displayText	(	

char * 	pText,
textPosition_t 	align,
uint16_t 	speed,
uint16_t 	pause,
textEffect_t 	effectIn,
textEffect_t 	effectOut = PA_NO_EFFECT 
)

Ich bekomm die Umwandlung vom byte* payload einfach nicht hin :confused:

Die lib benötigt jedoch ein char*:

-->Umso besser. Sprintf() sollte an dieser Stelle Abhilfe schaffen.

Ich bekomm die Umwandlung vom byte* payload einfach nicht hin

-->Aber meine vorgeschlagene Quick and Dirty Lösung funktioniert?

DerLehmi:
–>Aber meine vorgeschlagene Quick and Dirty Lösung funktioniert?

no known conversion for argument 1 from ‘String’ to ‘const char*’

Nicht wirklich…

Möglicherweise so:

      P.displayText((char *)payload, PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);

agmue:
Möglicherweise so:

      P.displayText((char *)payload, PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);

Da kommt der Text (endlich...) aber noch 2-3 Zeichen dazu am Schluss

valbuz:
Da kommt der Text (endlich...) aber noch 2-3 Zeichen dazu am Schluss

Da ich Deine Umgebung nicht habe, kenne ich den Inhalt von payload nicht. Da braucht es für vernüftige Hilfe mehr Informationen von Dir.

Oder ich habe einen ESP32, der sich auf ein Testprogramm von Dir freut.

Hallo

Ich konnte nun endlich das "Ding" zum laufen bringen :slight_smile:
Irgendwie stand ich auf dem Schlauch....

Nun kann ich mal weitermachen!

Vielen Dank
Pat

Bitte gerne!