Documentation

TTGO T-Beam ESP32 LoRa 915MHz Development Board with NEO-6M GPS | ShillehTek Product Manual
Documentation / TTGO T-Beam ESP32 LoRa 915MHz Development Board with NEO-6M GPS | ShillehTek Product Manual

TTGO T-Beam ESP32 LoRa 915MHz Development Board with NEO-6M GPS | ShillehTek Product Manual

manualshillehtek

Overview

The TTGO T-Beam is a self-contained wireless node: an ESP32 (Wi-Fi + Bluetooth), a 915 MHz LoRa radio, a NEO-6M GPS receiver, and an 18650 battery holder with onboard charging, all on one board. It is the classic platform for GPS asset trackers, Meshtastic mesh nodes, field telemetry, and any project that needs to report location or sensor data over kilometers without cellular service.

Development happens over USB in the Arduino IDE, PlatformIO, or MicroPython, and the board also runs ready-made firmware like Meshtastic if you'd rather not write code at all. A power-management chip (AXP192 on v1.1 boards, AXP2101 on v1.2) handles battery charging and switches power to the GPS and LoRa sections — which matters in code, as shown below.

As a host board, the T-Beam needs no wiring to get started: attach the LoRa antenna, insert an 18650 cell or connect USB, and upload a sketch.

At a Glance

MCU
ESP32 (dual-core, 240 MHz)
LoRa
915 MHz (SX127x/SX1262)
GPS
u-blox NEO-6M
Battery
18650 holder + charging
Wireless
Wi-Fi + BLE + LoRa
PMU
AXP192 / AXP2101

Specifications

Parameter Value
Main Controller ESP32 dual-core Xtensa LX6 @ 240 MHz
Wireless (onboard) Wi-Fi 802.11 b/g/n + Bluetooth (Classic/BLE)
LoRa Radio 915 MHz band (Semtech SX1276 or SX1262, revision-dependent), SMA antenna connector
GPS Module u-blox NEO-6M with backup battery and ceramic/IPEX antenna
Power Management AXP192 (v1.1) / AXP2101 (v1.2) — charging + power rail control
Battery Single 18650 Li-ion holder, charged onboard from USB
USB CH9102F USB-serial bridge (connector varies by revision)
Logic Level 3.3V
Typical Deep Sleep Current Low-mA range with radios off (revision-dependent)
Supported Firmware Arduino IDE, PlatformIO, ESP-IDF, MicroPython, Meshtastic

Getting Started

Nothing external needs wiring — the radios, GPS, and battery circuit are already routed. What you do need is the internal pin map, because the GPS and LoRa radio occupy fixed ESP32 pins:

Function ESP32 GPIO
GPS UART RX (ESP32 receives) GPIO 34
GPS UART TX (ESP32 transmits) GPIO 12
LoRa SPI — SCK / MISO / MOSI GPIO 5 / 19 / 27
LoRa NSS (CS) / RST / DIO0 GPIO 18 / 23 / 26
PMU + OLED I2C (SDA / SCL) GPIO 21 / 22
Onboard button (usable in sketches) GPIO 38

IDE setup: install the ESP32 board package, select T-Beam (or "ESP32 Dev Module"), and pick the board's COM port. For battery use, insert a quality 18650 observing the polarity marking — the board charges it whenever USB is connected.

Warning: Never power the board or transmit without the LoRa antenna attached. Transmitting into a missing antenna can permanently damage the radio's output stage.
Note: The GPS is powered through the PMU, not directly from 3.3V. Your sketch must enable the GPS power rail first (LDO3 at 3.3V on AXP192 boards) or the NEO-6M will sit silent — this is the single most common "my GPS is dead" cause. The examples below handle it.
Tip: First GPS fix can take 1-5 minutes outdoors with a clear sky view (cold start). Indoors it may never lock — test near a window or outside.

Code Examples

Read GPS position (Arduino, TinyGPS++)

tbeam_gps.ino
// T-Beam v1.1 - read NEO-6M GPS and print position
// Libraries: TinyGPSPlus, XPowersLib (both in Library Manager)

