TTGO T-Beam – Kompakter Knochen zum Mappen

Der TTGO T-Beam ist momentan mein liebster Node. Er ist relativ kompakt und leistungsstark und eignet sich hervorragend als Node für den TTN Mapper. Hinzu kommt ein erschwinglicher Preis von ca. 20€. Wer die erste Gehversuche starten möchte, dem sei das GitHub Archiv von DeuxVis empfohlen. Hier ist alles enthalten um seinen T-Beam in einen Mapper Node zu verwandeln. Angefangen beim Sketch, bis hin zum Payload Decoder ist alles dabei. Die erwähnte Brücke von Lora1 nach GPIO33 ist nicht unbedingt nötig.

Das hat mir jedenfalls sehr geholfen und ich bin mit dem T-Beam schnell warm geworden. Was ihr unbedingt wechseln solltet, ist die Antenne. Diese ist wirklich schlecht, aber das sollte ja kein Problem sein.

Pin Mapping

TTGO T-Beam Pin Map
GPIO #ESP32 Pin #U12 Pin #U14 Pin #ESP32 ModulePin NameNotes
GPIO_0235GPIO0(goes off page)
GPIO_1411UART0U0TXDTXD to CP2104
GPIO_2223GPIO2
GPIO_3402UART0U0RXDRXD from CP2104
GPIO_4244GPIO4
GPIO_534GPIO5LORA CLK
GPIO_631SDSD_CLKTo FLASH clock
GPIO_732SDSD_DATA_0To FLASH, PSRAM data 0
GPIO_833SDSD_DATA_1To FLASH, PSRAM data 1
GPIO_928SDSD_DATA_2To FLASH, PSRAM data 2
GPIO_1029SDSD_DATA_3To FLASH, PSRAM data 3
GPIO_1130SDSD_CMDTo FLASH chip select (active low)
GPIO_1218UART1MTDIRXD from GPS
GPIO_13204GPIO13
GPIO_14175GPIO14Blue LED (0=off, 1=on)
GPIO_1521UART1MTDOTXD to GPS
GPIO_1625GPIO16To PSRAM chip select (active low)
GPIO_1727GPIO17To PSRAM clock
GPIO_1835GPIO18To LoRa chip select (active low)
GPIO_1938GPIO19To LoRa MISO
GPIO_20GPIO_20 does not exist
GPIO_214210GPIO21I2C SDA
GPIO_22399GPIO22I2C SCL
GPIO_23363GPIO23To LoRa reset (active low)
GPIO_24GPIO_24 does not exist
GPIO_25146GPIO25
GPIO_2615GPIO26To LoRa DIO0 (interrupt)
GPIO_2716GPIO27To LoRa MOSI
GPIO_28GPIO_28 does not exist
GPIO_29GPIO_29 does not exist
GPIO_30GPIO_30 does not exist
GPIO_31GPIO_31 does not exist
GPIO_3212832K_XPTo LoRa DIO2 (interrupt)
GPIO_331332K_XNTo LoRa DIO1 (interrupt)
GPIO_341010VDET_1
GPIO_3511VDET_2
GPIO_36513TouchSENSOR_VP
GPIO_376TouchSENSOR_CAPP
GPIO_387TouchSENSOR_CAPN
GPIO_39812TouchSENSOR_VNSW5

Pass Through

Der verbaute U-Blox Neo-6M ist jedenfalls einer der besseren GPS Chips und kann mit der u-center Software von u-blox verwaltet werden. Also wer sich für den Chip interessiert, sollte ruhig mal etwas tiefer graben. Per Default ist jedenfalls SBAS aktiv und das Dynamic Model ist auf Portable gestellt. Diese werte könnt ihr über die Software komfortabel verwalten, es ist aber auch möglich diese Daten dem GPS-Chip per Programmierung mitzugeben.

Um direkt mit dem GPS Chip kommunizieren zu können, müsst ihr einen Pass Through Sketch auf den T-Beam laden. Diesen findet ihr auf GitHub.

