TTN_ESP32 pre-integrated boards

Hello all, I’m using the TTN_esp32 library and I’m struggling with the downlink portion. I’m sending downlink to my heltec Wi-Fi LoRa32 V2 but I’m only getting random numbers. I’m using the ttn-otaa example sketch. Has anyone ever used this library before? I’m wondering if this is the result of a pin mapping issue. Do I need to declare which board I’m using? It says that the pre-integrated boards work automatically but it also refrences the Arduino-LMIC library for pin mapping found here mcci-catena/arduino-lmic: LoraWAN-MAC-in-C library, adapted to run under the Arduino environment (

This is the link to the library I’m using, rgot-org/TheThingsNetwork_esp32 (

and below is the example ttn-otaa sketch I’m using as well.

#include <TTN_esp32.h>

#include "TTN_CayenneLPP.h"
 *  Go to your TTN console register a device then the copy fields
 *  and replace the CHANGE_ME strings below
const char* devEui = "CHANGE_ME"; // Change to TTN Device EUI
const char* appEui = "CHANGE_ME"; // Change to TTN Application EUI
const char* appKey = "CHANGE_ME"; // Chaneg to TTN Application Key

TTN_esp32 ttn ;
TTN_CayenneLPP lpp;

void message(const uint8_t* payload, size_t size, int rssi)
    Serial.println("-- MESSAGE");
    Serial.print("Received " + String(size) + " bytes RSSI=" + String(rssi) + "db");
    for (int i = 0; i < size; i++)
        Serial.print(" " + String(payload[i]));
        // Serial.write(payload[i]);


void setup()
    ttn.onMessage(message); // Declare callback function for handling downlink
                            // messages from server
    ttn.join(devEui, appEui, appKey);
    Serial.print("Joining TTN ");
    while (!ttn.isJoined())
    Serial.println("\njoined !");

void loop()
    static float nb = 18.2;
    nb += 0.1;
    lpp.addTemperature(1, nb);
    if (ttn.sendBytes(lpp.getBuffer(), lpp.getSize()))
        Serial.printf("Temp: %f TTN_CayenneLPP: %d %x %02X%02X\n", nb, lpp.getBuffer()[0], lpp.getBuffer()[1],
            lpp.getBuffer()[2], lpp.getBuffer()[3]);

it says to Initialize the stack with pointer to pin mapping

bool begin(const TTN_esp32_LMIC::HalPinmap_t* pPinmap);

but I’m still getting incorrect downlink messages.

That library / repro has a version of LMIC that is on v3.1.

LMIC is now on v4.1

As a ‘smoke test’, try using LMIC-node to check your hardware is working OK.

1 Like

I’m not very familiar with PlatformIO but if it is the better IDE I will learn it. I just installed it and I’m going to try out LMIC-node