SX1276 Shield based Applications

Dependencies:   X_NUCLEO_IKS01A1 LoRaWAN-lib SX1276Lib mbed

LoRaWAN-SX1276-Application Demo uses SX1276MB1LAS mbed component shield on a nucleo board platform to demonstrate a Class-A LoRaWAN device in the 915MHz ISM band for North American region. It uses the LoRaWAN-lib and SX1276Lib libraries.

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
  • LORAWAN_APPLICATION_EUI (8 Bytes)
  • LORAWAN_APPLICATION_KEY (or DEVKEY) (16 Bytes)

/media/uploads/ubhat/ota_eui.png

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)

/media/uploads/ubhat/abp_key.png

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. A few examples are associated to specific Application Port, and are defined in Config.h
  • 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)

/media/uploads/ubhat/loraconfig.png

The baud-rate for serial terminal display is 115200

Committer:
ubhat
Date:
Wed Jul 18 22:26:26 2018 +0000
Revision:
6:c5f2da0de0b0
Parent:
3:4bca7f8f731a
Add Channel Block option in Config.h; Fix board specific DevEUI allocation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ubhat 0:42863a11464a 1 /*
ubhat 0:42863a11464a 2 / _____) _ | |
ubhat 0:42863a11464a 3 ( (____ _____ ____ _| |_ _____ ____| |__
ubhat 0:42863a11464a 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
ubhat 0:42863a11464a 5 _____) ) ____| | | || |_| ____( (___| | | |
ubhat 0:42863a11464a 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
ubhat 0:42863a11464a 7 (C)2015 Semtech
ubhat 0:42863a11464a 8
ubhat 0:42863a11464a 9 Description: User-defined applications such as GPS, Temp, Accelerometer, LED indications etc.
ubhat 0:42863a11464a 10 Event based actions such as LED blink on Tx, LED toggle on downlink etc
ubhat 0:42863a11464a 11
ubhat 0:42863a11464a 12 License: Revised BSD License, see LICENSE.TXT file include in the project
ubhat 0:42863a11464a 13
ubhat 0:42863a11464a 14 Maintainer: Uttam Bhat
ubhat 0:42863a11464a 15 */
ubhat 0:42863a11464a 16
ubhat 0:42863a11464a 17 #ifndef __APPLICATION_H__
ubhat 0:42863a11464a 18 #define __APPLICATION_H__
ubhat 0:42863a11464a 19
ubhat 0:42863a11464a 20 #include "board.h"
ubhat 0:42863a11464a 21 #include "Common.h"
ubhat 0:42863a11464a 22 #include "SerialDisplay.h"
ubhat 0:42863a11464a 23
ubhat 0:42863a11464a 24 /*!
ubhat 0:42863a11464a 25 * LED ON/OFF definition
ubhat 0:42863a11464a 26 */
ubhat 0:42863a11464a 27 #define LED_ON 0
ubhat 0:42863a11464a 28 #define LED_OFF 1
ubhat 0:42863a11464a 29
ubhat 0:42863a11464a 30 /*!
ubhat 0:42863a11464a 31 * LED types
ubhat 0:42863a11464a 32 */
ubhat 0:42863a11464a 33 enum eLedType
ubhat 0:42863a11464a 34 {
ubhat 0:42863a11464a 35 Red = 0,// Red LED
ubhat 0:42863a11464a 36 Yellow = 1, // Yellow LED
ubhat 0:42863a11464a 37 Green = 2, // Green LED
ubhat 0:42863a11464a 38 Usr = 3, // USR LED
ubhat 0:42863a11464a 39 };
ubhat 0:42863a11464a 40
ubhat 0:42863a11464a 41 /*!
ubhat 0:42863a11464a 42 * user-defined Application names
ubhat 0:42863a11464a 43 */
ubhat 0:42863a11464a 44 enum eAppType
ubhat 0:42863a11464a 45 {
ubhat 2:78df92a365c2 46 AppPressr = 0, // Pressure measurement application
ubhat 2:78df92a365c2 47 AppTemp, // Temperature measurement application
ubhat 2:78df92a365c2 48 AppHumid, // Humidity measurement application
ubhat 2:78df92a365c2 49 AppBat, // Battery measurement application
ubhat 2:78df92a365c2 50 AppRamp, // Generate Ramp bytes
ubhat 2:78df92a365c2 51 AppAccl, // Accelerometer application
ubhat 2:78df92a365c2 52 AppPushButton, // Push button application example
ubhat 0:42863a11464a 53 };
ubhat 0:42863a11464a 54
ubhat 0:42863a11464a 55 /*!
ubhat 0:42863a11464a 56 * Application
ubhat 0:42863a11464a 57 */
ubhat 0:42863a11464a 58 class Application
ubhat 0:42863a11464a 59 {
ubhat 0:42863a11464a 60 public:
ubhat 0:42863a11464a 61 /*!
ubhat 0:42863a11464a 62 * \brief Initializes TX buffer address to private pointer
ubhat 0:42863a11464a 63 *
ubhat 0:42863a11464a 64 * \param [IN] memptr pointer to TX buffer
ubhat 0:42863a11464a 65 */
ubhat 0:42863a11464a 66 Application( uint8_t * memptr );
ubhat 0:42863a11464a 67
ubhat 0:42863a11464a 68 /*!
ubhat 0:42863a11464a 69 * \brief Application Destructor
ubhat 0:42863a11464a 70 */
ubhat 0:42863a11464a 71 ~Application( );
ubhat 0:42863a11464a 72
ubhat 0:42863a11464a 73 /*!
ubhat 0:42863a11464a 74 * \brief Call application type and append to application buffer
ubhat 0:42863a11464a 75 *
ubhat 0:42863a11464a 76 * \param [IN] AppType application type: GPS, Battery, Temp etc.
ubhat 0:42863a11464a 77 */
ubhat 0:42863a11464a 78 void ApplicationCall( eAppType AppType );
ubhat 0:42863a11464a 79
ubhat 0:42863a11464a 80 /*!
ubhat 0:42863a11464a 81 * \brief Append data to the TX buffer
ubhat 0:42863a11464a 82 *
ubhat 0:42863a11464a 83 * \param [IN] pData pointer to the data to be appended to TX buffer
ubhat 0:42863a11464a 84 * \param [IN] Len lenght of the data to be appended to TX buffer
ubhat 0:42863a11464a 85 */
ubhat 0:42863a11464a 86 void ApplicationAppendData( uint8_t *pData, uint8_t len );
ubhat 0:42863a11464a 87
ubhat 0:42863a11464a 88 /*!
ubhat 0:42863a11464a 89 * \brief Point the pointer corresponding to the TX buffer to specified index
ubhat 0:42863a11464a 90 *
ubhat 0:42863a11464a 91 * \param [IN] ptrPos index to where to point to in the TX buffer
ubhat 0:42863a11464a 92 */
ubhat 0:42863a11464a 93 void ApplicationPtrPos( uint8_t ptrPos );
ubhat 0:42863a11464a 94
ubhat 0:42863a11464a 95 private:
ubhat 0:42863a11464a 96 /*!
ubhat 0:42863a11464a 97 * Index to the application buffer
ubhat 0:42863a11464a 98 */
ubhat 0:42863a11464a 99 uint8_t BuffPtr;
ubhat 0:42863a11464a 100 /*!
ubhat 0:42863a11464a 101 * Application buffer address pointer
ubhat 0:42863a11464a 102 */
ubhat 0:42863a11464a 103 uint8_t *BuffAddr;
ubhat 0:42863a11464a 104 };
ubhat 0:42863a11464a 105
ubhat 0:42863a11464a 106 class TimerLed
ubhat 0:42863a11464a 107 {
ubhat 0:42863a11464a 108 public:
ubhat 0:42863a11464a 109 TimerEvent_t LedTimer;
ubhat 0:42863a11464a 110 TimerLed( eLedType );
ubhat 0:42863a11464a 111 ~TimerLed( );
ubhat 0:42863a11464a 112 };
ubhat 0:42863a11464a 113
ubhat 0:42863a11464a 114 extern TimerLed RedLedTimer;
ubhat 0:42863a11464a 115
ubhat 0:42863a11464a 116 extern TimerLed YellowLedTimer;
ubhat 0:42863a11464a 117
ubhat 0:42863a11464a 118 extern TimerLed GreenLedTimer;
ubhat 0:42863a11464a 119
ubhat 0:42863a11464a 120 extern Application LoRaApp;
ubhat 0:42863a11464a 121
ubhat 0:42863a11464a 122 extern bool AppLed;
ubhat 0:42863a11464a 123
ubhat 0:42863a11464a 124 extern bool VerticalStatus;
ubhat 0:42863a11464a 125
ubhat 3:4bca7f8f731a 126 #ifdef USE_CAYENNE_LPP
ubhat 3:4bca7f8f731a 127 extern uint8_t maxLPPsize[4];
ubhat 3:4bca7f8f731a 128 #endif
ubhat 3:4bca7f8f731a 129
ubhat 0:42863a11464a 130 /*!
ubhat 0:42863a11464a 131 * \brief Blink LED
ubhat 0:42863a11464a 132 *
ubhat 0:42863a11464a 133 * \param [IN] led Red, yellow or green LED
ubhat 0:42863a11464a 134 * \param [IN] time time in usec for which the LED must be ON
ubhat 0:42863a11464a 135 */
ubhat 0:42863a11464a 136 void BlinkLED( eLedType led, uint32_t time );
ubhat 0:42863a11464a 137
ubhat 0:42863a11464a 138 /*!
ubhat 0:42863a11464a 139 * \brief Turn LED ON if OFF; OFF if ON
ubhat 0:42863a11464a 140 *
ubhat 0:42863a11464a 141 * \param [IN] led Red, yellow or green LED
ubhat 0:42863a11464a 142 */
ubhat 0:42863a11464a 143 void ToggleLED( eLedType led );
ubhat 0:42863a11464a 144
ubhat 0:42863a11464a 145 /*!
ubhat 0:42863a11464a 146 * \brief Control the State of the LED
ubhat 0:42863a11464a 147 *
ubhat 0:42863a11464a 148 * \param [IN] led Red, yellow or green LED
ubhat 0:42863a11464a 149 * \param [IN] state ON or OFF
ubhat 0:42863a11464a 150 */
ubhat 0:42863a11464a 151 void CtrlLED( eLedType led, uint8_t state );
ubhat 0:42863a11464a 152
ubhat 0:42863a11464a 153 void CheckOrientation( void );
ubhat 0:42863a11464a 154
ubhat 0:42863a11464a 155 #endif // __APPLICATION_H__