TTGO T-Call 1.3 (Lilygo)

Last Updated on 10. October 2026 by SuffocationLink status: OK

TTGO T-Call 1.3 ist ein ESP32 Modul, das mithilfe des SIM800L Chips einen GSM-Zugang bietet. Ich habe das Modul in Verbindung mit einer ThingsMobile SIM-Karte getestet.

Facts

  • ESP32 and SIM800LLink status: Unknown Chip
  • Micro-SIM-Slot
  • Aerial socket
  • Reset button
  • Connector for a battery
  • USB 3.1 Type C port

Pinout

Source: https://github.com/Xinyuan-LilyGO/TTGO-T-Call/blob/master/datasheet/Link status: OK

Areas of application

  • GPS-Tracker (braucht GPS-Modul)
  • Smart auto control
  • Home automation
  • Alarm systems
  • Weather stations
  • Überall dort einsetzbar, wo es GSM, aber kein WIFI gibt …

Views

Programming

Preparation

I am using a SIM card from Things Mobile.

Things Mobile Sim Karte
Things Mobile SIM-Karte

Diese wird bis zur MicroSD Karte herausgebrochen und muss dann in den Kartenslot auf der Rückseite des TTGO Moduls gesteckt werden. Zum Öffnen der Abdeckung diese vorsichtig in Pfeilrichtung „open“ (Im Bild nach rechts) schieben.

TTGO T-Call 1.3 Telefonkarte im Halter
TTGO T-Call 1.3 SIM card in holder

Dann muss noch die GSM-Antenne aufgesteckt werden:

TTGO T-Call 1.3 mit aufgesteckter GSM Antenne
TTGO T-Call 1.3 mit aufgesteckter GSM-Antenne

Libraries

Zur Ansteuerung des Sim800L Chips wird eine Bibliothek benötigt. Es gibt mehrere Implementierungen, ich habe die TinyGSM verwendet, hier der Link:

https://github.com/vshymanskyy/TinyGSMLink status: OK

The library can be installed via the librarian 😉.

Ich verwende die Version 0.7.9, da die neueste und ein paar alte Versionen nicht kompiliert haben.
Ich verwende aktuell die Version 0.10.1. Diese Version funktioniert bei mir nur mit der neuesten ESP32-Anbindung (Version 1.0.4)

Test programme

First Test – TTGO Example

Das Beispiel von GitHub herunterladen, hier der Link:

Arduino TinyGSMLink status: OK

Für thingsmobile habe ich nur als APN „TM“ eintragen müssen:

Code snippet for setup

Wenn ihr einen Benutzer, Passwort oder SIM-PIN habt, müssen diese hier auch noch eingetragen werden.

Build the project and upload it to the ESP. I've used the following settings for the ESP32 (please adjust the Comport to your own):

This is how it looks on the console:

Console output

Send SMS

Auch wenn SMS-Schreiben nicht zu meinen bevorzugten Kommunikationsformen zählt, ist es doch eine der wichtigeren für ein mobiles Gerät wie dieses. Deshalb habe ich mir noch das AllFunctions-Beispiel aus der TinyGSMLink status: OK taken the library and adapted it to the board:

Source code AllFunctions.ino (GitHub GistLink status: OK)

/**
 * SMS Test with TinyGSM Lib 
 * 
 * Tested on TTGO T-Call 1.3 
 * 
 * Lib: https://github.com/Xinyuan-LilyGO/TTGO-T-Call
 * 
 * For further information see also
 * www.fambach.net
 * 
 * GPLv2
 */

 
const char apn[]  = "TM";
const char gprsUser[] = "";
const char gprsPass[] = "";
const char simPIN[]   = ""; // SIM card PIN code, if any
const char wifiSSID[]  = "TEST";
const char wifiPass[] = "TEST123456789";

// TTGO T-Call pin definitions
#define MODEM_RST            5
#define MODEM_PWKEY          4
#define MODEM_POWER_ON       23
#define MODEM_TX             27
#define MODEM_RX             26
#define I2C_SDA              21
#define I2C_SCL              22

// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial

// Set serial for AT commands (to the module)
#define SerialAT Serial1


// Select your modem:
#define TINY_GSM_MODEM_SIM800
#define TINY_GSM_RX_BUFFER   1024  // Set RX buffer to 1Kb


// See all AT commands, if wanted
// #define DUMP_AT_COMMANDS

// Define the serial console for debug prints, if needed
//#define TINY_GSM_DEBUG SerialMon

// Range to attempt to autobaud
#define GSM_AUTOBAUD_MIN 9600
#define GSM_AUTOBAUD_MAX 38400

/*
 * Test enabled
 */
