0% found this document useful (0 votes)
18 views3 pages

Heltec Node LoRaWAN Configuration Code

The document contains a C++ code for a LoRaWAN application, including configurations for OTAA and ABP activation methods. It defines device identifiers, application keys, transmission settings, and a state machine for managing device states such as initialization, joining, sending, and sleeping. The code also includes a function to prepare the payload for transmission and manages the duty cycle for sending data packets.

Uploaded by

Bhavya Labana
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views3 pages

Heltec Node LoRaWAN Configuration Code

The document contains a C++ code for a LoRaWAN application, including configurations for OTAA and ABP activation methods. It defines device identifiers, application keys, transmission settings, and a state machine for managing device states such as initialization, joining, sending, and sleeping. The code also includes a function to prepare the payload for transmission and manages the duty cycle for sending data packets.

Uploaded by

Bhavya Labana
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

#include "LoRaWan_APP.

h"
/* OTAA para*/
uint8_t devEui[] = { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x06, 0xD9, 0xED };
//70B3D57ED006D9ED
uint8_t appEui[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t appKey[] = { 0x06, 0x69, 0x06, 0x42, 0x14, 0x7C, 0x20, 0x1E, 0x14, 0x1E,
0x7E, 0xEC, 0xC0, 0x04, 0x98, 0x73 }; //06 69 06 42 14 7C 20 1E 14 1E 7E EC C0 04
98 73
/* 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*/
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;
}
RTC_DATA_ATTR bool firstrun = true;
void setup() {
[Link](115200);
[Link](HELTEC_BOARD,SLOW_CLK_TPYE);
if(firstrun)
{
[Link]();
firstrun = false;
}
}
void loop()
{
switch( deviceState )
{
case DEVICE_STATE_INIT:
{
#if(LORAWAN_DEVEUI_AUTO)
[Link]();
#endif
[Link](loraWanClass,loraWanRegion);
//both set join DR and DR when ADR off
[Link](3);
break;
}
case DEVICE_STATE_JOIN:
{
[Link]();
[Link]();
break;
}
case DEVICE_STATE_SEND:
{
[Link]();
prepareTxFrame( appPort );
[Link]();
deviceState = DEVICE_STATE_CYCLE;
break;
}
case DEVICE_STATE_CYCLE:
{
// Schedule next packet transmission
txDutyCycleTime = appTxDutyCycle + randr( -APP_TX_DUTYCYCLE_RND,
APP_TX_DUTYCYCLE_RND );
[Link](txDutyCycleTime);
deviceState = DEVICE_STATE_SLEEP;
break;
}
case DEVICE_STATE_SLEEP:
{
[Link]();
[Link](loraWanClass);
break;
}
default:
{
deviceState = DEVICE_STATE_INIT;
break;
}
}
}

Common questions

Powered by AI

The document configures 4 confirmed message trials, providing a balanced approach between reliability and network throughput. Advantages include increased likelihood of successful data transmission in case of network interference, as the LoRaMAC layer retries if no acknowledgment is received. However, more trials can lead to increased network congestion and power consumption, reducing battery life .

In the document, the channel mask is used to specify which channels the LoRaWAN device should use for communication. For example, "userChannelsMask" is set to activate only the first set of channels. This can help reduce interference by using only less congested channels, thus optimizing network performance .

Adaptive Data Rate (ADR) optimizes data rates, time on air, and energy consumption by adjusting the transmission parameters based on the network conditions. In the document, ADR is enabled, which allows the LoRaWAN network to auto-adjust the data rates to improve performance and reliability. With ADR enabled, data rates can change dynamically, leading to more efficient use of the network .

The document implements security measures via the use of unique identifiers and keys like devEui, appEui, and appKey for OTAA, ensuring secure device registration and session key generation. Application data is transmitted securely using these dynamic session keys. Moreover, the choice of using confirmed messages adds a layer of reliability by ensuring data receipt is acknowledged by the network .

The document configures the transmission duty cycle to 15,000 milliseconds. This configuration determines the time interval between consecutive data transmissions, affecting how frequently data is sent and received. A longer interval conserves battery and reduces network congestion but may not suit time-sensitive applications .

The document supports both LoRaWAN Class A and Class C. Class A is a default class where devices allow for bi-directional communication and save power through scheduled downlinks after each uplink. Class C allows devices to have nearly continuous open communication windows, suitable for applications needing low-latency communication .

The document outlines that the initialization starts with configuring serial communication and MCU. If it's the first run, it displays MCU initialization. During setup, the device state is initiated, and it automatically generates the device EUI if needed. After setting the default data rate with ADR off, it proceeds to join the network and handle message cycling and sleeping based on predefined states to optimize operational efficiency .

When ADR is disabled, the document sets a default data rate manually. This approach requires pre-configuring a data rate suitable for assumed network conditions but won't adapt to changing conditions, potentially leading to suboptimal performance if network conditions vary. This choice might lead to reduced efficiency compared to ADR's automatic adjustments .

The document demonstrates flexibility by setting an application data size with "appDataSize" dynamically configurable, limited by "LORAWAN_APP_DATA_MAX_SIZE." The preparation of the transmission frame in the function "prepareTxFrame" allows custom data structuring within this size limit, making the handling adaptable to different application needs and ensuring data integrity .

In LoRaWAN, using Over-The-Air Activation (OTAA) affects key management by dynamically generating session keys, such as the App Session Key (AppSKey) and Network Session Key (NwkSKey), during the join process. The document specifies that OTAA utilizes a unique Device EUI (devEui), Application EUI (appEui), and Application Key (appKey) to authenticate devices with the network. This ensures higher security as keys are not pre-distributed, unlike Activation by Personalization (ABP) which uses static keys .

You might also like