Uart RX und TX Übertragung. Hilfe benötigt

Hallo,
ich würde gerne Texte zwischen 2 ESP32 Boards übertragen.
Ich habe schon mit der Serial Funktion probiert, aber es will mir nicht so gelingen wie ich
ich es gerne hätte.

Vielleicht habt Ihr eine Idee.

Also, die 2 ESP sind mit RX und TX "über Kreuz" verbunden.
Das funktioniert.

Der ESP32 , ich nenne ihn mal Nummer 1 bekommt von einer "Audio Lib"
sequentiell Texte, die aktuell per Serial.Print ausgegeben werden.

Das sieht so auszugsweise wie folgt aus:


void audio_info(const char *info){
    Serial.print("info        "); Serial.println(info);
}
void audio_id3data(const char *info){  //id3 metadata
    Serial.print("id3data     ");Serial.println(info);
}
void audio_eof_mp3(const char *info){  //end of file
    Serial.print("eof_mp3     ");Serial.println(info);

Diese Texte würde ich gerne per Uart an einen zweiten ESP senden,
sodas ich diese weiter verarbeiten kann.

Dazu würde mir gefallen wenn diese , hier als Beispiel, die 3 Texte als
einzelne char Variablen beim 2ten ESP zur Verfügung stehen würden.

Und das bekomme ich nicht hin.

Vielleicht hat einer von euch eine Idee dazu...
Also für den "Sender" und den "Empfänger", quasi ein How to do :slight_smile:

daten ->senden->empfangen->parsen->aktion

Damit der Empfänger die Daten analysieren kann, müssen Sender und Empfänger das gleiche Protokoll verwenden. Sowohl auf physikalischer Ebene, als auch auf logischer.

Warum so umständlich:

Wenn Du beim Sender und beim Empfänger festlegst, das "info" eine Zahl bekommt und "id3data" ebenso wie "eof_mp3" eine weitere, dann kannst Du beim Empfänger die Zahl nehmen und danach switchen.
Leider ist der Code unvollständig, das nicht erkennbar ist, was Du vor hast.

Moin, Moin,

kannst du mir das bitte bisschen detailierter erklärten ? :wink:
Ich verstehe es ehrlich gesagt nicht.

PS:
Schau, das ist die Quelle der Char Daten:

....und ich will eben diese auf einen einen zweiten ESP bringen..

Und dies über den Uart.....

Grüße

Der ESP hat mehrere Serielle Ports.
Einer davon ist für die Kommunikation zum PC vorgesehen.
Den solltest du nicht für die ESP zu ESP Kommunikation verwenden.

Das was du "char"-variable nennst ist ein Zeiger auf einen Speicherbereich im RAM

Eine wirkliche char-variable kann nur ein einzelnes Zeichen speichern.
Die Mechanismen wie das Serial.print() das macht mehrere Zeichen zu übertragen sind aber an dieser Stelle unwichtig.

Wenn dein ESP32 mit dem Computer verbunden ist dann benutzt diese Verbindung
"Serial". Wenn du jetzt auf die gleichen IO-pins die da am USB dranhängen zusätzlich auch noch einen zweiten ESP32 dranhängst dann gibt das durcheinander.

Das ist dann ungefähr so als ob zwei Leute exakt gleichzeitig auf dich einreden und dir etwas erklären wollen.

Deshalb musst du für die ESP32-zu-ESP32 kommunikation Serial1 benutzen.

Achtung da steht Serial_EINS

Serial ohne "1"........Serial.print("Hallo Welt"); // das ist die serielle Verbindung USB zum Computer

Serial mit "1"........Serial1.print("Hallo Welt"); // das ist die Verbindung zwischen den beiden ESP32

Auf der Empfangsseite musst du die Daten in Variablen speichern die eine ganze Zeichenkette aufnehmen können.

Das ist entweder ein array of char oder ein SafeString.

Von SafeString sind hier nicht alle begeistert. Außer man ist array of char = c_strings gewöhnt. Umgewöhnen fällt natürlich schwer.

Ich empfehle SafeString weil der Name Programm ist und das Programmieren damit leichter fällt.
SafeString sind sicher in der Benutzung. Man kann sich keine Speicherinhalte zerschiessen.
Bei der Verwendung von c_strings kann man sich sehr wohl Speicherinhalte durcheinanderbringen. Vom Variablentyp String rate ich komplett ab weil man da auch aufpassen muss wie man String-variablen verwendet ohne das die String-Variablen den gesamten RAM-Speicher auffressen.

SafeString ist eine library die man sich über den Library-Manager installieren kann.
Die bei SafeString mitgelieferten Beispiele sind ziemlich komplex = relativ schwer nachzuvollziehen.

Deshalb ist meine Empfehlung SafeString mit dem Code aus Serial-input basics zu kombinieren.

vgs

Hallo Stefan,
ich Danke dir ganz herzlich für deine so ausführliche Antwort.
Danke für deine Zeit die du dir genommen hast.

Ich werde das nun versuchen und danke für deinen "Stups" in die richtige Richtung.

Gruss Rainer

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.