Demonstration of Class-A LoRaWAN device using NAMote-72

Dependencies:   LoRaWAN-lib mbed lib_mpl3115a2 lib_mma8451q lib_gps SX1272Lib

Dependents:   LoRaWAN-NAMote72-BVS-confirmed-tester-0-7v1_copy

LoRaWAN-NAMote72 Application Demo is a Class-A device example project using LoRaWAN-lib and SX1272Lib libraries.

This project is compliant with LoRaWAN V1.0.1 specification.

Comissioning.h (LoRaWAN Network Configuration)

The end-device can be activated in one of the two ways:

Over the Air (OTA) activation can be enabled as shown in the figure below. /media/uploads/ubhat/ota_enable.png

The end-device must be configured with the following parameters:

  • LORAWAN_DEVICE_EUI (8 Bytes) : Fist 3 Bytes is the Organizationally Unique Identifier (OUI) followed by 5 bytes of unique ID. If not defined by user, then the firmware automatically assigns one to the end-device


Activation by Personalization (ABP) can be enabled as shown in the figure below. /media/uploads/ubhat/abp_enable.png

The end-device must be configured with the following parameters:

  • LORAWAN_DEVICE_ADDRESS (4 Bytes) : If not defined by user, then the firmware automatically assigns one to the end-device
  • LORAWAN_NWKSKEY (16 Bytes)
  • LORAWAN_APPSKEY (16 Bytes)


Config.h (LoRaWAN Communication Parameters)

  • Mode of Operation : Hybrid If the end-device needs to be configured to operate over 8-channels, then Hybrid Mode needs to be enabled /media/uploads/ubhat/hybridenable.png
  • Mode of Operation : Frequency Hop If the end-device needs to be configured to operate over 64-channels, then Hybrid Mode needs to be disabled
  • Delay between successive JOIN REQUESTs : The delay between successive Join Requests (until the end-device joins the network) can be configured using the parameter OVER_THE_AIR_ACTIVATION_DUTYCYCLE
  • Inter-Frame Delay : One can change the delay between each frame transmission using APP_TX_DUTYCYCLE It is advisable that APP_TX_DUTYCYCLE is greater than or equal to 3sec.
  • Data Rate : The data rate can be configured as per LoRaWAN specification using the paramter LORAWAN_DEFAULT_DATARATE. The range of values are DR_0, DR_1, DR_2, DR_3 and DR_4
  • Confirmed/Unconfirmed Messages : The uplink message or payload can be chosen to be confirmed or unconfirmed using the parameter LORAWAN_CONFIRMED_MSG_ON. When set to 1, the transmitted messages need to be confirmed with an ACK by the network server in the subsequent RX window. When set to 0, no ACK is requested.
  • ADR ON/OFF : The ADR can be enabled or disabled using the parameter LORAWAN_ADR_ON. When set to 1, ADR is enabled and disabled when set to 0.
  • Application Port : The application port can be set using parameter LORAWAN_APP_PORT.
  • Payload Length : The lenght of the payload (in bytes) to be transmitted can be configured using LORAWAN_APP_DATA_SIZE
  • Transmit Power : The transmit power can be configured using LORAWAN_TX_POWER (LoRaMAC verifies if the set power is compliant with the LoRaWAN spec and FCC guidelines)


Main.cpp (Device State Machine)

The end-device state machine is defined.

  • Initial State : Device is initialized.
  • Join State : For OTA, Join Request is transmitted to the network until Join Accept is received by the end-device. Join event function is called that sets Red LED ON.
  • Send State : Transmit payload frame is prepared. Tx event is called that blinks the Red LED indicating uplink transmission.
  • Cycle State : Next packet transmission is scheduled

LoRaEventProc.cpp (Events and On-board Application)

Define events during Join, Tx & Rx. Prepare TX packet by appending with appropriate application data.


  • PrepareLoRaFrame(uint8_t port ) : Prepare LoRa payload frame with on-board application data such as GPS, Temperature, Battery, etc. LoRa.ApplicationCall(AppType ) calls application AppType defined in LoRaApp.cpp. AppType is defined in LoRaApp.h



User-defined applications such as GPS, Temp, Accelerometer, LED indications etc. Event based actions such as LED blink on Tx, LED toggle on downlink etc /media/uploads/ubhat/apptype.png


Process function calls corresponding to different Device states /media/uploads/ubhat/device_state.png


Define MAC Layer Services: MLME & MCPS

Serial Terminal Display

By using a serial port connection using applications such as teraterm or putty, one can view the status of the End-Device. Once the End-Device Joins the network, transmission parameters such as payload data, application port, message type etc. are displayed on the terminal.


Default Application Payload

This application defaults to sending uplink data to logical port 5. The application payload consists of: /media/uploads/jknapp_smtc/payload.png

Sample Application Payload Calculation for Longitude/Latitude

Payload => 00 19 F6 352BBA A94C20 FFFF

Temperature Calculation

19H => 2510

Temp = 25/2 = 12.5 oC

Battery Level

FFH => 100 %

F6H => 96.5 %

Longitude Calculation

longitude = A94C20H => 1109507210

longitudinal coordinate = -360 + (longitude10 x 180/(223))

longitudinal coordinate = -121.93

Latitude Calculation

latitude = 352BBAH = 348460210

latitude coordinate = (latitude10 x 90/(223-1))

latitude coordinate = 37.39


RevisionDateWhoCommit message
19:678f15b08d8a 2020-01-28 nlam Updated to the Mbed latest libraries and resolved build error, uncommented debug.h. default tip
18:18408c3c2d0c 2017-04-24 mluis WARNING: Radio API timings changed from micro-seconds to milliseconds; ; Synchronized with git revision e506c246652fa44c3f24cecb89d0707b49ece739; Updated all libraries to the latest versions
17:f00701a2e2da 2017-04-16 ubhat Reverted back to Working Copy; Updated SX1272 library
16:e3c1e68959cf 2017-04-04 mluis Updated vt100.h to comply with latest mbed library versions.; Updated mbed, LoRaWAN-lib and SX1272Lib libraries to the latest versions.
15:39a23f5affd1 2016-08-31 ubhat Port13 application updates
14:f687ec277e1b 2016-08-30 ubhat minor fixes
13:6b6f4be13633 2016-08-30 ubhat NA Mote Sensor Application (Pressure, Battery, Temperature + Accelerometer)
12:504203733f11 2016-08-05 ubhat Revert to Revision 9
11:d91e8e471ad0 2016-07-29 ubhat clean up
10:7f990e019807 2016-07-29 ubhat Compliance Test update (add test mode 0x06)
9:617844f7fdb1 2016-06-08 ubhat Comissioning.h cleanup
8:14521932100a 2016-06-08 ubhat minor modifications
7:92f4f419f91f 2016-06-08 ubhat Added transmit-on-orientation demo (App Port 12)
6:f8194e691dd4 2016-06-08 ubhat Add push-button application demo (assigned to Application PORT 11)
5:6ffeac53b7cb 2016-06-08 ubhat Change state machine flow in main.cpp
4:7a3ceb1ce02c 2016-05-19 ubhat Updated SX1272Lib to fix Tx Power issue
3:99e46cb2b0df 2016-05-18 mluis Updated LoRaWAN-lib and SX1272Lib libraries.; Comissioning.h cleanup
2:d119a85c793c 2016-05-18 ubhat Updated to LoRaWAN library 4.2.0 & System files
1:67fa4e2af3e4 2016-05-18 ubhat Updated to LoRaWAN library 4.2.0 & System files
0:69f2e28d12c1 2016-05-17 ubhat Project for LoRa Bootcamp