ESP32 Hardware Serial neu zuordnen

Wenn man mit dem ESP32 die RX/TX Pins für HardwareSerial benutzt, tritt bei einigen Modulen das Problem auf, dass man nach erfolgreichem installieren des neuen Programms via Arduino IDE die serielle Schnittstelle nicht mehr benutzen kann. Beim Upload des Programmes erscheint eine Fehlermeldung, dass das ESP Modul nicht mehr gefunden werden kann.

Dies ist zum Beispiel der Fall, wenn man an das TTGO Lora32 Modul ein GPS anhängen möchte, und die RX/TX Pins auf GPIO1 und GPIO3 wählt.

Man kann das Programm noch flashen und es funktioniert läuft wie gewünscht. Wenn man nun das Modul erneut flashen will, dann findet Arduino IDE das Modul nicht mehr am ausgewählten Port. Das GPS Modul blockiert den seriellen Port des Modules.

Für ESP32 stellt dies jedoch kein Problem dar. ESP32 unterstützt insgesamt 3 Hardware Serial Schnittstellen, auch UART genannt. Diese können mit der HardwareSerial.h Library auf andere freie GPIOS zugewiesen werden.

Die Funktion dazu lautet Serial.begin(). Du findest die Referenz hier: https://www.arduino.cc/reference/en/language/functions/communication/serial/begin

Für den Fall mit dem Lora32 Modul von TTGO wählen wir z.B. die Pins 34 und 35. Der Code sieht dann so aus:

include <HardwareSerial.h> // ist bereits teil von Arduino IDE
include <TinyGPS++.h> // von http://arduiniana.org/libraries/tinygpsplus/

TinyGPSPlus gps;
HardwareSerial Serial(1); // Für die Ausgabe am Serial Monitor
HardwareSerial SerialGPS(2); // 1 = USB Serial, wir können also 2 oder 3 wählen

void setup() {
    Serial.begin(115200); // Serial Monitor Ausgabe

    // RX geht zu TX, TX zu RX, also müssen sie hier vertauscht werden
    // 35 = RX > auf dem GPS Modul mit TX verbunden
    // 34 = TX > auf dem GPS Modul mit RX verbunden
    SerialGPS.begin(9600, SERIAL_8N1, 35, 34);
}

void loop() {
    while (SerialGPS.available() > 0) {
        gps.encode(SerialGPS.read());
        Serial.print("LAT=");  Serial.println(gps.location.lat());
        Serial.print("LONG="); Serial.println(gps.location.lng());
        Serial.print("ALT=");  Serial.println(gps.altitude.meters());
    }
    delay(2000);
}

Alternative OTA

Alternativ kannst Du natürlich auch ein OTA Methode verwenden, um neue Software auf das Modul zu flashen. Hierzu gibt’s einige gute Libraries z.B. die hier:

https://github.com/scottchiefbaker/ESP-WebOTA

Nach einbinden der Library kannst Du aus Arduino IDE generierte *.bin Files über dne Browser auf das Modul hochladen.

Ein Kommentar

Schreibe einen Kommentar