Skip to content
Jan Janak edited this page Mar 26, 2022 · 3 revisions

LoRaWAN-MAC-in-C (LMIC) is a LoRaWAN stack implementation for embedded systems released by IBM Research Zurich in 2015. This implementation traces its roots to the very beginning of the LoRaWAN specification. Over the years, the library has been developed through numerous forks [1,2,3,4]. The implementation got eventually acquired by Semtech in 2018. Semtech ceased development in 2020, but the implementation lives on as an open source project called basicMAC. The stacks derived from this implementation do not seem to support LoRaWAN 1.1.

LoRaMac-node is an open source reference LoRaWAN node stack by Semtech. The stack has been designed for STM32 and Microchip/Atmel platforms and supports LoRaWAN 1.0 and 1.1 protocols. The version 4.6.0 supports LoRaWAN regional parameters RP2-1.0.1. The open firmware developed in this project includes the most recent version of LoRaMac-node.

I-CUBE-LRWAN [data brief, user manual] is an extension pack for STMicro's STM32Cube firmware development kit. The extension combines the STM32Cube platform with LoRaMac-node and portions of ARM Mbed. I-CUBE-LRWAN includes an example application for Type ABZ modules with an AT command interface. The AT interface is incompatible with the AT interface implemented in the proprietary Murata Modem firmware.

MKRWAN is a LoRaWAN library for Arduino-based projects. The library does not include a LoRaWAN stack. It communicates with a Type ABZ module on MKR WAN 1300 and 1310 extension boards over an AT command interface. The Github repository mkrwan1300-fw provides a LoRaWAN firmware for the Type ABZ module. The LoRaWAN code in the firmware is derived from I-CUBE-LRWAN.

Arduino LoRa is a low-level LoRa library. The library does not implement the LoRaWAN protocol used by most existing networks such as The Things Network. It provides Arduino applications with a means to broadcast LoRa packets to nearby LoRa devices without any additional upper network layers.

MCCI arduino-lorawan is an Arduino-style wrapper over arduino-lmic, one of the forks of the LMIC library. It is a wrapper designed to make it easier to work with the LMIC library from Arduino sketches.

LMIC-node is an example LoRaWAN application that can communicate with The Things Network. The application uses MCCI arduino-lmic. It demonstrates how to send uplinks and receive downlinks and supports a variety of embedded platforms including the Arduino.

ttn-esp32 is a LoRaWAN library for ESP32 platform. The library embeds the LMIC stack (more specifically, the MCCI fork) and provides a high-level api for working with The Things Network. It provides an AT command interface.

MCCI Arduino LoRaWAN Library (mcci-catena/arduino-lorawan) is a high-level Arduino-style wrapper over the MCCI arduino-lmic library. It provides high-level primitives for communication over The Things Network.

The Things Network Arduino Library (TheThingsNetwork/arduino-device-lib) is a high-level that allows Arduino devices to communicate over TTN. The library requires a Microchip RN2483 (EU433/EU868) or RN2903 (US915) module. It communicates with the module over an UART interface using Microchip's proprietary protocol (RN2483 command reference, RN2903 command reference).

CircuitPython TinyLoRa is a LoRaWAN implementation in MicroPython. It only supports TTNv2 and does not work with TTNv3. The uPyLoRaWAN project adapted the library for the ESP32, Raspberry Pi Pico, and M5Stack. The library can communicate with SX127x transceivers.

Arduino LoRaWAN library by Beelan (BeelanMX/Beelan-LoRaWAN) is yet another LoRaWAN stack implementation for the Arduino platform. The stack supports SX1272 and SX1276 transceivers. This implementation appears to be an original LoRaWAN stack.

SX126x-Arduino (beegee-tokyo/SX126x-Arduino) is another Arduino library for LoRaWAN communication using the newer SX126x family of LoRa transceivers. This library embeds portions of the LoRaMac-node library and only supports LoRaWAN 1.0.

Clone this wiki locally