In der u-center Software, wählt ihr nun euren seriellen Port aus und stellt die Baudrate auf 115200 ein, danach solltet ihr sofort eine Verbindung bekommen. Fraglich ist hier aktuell, wie lange die kleine Pufferbatterie die Daten halten kann.

OLED Support

Der T-Beam lässt sich, je nach Display, sehr einfach um ein OLED Display erweitern. Die nötigen Kontakte sind alle schön nebeneinander angeordnet. Leider ist es nicht möglich in der Adafruit Library einen freien I²C Port auszuwählen. Jedoch hat sich ein User dem Problem angenommen und die Library gepatched. Ich habe den TTN-Mapper Node von DeuxVis geforked und entsprechend erweitert. Alle nötigen Files liegen auf GitHub. GPIO22 ist für SDA und GPIO21 für SCL.

Fazit

Für knapp 20€ erhalten wir einen wirklich guten Node, der sich hervorragend als zum Mappen eignet. Der GPS-Chip findet schnell einen Fix und liefert sehr gute Positionsdaten. Die Bauform ist relativ kompakt und er lässt sich über eine 18650 Zelle sehr einfach mit Strom versorgen. Zu der Laufzeit kann ich bisher noch nichts sagen, da ich den Node bisher noch nicht habe durchlaufen lassen. Im vergleich mit meinem selbst gebauten Mapper-Node, habe ich hier etwas besseren Empfang und einen schnelleren GPS Fix.

  Gefällt mir

