Back

LoRaWAN

Loading views...

LoRaWAN

Overview

LoRaWAN is a Low Power Wide Area Network (LPWAN) protocol built on top of the LoRa physical layer. It defines MAC layer, network server architecture, device activation, and security for connecting IoT devices to cloud servers over kilometers.


1. Theory & Fundamentals

  • Built on LoRa PHY; adds MAC, security, and network protocol
  • Network: End nodes → Gateways → Network Server → Application Server
  • Device classes: A (TX only, 2 RX windows after TX), B (scheduled RX), C (continuous RX)
  • Activation: OTAA (Over-The-Air) or ABP (Activation By Personalization)
  • Security: AES-128; two session keys: NwkSKey (network) + AppSKey (application)
  • Frequency plans: EU868, US915, AU915, AS923, etc.
  • Adaptive Data Rate (ADR): Network optimizes SF and power per device

2. Frame / Packet Structure

LoRaWAN MAC Frame (uplink):
  MHDR(1B) | MACPayload | MIC(4B)
  MHDR: MType(3b) | RFU(3b) | Major(2b)
  MACPayload: FHDR | FPort | FRMPayload
  FHDR: DevAddr(4B) | FCtrl(1B) | FCnt(2B) | FOpts(0–15B)

MType values:
  000=Join Request, 001=Join Accept
  010=Unconfirmed Data Up, 011=Unconfirmed Data Down
  100=Confirmed Data Up, 101=Confirmed Data Down

Join Request: AppEUI(8B) | DevEUI(8B) | DevNonce(2B)
Join Accept: AppNonce(3B) | NetID(3B) | DevAddr(4B) | DLSettings | RxDelay | [CFList]

3. Protocol Mechanics

  • Class A: Device initiates; RX1 opens after TX (same channel, lower DR); RX2 on fixed channel/SF
  • OTAA: Device exchanges Join Request/Accept; generates session keys from AppKey
  • ABP: Keys pre-provisioned; no join procedure; simpler but less secure
  • Confirmed uplink: Network server ACKs; max 8 retransmissions
  • Frame counter: FCnt prevents replay attacks; rolls over causes re-join
  • Duty cycle: EU868 = 1% max; limits TX frequency per channel

4. Hardware Implementation

  • LoRaWAN modules: RAK4200, Murata CMWX1ZZABZ, RN2483 (Microchip)
  • Gateway: RAK7258, Dragino LPS8, Kerlink Wirnet
  • Network server: TTN (The Things Network), ChirpStack (open-source), AWS IoT Core
  • SX1276 + MCU: DIY node with LoRa PHY + LoRaWAN MAC library
  • Power: 3.3V; sleep current <1µA; TX burst 40–120mA

5. Register-Level / Configuration

// Arduino LMIC (LoRaWAN MAC in C) example
#include <lmic.h>
static const u1_t PROGMEM APPEUI[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
static const u1_t PROGMEM DEVEUI[8] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
static const u1_t PROGMEM APPKEY[16] = {0x2B,0x7E,...};

void do_send(osjob_t* j) {
    uint8_t payload[] = {0x01, temp_lsb, temp_msb};
    LMIC_setTxData2(1, payload, sizeof(payload), 0); // port 1, unconfirmed
}
void setup() {
    LMIC_init();
    LMIC_startJoining(); // OTAA join
}

6. Driver / Software Development

  • Initialize hardware peripheral or SoC block
  • Implement send/receive with interrupt or DMA
  • Handle errors: timeout, CRC, NAK, bus-off
  • Use circular buffers for RX data flow
  • Implement retry logic for reliability

7. Debugging & Testing

  • TTN Console / ChirpStack dashboard: Monitor join, uplinks, downlinks
  • LoRa packet sniffer: SX1276 in RX mode logs all packets on channel
  • Common issues: Wrong AppEUI byte order (LSB first); ADR disabled; duty cycle limit hit
  • RSSI < -120dBm: Too far from gateway or obstructions
  • FCnt mismatch: Device reset without re-join causes counter desync

8. Real-World Applications

  1. Smart agriculture (soil moisture over 5km farm)
  2. Smart metering (water, gas, electricity AMR)
  3. Asset tracking in wide-area logistics
  4. Environmental monitoring (air quality, flood sensors)
  5. Smart city parking and waste management

9. Advanced Topics & Edge Cases

  • LoRaWAN 1.1: Enhanced security, roaming support, Class B improvements
  • LoRa Cloud: Geolocation and device management by Semtech
  • FUOTA (Firmware Update Over The Air): OTA firmware via LoRaWAN
  • Relay mode (1.1): Battery-powered relay for coverage extension
  • Private LoRaWAN: On-premise network server for enterprise IoT

10. Standards & Variants

Class RX behavior Power Use case
A 2 windows after TX Ultra-low Sensors
B Scheduled slots Low Actuators
C Always listening High Powered devices

💡 Practical Examples

Ex 1: OTAA join + send temperature

LMIC_startJoining(); // Triggers join request
// On EV_JOINED: start sending
LMIC_setTxData2(1, &temp_byte, 1, 0);

Ex 2: Decode payload on TTN

Ex 3: Downlink command

TTN Console → Schedule downlink → Device receives in RX1/RX2 window.


🧪 Practice Questions

Beginner

  1. What is the difference between LoRa and LoRaWAN?
  2. What are the 3 LoRaWAN device classes?
  3. What does OTAA stand for?
  4. What two session keys does LoRaWAN use?
  5. What is The Things Network?

Intermediate

  1. Explain LoRaWAN OTAA join procedure step by step.
  2. How does Adaptive Data Rate (ADR) work?
  3. What is the EU868 duty cycle limit and why does it exist?
  4. Implement LoRaWAN payload encoder/decoder for TTN.
  5. How does LoRaWAN handle frame counter rollover?

Advanced

  1. Design a LoRaWAN network for 10,000 agricultural sensors.
  2. Implement FUOTA (firmware update) for LoRaWAN Class C device.
  3. Build a private ChirpStack LoRaWAN network server.
  4. Optimize LoRaWAN for maximum battery life with Class A.
  5. Implement LoRaWAN 1.1 security with separate NwkSKey variants.

Projects

  1. Smart Sensor Node: OTAA join, send sensor data, receive downlink commands.
  2. Gateway: RAK7258 + ChirpStack + Node-RED + InfluxDB stack.
  3. Range Test: Walk with node, log RSSI/SNR vs GPS position.

Checklist

  • [ ] Explain LoRaWAN stack layers
  • [ ] Perform OTAA join with real LoRaWAN network
  • [ ] Send and receive confirmed/unconfirmed packets
  • [ ] Configure ADR
  • [ ] Implement payload encoder/decoder
  • [ ] Set up private network server (ChirpStack)
  • [ ] Monitor with TTN or ChirpStack console
  • [ ] Handle duty cycle limits
  • [ ] Implement Class A power optimization
  • [ ] Integrate with cloud via MQTT/HTTP