//#define TINY_GSM_TEST_GPRS true
//#define TINY_GSM_TEST_WIFI true
//#define TINY_GSM_TEST_CALL true
#define TINY_GSM_TEST_SMS true
//#define TINY_GSM_TEST_USSD true
//#define TINY_GSM_TEST_BATTERY true
// powerdown modem after tests
#define TINY_GSM_POWERDOWN false

// set GSM PIN, if any
#define GSM_PIN ""

// Set phone numbers, if you want to test SMS and Calls
#define SMS_TARGET  "+49***********" // < ---- enter you phone number here
//#define CALL_TARGET "+380xxxxxxxxx"



#include <Wire.h>
#include <TinyGsmClient.h>

#ifdef DUMP_AT_COMMANDS
  #include <StreamDebugger.h>
  StreamDebugger debugger(SerialAT, SerialMon);
  TinyGsm modem(debugger);
#else
  TinyGsm modem(SerialAT);
#endif

void setup() {
  // Set console baud rate
  SerialMon.begin(115200);
  delay(10);

  // Keep power when running from battery
  Wire.begin(I2C_SDA, I2C_SCL);
 // bool   isOk = setPowerBoostKeepOn(1);
 // SerialMon.println(String("IP5306 KeepOn ") + (isOk ? "OK" : "FAIL"));

// Set-up modem reset, enable, power pins
  pinMode(MODEM_PWKEY, OUTPUT);
  pinMode(MODEM_RST, OUTPUT);
  pinMode(MODEM_POWER_ON, OUTPUT);

  digitalWrite(MODEM_PWKEY, LOW);
  digitalWrite(MODEM_RST, HIGH);
  digitalWrite(MODEM_POWER_ON, HIGH);
  

// Set GSM module baud rate and UART pins
  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
  delay(3000);

  // Restart takes quite some time
  // To skip it, call init() instead of restart()
  SerialMon.println("Initializing modem...");
  modem.restart();
  // Or, use modem.init() if you don't need the complete restart

  String modemInfo = modem.getModemInfo();
  SerialMon.print("Modem: ");
  SerialMon.println(modemInfo);

  // Unlock your SIM card with a PIN if needed
  if (strlen(simPIN) && modem.getSimStatus() != 3 ) {
    modem.simUnlock(simPIN);
  }

   SerialMon.println("Initializing modem... done");
}

void loop() {

  // Restart takes quite some time
  // To skip it, call init() instead of restart()
  DBG("Initializing modem...");
  if (!modem.restart()) {
  // if (!modem.init()) {
    DBG("Failed to restart modem, delaying 10s and retrying");
    delay(3000);
    // restart autobaud in case GSM just rebooted
    TinyGsmAutoBaud(SerialAT,GSM_AUTOBAUD_MIN,GSM_AUTOBAUD_MAX);
    delay(10000);
    return;
  }

  String name = modem.getModemName();
  DBG("Modem Name:", name);

  String modemInfo = modem.getModemInfo();
  DBG("Modem Info:", modemInfo);

#if TINY_GSM_TEST_GPRS
  // Unlock your SIM card with a PIN if needed
  if ( GSM_PIN && modem.getSimStatus() != 3 ) {
    modem.simUnlock(GSM_PIN);
  }
#endif

#if TINY_GSM_TEST_WIFI
  DBG("Setting SSID/password...");
  if (!modem.networkConnect(wifiSSID, wifiPass)) {
    DBG(" fail");
    delay(10000);
    return;
  }
  SerialMon.println(" OK");
#endif

#if TINY_GSM_TEST_GPRS && defined TINY_GSM_MODEM_XBEE
  // The XBee must run the gprsConnect function BEFORE waiting for network!
  modem.gprsConnect(apn, gprsUser, gprsPass);
#endif

  DBG("Waiting for network...");
  if (!modem.waitForNetwork()) {
    delay(10000);
    return;
  }

  if (modem.isNetworkConnected()) {
    DBG("Network connected");
  }
bool res = false;
String imei="";
#if TINY_GSM_TEST_GPRS
  DBG("Connecting to", apn);
  if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
    delay(10000);
    return;
  }

  res = modem.isGprsConnected();
  DBG("GPRS status:", res ? "connected" : "not connected");

  String ccid = modem.getSimCCID();
  DBG("CCID:", ccid);

  imei = modem.getIMEI();
  DBG("IMEI:", imei);

  String cop = modem.getOperator();
  DBG("Operator:", cop);

  IPAddress local = modem.localIP();
  DBG("Local IP:", local);

  int csq = modem.getSignalQuality();
  DBG("Signal quality:", csq);

  // This is only supported on SIMxxx series
  // String gsmLoc = modem.getGsmLocation();
  // DBG("GSM location:", gsmLoc);

  // This is only supported on SIMxxx series
  // String gsmTime = modem.getGSMDateTime(DATE_TIME);
  // DBG("GSM Time:", gsmTime);
  // String gsmDate = modem.getGSMDateTime(DATE_DATE);
  // DBG("GSM Date:", gsmDate);

  String ussd_balance = modem.sendUSSD("*111#");
  DBG("Balance (USSD):", ussd_balance);

  String ussd_phone_num = modem.sendUSSD("*161#");
  DBG("Phone number (USSD):", ussd_phone_num);