16 Gedanken zu “TTGO T-Beam – Kompakter Knochen zum Mappen”

  1. Bei meinem T-BEAM ist die GPS Antenne ziemlich mies. Auf dem Fensterbrett bekomme ich auch nach 15min keinen GPS fix. Wenn ich auf eine andere keramische Antenne gehe (quadratische Bauform, ca 30x30mm) habe ich den Fix innerhalb von Minuten.
    Wie sieht das bei deinem aus?

    • Hallo Reinhard,

      ich kann mich wirklich nicht beklagen. Ich bekomme, selbst an der Fensterbank, zügig einen Fix. Und zügig ist hier innerhalb ein paar Minuten, bei ganz kaltem Node und innerhalb einer halben Minute und schneller, wenn der Node bereits einen Fix an dem Tag hatte. Also ich bin zufrieden.
      Wenn ich es richtig verstanden haben, holt sich der GPS Chip von den Satelliten den Almanach (Bahndaten aller Satelliten für die Zukunft). Damit ist später ein Fix viel schneller möglich.

  2. Klasse ist hier auch die PAX-Counter Software drauf von verkehrsrot, mit Display und GPS ist die ein mobiler Zwitter aus PAX-Counter und TTN-Mapper.

  3. Hi Björn,
    ich habe die Antenne meines TTGO T-Beam gerade nochmal schnell mit dem N1201SA durchgemessen und komme auf einen VSWR Wert von 1.1 (Analyzer in der Hand) und 1.4 (auf dem Boden). Das sind eigentlich sehr gute Werte und sprechen für die mitgelieferte Antenne.

    Auf Thingiverse gibt es auch ein Design für den 3D Drucker: https://www.thingiverse.com/thing:3041339
    Wenn man die Löcher der Schrift nachträglich mit einem 3D CAD Programm schliesst, kommt da dann auch ein ganz brauchbares Gehäuse bei raus :-).

    CU Tim

  4. Ich versuche nun seit Tagen auf meinen TTGO T-Beam einen Sketch zu flashen. Sowohl mit der ArduinoIDE als auch mit Atom/PlatformIO will mir das nicht gelingen.
    Ich arbeite eigentlich schon lange mit ESP8266/ESP32/TTGO V1 und hatte in dieser Richtung bis jetzt keine Probleme.
    Wenn ich mir mit putty die serielle Schnittstelle anschaue bekomme ich folgenden Text bzw. Zeichenfolge:
    ets Jun 8 2016 00:22:57

    rst:0x1 (POWERON_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0018,len:4
    load:0x3fff001c,len:808
    load:0x40078000,len:6084
    load:0x40080000,len:6696
    entry 0x400802e4
    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
    die nicht lesbaren Zeichenfolge nach ‚entry 0x400802e4‘ besteht Hex aus der sich immer wiederholdenden Folge von e2 96
    Hat jemand eine Idee, was da schief läuft?
    Danke für eure Hilfe.
    Wolfgang

  5. Hallo Björn,
    ich habe meinen T-Beam mit der dem Git von Cyberman zum fliegen gebracht. Einzig der GPS-Chip sagt leider gar nichts – im Display stehen 0 Sats. Das deckt sich mit dem, was die Mapper-Software ausgab, dort stand im Display no valid GPS-Fix.

    Ich denke ein Weg zur Fehlersuche ist das von Dir beschriebene Pass Trough-Sketch. Hast Du ein Tut0rial wie ich das auf den T-Beam einspiele?

    Thx, Archer

    • Hi,

      leider hat WordPress den Sketch etwas zerstört, ich habe ihn nun auf GitHub abgelegt.

      Zusätzlich musst du die Arduino ESP32 Erweiterungen installieren und SoftwareSerial zu deiner Bibliothek hinzufügen. Als Board wählst du dann Heltec_WIFI_LoRa_32 und schiebst den Sketch auf den T-Beam. Fast wie hier beschrieben.

      Über den SeriellenMonitor oder die Software von uBlox kannst du nun schauen ob Daten ankommen. Geh ruhig mal raus mit dem Ding, im Haus ist GPS immer schlecht.

      Grüße,
      Björn

  6. Hallo und vielen Dank für diese Einleitung in den T-Beam.
    Eine Frage hat sich mir leider nicht beantwortet: Kann über den T-Beam der eingesetzte Akku gefahrlos geladen werden oder ist es analog zum TTGO LoRa32 V2.1 – 1.6 nicht gefahrlos möglich.
    Danke!

    • Einen direkten Tipp kann ich dir nicht geben. Hab es damals bei AliExpress gekauft.
      Es ist ein 0,96 Zoll OLED Display I²C mit 128×64 Pixel. Wenn du es direkt an den T-Beam löten willst, solltest du darauf achte, das der erste PIN VCC ist und der zweite GND. SCL und SDA ist egal, da du dieses in der Software anpassen kannst.

      Grüße,
      Björn

  7. Ich habe auf dem T-Beam die PAX-Software drauf die laut allen Beschreibungen auch TTNMappen kann:
    https://github.com/cyberman54/ESP32-Paxcounter

    Im TTN habe ich den Decoder mit folgendem Inhalt angegeben:

    // Decoder for device payload encoder „PLAIN“
    // copy&paste to TTN Console -> Applications -> PayloadFormat -> Decoder

    function Decoder(bytes, port) {
    var decoded = {};

    if (port === 1) {
    var i = 0;

    if (bytes.length >= 2) {
    decoded.wifi = (bytes[i++] < 15) {
    decoded.ble = (bytes[i++] < 4) {
    decoded.latitude = ((bytes[i++] << 24) | (bytes[i++] << 16) | (bytes[i++] << 8) | bytes[i++]);
    decoded.longitude = ((bytes[i++] << 24) | (bytes[i++] << 16) | (bytes[i++] << 8) | bytes[i++]);
    decoded.sats = bytes[i++];
    decoded.hdop = (bytes[i++] << 8) | (bytes[i++]);
    decoded.altitude = (bytes[i++] << 8) | (bytes[i++]);
    }
    }

    if (port === 2) {
    var i = 0;
    decoded.battery = ((bytes[i++] << 8) | bytes[i++]);
    decoded.uptime = ((bytes[i++] << 56) | (bytes[i++] << 48) | (bytes[i++] << 40) | (bytes[i++] << 32) |
    (bytes[i++] << 24) | (bytes[i++] << 16) | (bytes[i++] << 8) | bytes[i++]);
    decoded.temp = bytes[i++];
    decoded.memory = ((bytes[i++] << 24) | (bytes[i++] << 16) | (bytes[i++] << 8) | bytes[i++]);
    decoded.reset0 = bytes[i++];
    decoded.reset1 = bytes[i++];
    }

    if (port === 4) {
    var i = 0;
    decoded.latitude = ((bytes[i++] << 24) | (bytes[i++] << 16) | (bytes[i++] << 8) | bytes[i++]);
    decoded.longitude = ((bytes[i++] << 24) | (bytes[i++] << 16) | (bytes[i++] << 8) | bytes[i++]);
    decoded.sats = bytes[i++];
    decoded.hdop = (bytes[i++] << 8) | (bytes[i++]);
    decoded.altitude = (bytes[i++] << 8) | (bytes[i++]);
    }

    if (port === 5) {
    var i = 0;
    decoded.button = bytes[i++];
    }

    if (port === 6) {
    var i = 0;
    decoded.rssi = bytes[i++];
    decoded.beacon = bytes[i++];
    }

    if (port === 7) {
    var i = 0;
    decoded.temperature = ((bytes[i++] << 8) | bytes[i++]);
    decoded.pressure = ((bytes[i++] << 8) | bytes[i++]);
    decoded.humidity = ((bytes[i++] << 8) | bytes[i++]);
    decoded.air = ((bytes[i++] <= 2) {
    decoded.battery = (bytes[i++] << 8) | bytes[i++];}
    }

    if (port === 9) {
    if (bytes.length === 1) {
    decoded.timesync_seqno = bytes[0];
    }
    }

    return decoded;

    }

    Dadurch erhalte ich habe vom GPS nur folgende Werte:

    payload_fields: object
    altitude: 41728
    hdop: 27136
    latitude: -1896544765
    longitude: -2043714816
    sats: 7

    Die L. und L. stimmt natürlich gar nicht.
    Hat dafür jemand eine Lösung?

    Danke!

    • Fällt mir spontan die Konfig ein. In der paxcounter.conf muss ebenfalls PLAIN als ausgabeformate gewählt werden:
      #define PAYLOAD_ENCODER 1

      Überprüf das mal bitte.
      Grüße,
      Björn

  8. Hallo ihr Spezialisten,
    ich muß vorausschicken das ich nicht gerade der super Checker diesbezüglich bin.
    Aber ich komme mit meinem „Projekt einfach nicht weiter.
    Ich nutze den T-Beam in Kombination mit einem eReader Kobo Glo(inkl. LK8000 Flugsoftware) zum Fliegen um die GPS und Flarmdaten auf den Kobo zu bringen.
    Bisher habe ich das über Wifi getan, leider funktioniert das nur sporadisch, da der Kobo die Verbindung immer wieder verliert bzw. dann nicht mehr abspeichert, wenn ich den Kobo ausschalte.
    Daher würde ich gerne eine Kabelverbindung herstellen.
    Frage ist nun:
    Welche Pins muß ich beim T-Beam „anzapfen“ um die nötigen Daten des GPS sowie des Flarm mit meiner Seriellen Schnittstelle im Kobo oder auch evtl. USB Micro Buchse zu verbinden?ß
    Könnt ihr mir da helfen?
    Herzlichen Dank
    Andreas

    • Hallo Andreas,

      wenn ich es richtig verstehe, nutzt du SoftRF. Leider befasse ich mich mit dem Thema überhaupt nicht und kann dir daher auch nicht weiter helfen. Bitte wende dich an ein entsprechendes Forum ob es möglich ist, die Daten per USB abzugreifen.

      Grüße,
      Björn

Schreibe einen Kommentar