Cannot join Wireless Stick ESP32 LoraWan Chirpstack

Hello!

I’m trying to connect my Wireless Stick to Chirpstack using the LoRaWAN example code provided right here, which I can access through Arduino IDE.

I have followed the Heltec tutorial, but still couldn’t do it, so I wish I could get some help.

I’m using LoRaWAN Region AU915.

Below is my code:

#include "LoRaWan_APP.h"

/* OTAA para*/

uint8_t devEui[] = { 0x22, 0x32, 0x33, 0x00, 0x00, 0x88, 0x88, 0x02 };

uint8_t appEui[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

uint8_t appKey[] = { 0xd0, 0x67, 0x84, 0x81, 0x64, 0x57, 0x12, 0x87, 0xc3, 0x45, 0x1d, 0x67, 0xf6, 0x8c, 0x71, 0x9b };

/* ABP para*/

uint8_t nwkSKey[] = { 0x15, 0xb1, 0xd0, 0xef, 0xa4, 0x63, 0xdf, 0xbe, 0x3d, 0x11, 0x18, 0x1e, 0x1e, 0xc7, 0xda,0x85 };

uint8_t appSKey[] = { 0xd7, 0x2c, 0x78, 0x75, 0x8c, 0xdc, 0xca, 0xbf, 0x55, 0xee, 0x4a, 0x77, 0x8d, 0x16, 0xef,0x67 };

uint32_t devAddr =  ( uint32_t )0x007e6ae1;

/*LoraWan channelsmask, default channels 0-7*/

uint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 };

/*LoraWan region, select in arduino IDE tools*/

LoRaMacRegion_t loraWanRegion = ACTIVE_REGION;

/*LoraWan Class, Class A and Class C are supported*/

DeviceClass_t loraWanClass = CLASS_A;

/*the application data transmission duty cycle.  value in [ms].*/

uint32_t appTxDutyCycle = 15000;

/*OTAA or ABP*/

bool overTheAirActivation = true;

/*ADR enable*/

bool loraWanAdr = true;

/* Indicates if the node is sending confirmed or unconfirmed messages */

bool isTxConfirmed = true;

/* Application port */

uint8_t appPort = 2;

/*!

* Number of trials to transmit the frame, if the LoRaMAC layer did not

* receive an acknowledgment. The MAC performs a datarate adaptation,

* according to the LoRaWAN Specification V1.0.2, chapter 18.4, according

* to the following table:

*

* Transmission nb | Data Rate

* ----------------|-----------

* 1 (first)       | DR

* 2               | DR

* 3               | max(DR-1,0)

* 4               | max(DR-1,0)

* 5               | max(DR-2,0)

* 6               | max(DR-2,0)

* 7               | max(DR-3,0)

* 8               | max(DR-3,0)

*

* Note, that if NbTrials is set to 1 or 2, the MAC will not decrease

* the datarate, in case the LoRaMAC layer did not receive an acknowledgment

*/

uint8_t confirmedNbTrials = 4;

/* Prepares the payload of the frame */

static void prepareTxFrame( uint8_t port )

{

  /*appData size is LORAWAN_APP_DATA_MAX_SIZE which is defined in "commissioning.h".

  *appDataSize max value is LORAWAN_APP_DATA_MAX_SIZE.

  *if enabled AT, don't modify LORAWAN_APP_DATA_MAX_SIZE, it may cause system hanging or failure.

  *if disabled AT, LORAWAN_APP_DATA_MAX_SIZE can be modified, the max value is reference to lorawan region and SF.

  *for example, if use REGION_CN470,

  *the max value for different DR can be found in MaxPayloadOfDatarateCN470 refer to DataratesCN470 and BandwidthsCN470 in "RegionCN470.h".

  */

    appDataSize = 4;

    appData[0] = 0x00;

    appData[1] = 0x01;

    appData[2] = 0x02;

    appData[3] = 0x03;

}

//if true, next uplink will add MOTE_MAC_DEVICE_TIME_REQ

void setup() {

  Serial.begin(115200);

  Mcu.begin();

  deviceState = DEVICE_STATE_INIT;

}

void loop()