#include <TinyGPSPlus.h>
#include <Wire.h>
#include <XPowersLib.h>

TinyGPSPlus gps;
XPowersAXP192 pmu;   // v1.2 boards: use XPowersAXP2101 instead

void setup() {
  Serial.begin(115200);

  // 1) Wake the PMU and switch on the GPS power rail (LDO3, 3.3V)
  Wire.begin(21, 22);
  pmu.begin(Wire, AXP192_SLAVE_ADDRESS, 21, 22);
  pmu.setLDO3Voltage(3300);
  pmu.enableLDO3();

  // 2) GPS UART: RX=34, TX=12, 9600 baud
  Serial1.begin(9600, SERIAL_8N1, 34, 12);
  Serial.println("Waiting for GPS fix (go outdoors)...");
}

void loop() {
  while (Serial1.available()) {
    gps.encode(Serial1.read());
  }
  if (gps.location.isUpdated()) {
    Serial.print("Lat: ");  Serial.print(gps.location.lat(), 6);
    Serial.print("  Lng: "); Serial.print(gps.location.lng(), 6);
    Serial.print("  Sats: "); Serial.println(gps.satellites.value());
  }
}

LoRa beacon transmit (Arduino, SX1276 boards)

tbeam_lora_beacon.ino
// T-Beam (SX1276 revision) - send a LoRa packet every 5 seconds
// Library: "LoRa" by Sandeep Mistry. SX1262 boards: use RadioLib instead.
// ANTENNA MUST BE ATTACHED BEFORE POWERING THE BOARD.

#include <SPI.h>
#include <LoRa.h>

const long FREQ = 915E6;   // 915 MHz (US band)
int counter = 0;

void setup() {
  Serial.begin(115200);

  SPI.begin(5, 19, 27, 18);        // SCK, MISO, MOSI, NSS
  LoRa.setPins(18, 23, 26);        // NSS, RST, DIO0

  if (!LoRa.begin(FREQ)) {
    Serial.println("LoRa init failed - check antenna and revision");
    while (true) delay(1000);
  }
  Serial.println("LoRa ready");
}

void loop() {
  LoRa.beginPacket();
  LoRa.print("T-Beam beacon #");
  LoRa.print(counter++);
  LoRa.endPacket();

  Serial.println("Packet sent");
  delay(5000);
}

Frequently Asked Questions

My GPS never gets a fix. Is it broken?
Almost always it's one of three things: the GPS power rail wasn't enabled through the PMU (see the code example), the board is indoors (NEO-6M needs sky view; first cold start takes 1-5 minutes outside), or the wrong UART pins were used — RX 34 / TX 12 at 9600 baud on this board.
Does the T-Beam run Meshtastic?
Yes — the T-Beam is one of the most popular Meshtastic boards. Flash the official firmware with the Meshtastic web flasher, choosing the build matching your board revision and radio chip, and it becomes an off-grid mesh messenger with no code required.
How do I know if my board has an SX1276 or SX1262 radio?
Check the shielded radio module's silkscreen or your listing details. It matters for software: the Sandeep Mistry LoRa library supports SX127x only, while RadioLib supports both. If LoRa.begin() fails on known-good wiring, you likely have an SX1262 — switch to RadioLib.
What LoRa range should I expect at 915 MHz?
With the stock antenna: roughly 1-3 km in built-up areas and 5-10+ km with line of sight, depending on spreading factor, antenna elevation, and terrain. Higher spreading factors trade data rate for range.
Which 18650 should I use, and how does charging work?
Use a quality unprotected or protected 18650 (protected cells can be a tight fit), inserted per the polarity marking. The PMU charges the cell whenever USB is connected and powers the board from the cell otherwise. Never insert the cell backwards — damage is immediate.
Can I use Wi-Fi, Bluetooth, LoRa, and GPS at the same time?
Yes — they are independent subsystems (LoRa on SPI, GPS on UART, Wi-Fi/BLE inside the ESP32). Budget power accordingly: everything active at once can draw a few hundred mA, so use a charged cell or USB power.

Related Tutorials