Skip to content

T-Echo Quick Start

Required Libraries

LibraryVersionSource
RadioLibLatestGitHub
Adafruit_EPDLatestGitHub
TinyGPSPlusLatestGitHub

Arduino

  1. Install VS Code and the PlatformIO IDE extension
  2. Clone the repository:
    bash
    git clone https://github.com/Xinyuan-LilyGO/LilyGO-T-Echo.git
  3. Open platformio.ini and select the target example
  4. Click to build, connect via USB, click to upload

Arduino IDE

1. Install nRF52 Board Support

  1. Open Arduino IDE → FilePreferences
  2. Add to "Additional Board Manager URLs":
    https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
  3. Go to ToolsBoardBoards Manager, search nRF52, install Adafruit nRF52 by Adafruit

2. Board Settings

SettingValue
BoardAdafruit Feather nRF52840 Express
Bootloader0.3.2 or later
Upload Speed115200

3. Upload

Connect via USB and click Upload.
If upload fails: double-tap the reset button to enter bootloader mode (LED blinks slowly).


Examples

ExampleDescription
LoRa_SenderSX1262 LoRa packet transmission
LoRa_ReceiverSX1262 LoRa packet reception
GPS_TestL76K GPS NMEA data
EPD_TestE-paper display test
FactoryFull factory test

Peripheral Examples

E-Paper Display (Adafruit_EPD)

cpp
#include <Adafruit_EPD.h>
#include <SPI.h>

// Adjust pins to match your T-Echo hardware version
#define EPD_CS     33
#define EPD_DC     10
#define EPD_RESET  2
#define EPD_BUSY   3

Adafruit_IL0373 epd(212, 104, EPD_DC, EPD_RESET, EPD_CS, -1, EPD_BUSY);

void setup() {
    epd.begin();
    epd.clearBuffer();
    epd.setCursor(10, 10);
    epd.setTextColor(EPD_BLACK);
    epd.setTextSize(2);
    epd.print("T-Echo");
    epd.display();
}

void loop() {}

LoRa (SX1262 — RadioLib)

cpp
#include <RadioLib.h>

// Pin definitions — verify against your T-Echo schematic
#define LORA_CS    24
#define LORA_IRQ   25
#define LORA_RST   26
#define LORA_BUSY  17

SX1262 radio = new Module(LORA_CS, LORA_IRQ, LORA_RST, LORA_BUSY);

void setup() {
    Serial.begin(115200);
    int state = radio.begin(915.0, 125.0, 9, 7, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, 22);
    if (state != RADIOLIB_ERR_NONE) {
        Serial.printf("LoRa init failed: %d\n", state);
    }
}

void loop() {
    int state = radio.transmit("Hello T-Echo");
    Serial.printf("TX state: %d\n", state);
    delay(2000);
}

GPS (L76K — TinyGPSPlus)

cpp
#include <TinyGPSPlus.h>

// nRF52840 uses Adafruit Serial1/Serial2 — check pin definitions for your board
#define GPSSerial Serial1

TinyGPSPlus gps;

void setup() {
    Serial.begin(115200);
    GPSSerial.begin(9600);
}

void loop() {
    while (GPSSerial.available()) gps.encode(GPSSerial.read());
    if (gps.location.isUpdated()) {
        Serial.printf("Lat: %.6f  Lon: %.6f\n", gps.location.lat(), gps.location.lng());
    }
}

FAQ

Q: Upload keeps failing?
A: Double-tap the reset button to enter bootloader mode. The LED should blink slowly and a mass storage device appears on your computer.

Q: E-paper not updating?
A: E-paper displays require a full refresh cycle. Partial refreshes may leave artifacts — call a full refresh after partial updates.

Q: T-Echo is nRF52, not ESP32 — can I use ESP-IDF?
A: No. T-Echo uses Nordic nRF52840 which requires Adafruit nRF52 Arduino core or Zephyr RTOS.