{

  switch( deviceState )

  {

    case DEVICE_STATE_INIT:

    {

      #if(LORAWAN_DEVEUI_AUTO)

        LoRaWAN.generateDeveuiByChipID();

      #endif

      LoRaWAN.init(loraWanClass,loraWanRegion);

      break;

    }

    case DEVICE_STATE_JOIN:

    {

      LoRaWAN.join();

      break;

    }

    case DEVICE_STATE_SEND:

    {

      prepareTxFrame( appPort );

      LoRaWAN.send();

      deviceState = DEVICE_STATE_CYCLE;

      break;

    }

    case DEVICE_STATE_CYCLE:

    {

      // Schedule next packet transmission

      txDutyCycleTime = appTxDutyCycle + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND );

      LoRaWAN.cycle(txDutyCycleTime);

      deviceState = DEVICE_STATE_SLEEP;

      break;

    }

    case DEVICE_STATE_SLEEP:

    {

      LoRaWAN.sleep(loraWanClass);

      break;

    }

    default:

    {

      deviceState = DEVICE_STATE_INIT;

      break;

    }

  }

}

I believe I configured everything right in Chirpstack: DevEUI, AppKey, OTAA Support, LoraWAN MAC Version, etc.

I cannot see Join Requests nor Join Accepts in the live frames.

My gateway is a RAK 2287.

This is some of the debugging at Serial Monitor:

LoRaWAN AU915 Class A start!
+OTAA=1
+Class=A
+ADR=1
+IsTxConfirmed=1
+AppPort=2
+DutyCycle=15000
+ConfirmedNbTrials=4
+ChMask=0000000000000000000000FF
+DevEui=2232330000888802(For OTAA Mode)
+AppEui=0000000000000000(For OTAA Mode)
+AppKey=D067848164571287C3451D67F68C719B(For OTAA Mode)
+NwkSKey=15B1D0EFA463DFBE3D11181E1EC7DA85(For ABP Mode)
+AppSKey=D72C78758CDCCABF55EE4A778D16EF67(For ABP Mode)
+DevAddr=007E6AE1(For ABP Mode)

joining…

TX on freq 916200000 Hz at DR 5
Event : Tx Done
RX on freq 926300000 Hz at DR 13
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 915600000 Hz at DR 2
Event: Tx Done
RX on freq 924500000 Hz at DR 10
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 916000000 Hz at DR 5
Event : Tx Done
RX on freq 925700000 Hz at DR 13
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 915200000 Hz at DR 2
Event : Tx Done
RX on freq 923300000 Hz at DR 10
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 915400000 Hz at DR 5
Event : Tx Done
RX on freq 923900000 Hz at DR 13
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 915800000 Hz at DR 2
Event : Tx Done
RX on freq 925100000 Hz at DR 10
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 916600000 Hz at DR 5
Event : Tx Done
RX on freq 927500000 Hz at DR 13
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 916400000 Hz at DR 2
Event : Tx Done
RX on freq 926900000 Hz at DR 10
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 916000000 Hz at DR 5
Event : Tx Done
RX on freq 925700000 Hz at DR 13
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 916600000 Hz at DR 2
Event : Tx Done
RX on freq 927500000 Hz at DR 10
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 916200000 Hz at DR 5
Event : Tx Done
RX on freq 926300000 Hz at DR 13
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 916400000 Hz at DR 2
Event : Tx Done
RX on freq 926900000 Hz at DR 10
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 915400000 Hz at DR 5
Event : Tx Done
RX on freq 923900000 Hz at DR 13
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 915200000 Hz at DR 2
Event : Tx Done
RX on freq 923300000 Hz at DR 10
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 915800000 Hz at DR 5
Event : Tx Done
RX on freq 925100000 Hz at DR 13
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
TX on freq 915600000 Hz at DR 2
Event : Tx Done
RX on freq 924500000 Hz at DR 10
Event : Rx Timeout
RX on freq 923300000 Hz at DR 8
Event : Rx Timeout
join failed, join again at 30s later
TX on freq 916200000 Hz at DR 5
Event : Tx Done
RX on freq 926300000 Hz at DR 13
Event : Rx Timeout
(...)

Have you solved this? I have the same problem

Hello!

Unfortunately, I have not :frowning_face:.

My workaround was to start communicating in US915 frequency and it worked!

I still want to make it work with AU915, though. If you happen to find any solution, please post or link it here.