#endif

#if defined(TINY_GSM_MODEM_HAS_GPS)
  modem.enableGPS();
  String gps_raw = modem.getGPSraw();
  modem.disableGPS();
  DBG("GPS raw data:", gps_raw);
#endif

#if TINY_GSM_TEST_SMS && defined(SMS_TARGET)
  res = modem.sendSMS(SMS_TARGET, String("Hello from ") + imei);
  DBG("SMS:", res ? "OK" : "fail");

  // This is only supported on SIMxxx series
  res = modem.sendSMS_UTF16(SMS_TARGET, u"Привіііт!", 9);
  DBG("UTF16 SMS:", res ? "OK" : "fail");
#endif

#if TINY_GSM_TEST_CALL && defined(CALL_TARGET)
  DBG("Calling:", CALL_TARGET);

  // This is NOT supported on M590
  res = modem.callNumber(CALL_TARGET);
  DBG("Call:", res ? "OK" : "fail");

  if (res) {
    delay(1000L);

    // Play DTMF A, duration 1000ms
    modem.dtmfSend('A', 1000);

    // Play DTMF 0..4, default duration (100ms)
    for (char tone='0'; tone<='4'; tone++) {
      modem.dtmfSend(tone);
    }

    delay(5000);

    res = modem.callHangup();
    DBG("Hang up:", res ? "OK" : "fail");
  }
#endif

#if TINY_GSM_TEST_BATTERY
  uint8_t chargeState = -99;
  int8_t percent = -99;
  uint16_t milliVolts = -9999;
  modem.getBattStats(chargeState, percent, milliVolts);
  DBG("Battery charge state:", chargeState);
  DBG("Battery charge 'percent':", percent);
  DBG("Battery voltage:", milliVolts / 1000.0F);

 // float temp = modem.getTemperature();
  //DBG("Chip temperature:", temp);
#endif

#if TINY_GSM_TEST_GPRS
  modem.gprsDisconnect();
  if (!modem.isGprsConnected()) {
    DBG("GPRS disconnected");
  } else {
    DBG("GPRS disconnect: Failed.");
  }
#endif

#if TINY_GSM_TEST_WIFI
  modem.networkDisconnect();
  DBG("WiFi disconnected");
#endif

#if TINY_GSM_POWERDOWN
  // Try to power-off (modem may decide to restart automatically)
  // To turn off modem completely, please use Reset/Enable pins
  modem.poweroff();
  DBG("Poweroff.");
#endif

  // Do nothing forevermore
  while (true) {
    modem.maintain();

  }
}

Telefonnummer an der gekennzeichneten Stelle eintragen und auf das Modul spielen. Nachdem es gebootet hat, solltet ihr eine SMS erhalten.

Problems

Projekt lässt sich nicht kompilieren

Bei mir haben einige Versionen der TinyGSM-Lib nicht funktioniert. Einfach mal ein paar Versionen ausprobieren. Ich bin bei Version 0.7.9 gelandet.

Addendum: Mit dem Update der ESP32-Bibliotheken auf Version 1.0.4 hat auch die aktuelle Version 0.10.1 der TinyGSM-Bibliothek bei mir funktioniert.

Miscellaneous

Andere Anbieter für SIM-Karten

Wenn man nicht viel Datenvolumen braucht, bieten sich jegliche Prepaid-Karten an. Hier ein paar (not sponsored) Links zu den Anbietern.

Conclusion

Nettes Board, dank der Beispiele des Herstellers und der Bibliothek leicht zu programmieren. Auch der Preis von rund 14€ kann überzeugen.

Related Posts

Sources

Github Library Link status: OK

Manufacturer LilygoLink status: Unknown

https://randomnerdtutorials.com/esp32-sim800l-publish-data-to-cloud/Link status: OK

https://www.hardwareschotte.de/magazin/usb-standards-im-ueberblick-a41540Link status: OK

DateChangeAuthor
10.10.2026Gist-Einbettung durch Code-Block ersetzt (Gist als Quelle verlinkt)Suffocation
04.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, Groß-/Kleinschreibung, BindestricheSuffocation
03.10.2026Log-Liste eingefügtSuffocation
22.03.2020Post createdSuffocation
Changelog

