Skip to content
TTNMapper on the TTGO T-Beam
Branch: master
Clone or download
Pull request Compare This branch is 2 commits ahead, 3 commits behind DeuxVis:master.
Latest commit a1afc72 Nov 25, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore init commit May 4, 2018
LICENSE init commit May 4, 2018
Lora-TTNMapper-T-Beam.ino Added deep sleep. Nov 25, 2018 Update Nov 25, 2018
config.h First basic version working on the T-Beam. Added Readme. Moved the pr… Jun 27, 2018
gps.cpp Added deep sleep. Nov 25, 2018
gps.h Added deep sleep. Nov 25, 2018


This is a simple sketch demonstrating the capability of the TTGO T-Beam as a TTN Mapper Node on The Things Network LoraWAN.

Derived from sbiermann/Lora-TTNMapper-ESP32 and with some information/inspiration from cyberman54/ESP32-Paxcounter and Edzelf/LoRa.

Forked from DeuxVis/Lora-TTNMapper-T-Beam and added Deep Sleep option + a check if there is any movement. If not, updates are only sent every 5 minutes instead of every 30 seconds.

Software dependencies

Arduino IDE ESP32 extension


LMIC-Arduino : Make sure to get the last version - 1.5.0+arduino-2 currently - because the arduino IDE library updater is getting confused by the versioning scheme of that library.


You need to connect the T-Beam DIO1 pin marked Lora1 to the pin 33 - So that the ESP32 can read that output from the Lora module. Optionally you can also connect the Lora2 output to GPIO 32, but this is not needed here.

You can program the T-Beam using the Arduino ESP32 board 'Heltec_WIFI_LoRa_32'.

On The Things Network side, the settings needed are available here.

Configure the Payload decoder with:

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

    decoded.latitude = ((bytes[0]<<16)>>>0) + ((bytes[1]<<8)>>>0) + bytes[2];
    decoded.latitude = (decoded.latitude / 16777215.0 * 180) - 90;
    decoded.longitude = ((bytes[3]<<16)>>>0) + ((bytes[4]<<8)>>>0) + bytes[5];
    decoded.longitude = (decoded.longitude / 16777215.0 * 360) - 180;
    var altValue = ((bytes[6]<<8)>>>0) + bytes[7];
    var sign = bytes[6] & (1 << 7);
        decoded.altitude = 0xFFFF0000 | altValue;
        decoded.altitude = altValue;
    decoded.hdop = bytes[8] / 10.0;

    return decoded;

Let me know if more detailed instructions are needed.


  • Stop sending data to TTN until the GPS get a fix. <== Done thanks to @Roeland54
  • Manage and document the different T-Beam revisions/versions.
  • Switch to OTAA auth method for TTN and save the 'credentials' for reboot use.
You can’t perform that action at this time.