11 thoughts on “TTGO T-Call 1.3 (Lilygo)”

  1. Hello Stefan, thank you too for the good compilation of information. This has enabled me to switch over excellently from my first ESP8266 prototypes.
    My goal was a GSM/GPS module that sends position data via secure websockets.
    When I realised I couldn't get the combination of PPPoS, WSS and GPS to work with Arduino libraries, I had to switch to the creepy ESP-IDF SDK. There are also plenty of examples for all the individual components there, but you dive into the annals of C programming.
    With a few modifications (correct UART config, correct RX pin, increasing the buffers) everything worked for the first time last night and I had a really nice alcohol-free beer!
    As a SIM card, I use Netzclub's free data cards (200MB for free, then throttled to 64kBit/s, which suits my needs).
    I hope to find the time to strip down my project to a sample with comments and will then post a link here in the forum.
    Markus's VG

    1. Hello Markus,
      Thank you for your contribution. I've also „played around“ with the Espressif IDF; you can't get past it. Especially if you want to program the new ESP32-S2, you don't have any other choice. In my opinion, the code in the IDF is exponentially harder to read, but you can expect the most up-to-date changes to be in the IDF. I'm also considering switching to it.
      I think the free data card is great, I've already included it in the post.

      Hello
      Stefan

  2. Many thanks for the SMS example. I've also bought the following GPS module (GPS Module GPS-NEO-6M-00) and soldered it to the TX and RX connections. However, I'm not managing to receive GPS data from it using TinyGPS++ or many other methods. I'm using TX = 1, RX = 3 in the program code. I've also tried many other pin numbers, but nothing is working. Do you have any ideas?

    “’#include
    #include

    // The TinyGPS++ object
    TinyGPSPlus gps;
    HardwareSerial SerialGPS(1);

    void setup() {
    Serial.begin(115200);
    SerialGPS.begin(4800, SERIAL_8N1, 3, 1);
    }

    void loop() {
    while (SerialGPS.available() > 0) {
    gps.encode(SerialGPS.read());
    if (gps.location.isUpdated()) {
    Serial.println(„Latitude= „);
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(“Longitude= „));
    Serial.println(gps.location.lng(), 6);
    }
    }
    “

    1. Hello Tinkerpete,

      I don't have a specific suspicion, perhaps a few pointers. I had tested the neo6 V2 once, the link is here:

      https://www.fambach.net/gy-neo6mv2-gps-modul/

    2. The connection speed was 9600 baud for me, as far as I can see, and a few other websites on the internet confirm that too, try it with that.
    3. As far as I'm aware, pins 1 and 3 are already used for UART0 (Serial), which might clash with USB.
    4. Uart1/Serial1 is probably used for the flash memory
    5. So, Uart2/Serial2 (GPIO 17 and GPIO 16) remain.
    6. I couldn't quite work that out from the ESP datasheet, but I think the pins are quite freely configurable.
      Andreas Spies has made a video about that, which I haven't seen yet though: youtu.be/GwShqW39jlE?t=182

      In my example, I didn't explicitly use the hardware Serial, but rather Serial2, assigning pins and a baud rate to it.
      What you can also try is the SoftwareSerial, here any bidirectional IO port should work.

      Hello
      Stefan

      1. Thank you for your detailed reply. At the moment, I've desoldered the GPS module again and connected it to an Uno. I had problems there at first too, but now I'm finally getting the output from the GPS module via RX=2 and TX=3! So it's not defective, at least. Now I'm trying a more differentiated output with TinyGPSPlus, which strangely doesn't work with all the examples from the internet. When I have it back on the T-Call, I'll try the GPIO 17 and GPIO 16 you mentioned.

        1. Hello,

          Slightly longer addendum from me, GPIO16/17 on the top are marked (NC) for not connected.
          I've now tested my example with pins 32/33 and it works (at 9800 baud).
          I must mention that I have only addressed the Neo6-M module now and no further components.
          Another thing that occurred to me is that some modules are a bit fussy about the supply voltage; you could try setting this to 5V (at least for my module, check the datasheet first).

          Greetings Stefan

    1. I haven't managed to send an SMS with the example code yet.
      I am using a prepaid SIM card from Blau, which is actually installed in a GPS tracker and was temporarily removed for testing purposes.
      I ordered 2 SIM cards from Things Mobile yesterday.
      When the cards come in, we're moving on to round 2 😉
      Best regards
      Thomas

  3. Thank you very much for your contribution.
    I've also got a few of these chips and thanks to your description, I was able to get started straight away.
    I've only used the small Wemos so far and am entering new territory with the GSM module.
    The tip regarding the SIM card is also promising.
    Thank you

Leave a Reply

Your email address will not be published. Required fields are marked *