# Overview of LoRaWAN Libraries \[HowTo\]

**URL:** <https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692>\
**Category:** End Devices (Nodes)\
**Created:** [April 5, 2019, 2:19pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692 "2019-04-05T14:19:54Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![bluejedi](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/bluejedi/32/44639_2.png) [@bluejedi](https://www.thethingsnetwork.org/forum/u/bluejedi)\
**Post date:** [April 5, 2019, 2:19pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/1 "2019-04-05T14:19:54Z")

</div>

# Overview of existing LoRaWAN libraries

For users by users.

* * *

⚠ **Do not use this topic for questions and discussions**

**For questions and discussions use the following topic:  
 [Questions about LoRaWAN Libraries](https://www.thethingsnetwork.org/forum/t/questions-about-lorawan-libraries/47182)**

* * *

### ➡ Please help make the list of libraries in this overview complete:

If you know an existing LoRaWAN library that is not yet listed in this topic then PLEASE add a post with information about the library to this topic.

**Some guidelines for this thread (topic):**

When adding _variations_ (see below) of an already existing library, please only add it to the list if the library was modified for a **well documented reason** (e.g. to make it run better on a certain microcontroller family like ESP32 or STM32) and that it might be of interest to a wider public.  
But do **not** add any personal copies (e.g. forks you can find on github) that lack a clear description of changes (if any) and (even while public) are only meant for personal use.

**For any LoRaWAN library please specify the following information:**

Below the table with library properties please add a clear description of the library (more verbose than for the ‘Description’ property) and try to make clear what makes this library different from its parent, why it is different and/or why it is better. _(But don’t make it a ‘search the differences’ exercise for the reader.)_

| Property | Value |
| --- | --- |
| Name: | **\<official library name\>** |
| | (_see [PlatformIO Libraries registry](https://platformio.org/lib)_) |
| Version: | \<library version\>\*\* (at the time of adding the post) |
| Frameworks: | **\<supported development frameworks\>** |
| | _(see [PlatformIO Frameworks registry](https://platformio.org/frameworks)_) |
| Platforms: | \<supported microcontroller families\> |
| | _(see [PlatformIO Development Platforms registry](https://platformio.org/platforms)_) |
| Description: | \<description\> _(called sentence in library.properties)_ |
| URL: | \<source/repository URL\>\*\* |
| Type: | \<Port, Variaton, New or dash(-) if unknown\> |
| | _(Port is substantial, Variation contains only minimal changes)_ |
| BaseType: | **\<LMIC or LoRaMac-node\>** |
| Parent Name: | \<parent’s official library name\> _(dash(-) if not appropriate or unknown)_ |
| Parent URL: | \<parent’s repository URL\> _(dash(-) if not appropriate or unknown)_ |

Many of above library properties can be found in property files like library.properties or .library.json.

PlatformIO has already defined names for Platforms and Frameworks (many supported). It is practical to use the names already defined and maintained by PlatformIO.  
_Note: use only lower case and replace spaces by underscores, which is how PlatformIO uses it._

For an example see the next post.

* * *

**Some background:**

There exist at least two major LoRaWAN library implementations that can be used for for end nodes:

1. IBM’s original LMiC _(formerly ‘LoRa MAC in C’)_ implementation.
2. Semtech’s [LoRaMac-node](https://github.com/Lora-net/LoRaMac-node) reference implementation.

I call LMiC and LoRaMac-node _ **base types** _.

Both base types have been ported to different platforms (microcontroller families) e.g. AVR, SAM, STM32, nRF5x, ESP32 and different development frameworks e.g. Arduino, ARM Mbed etc.

The Arduino framework is popular within maker and hobbyist communities. IBM’s LMiC has been ported to the Arduino framework and is commonly referred to as Arduino LMIC. The first Arduino LMIC implementation was [LMIC-Arduino](https://github.com/matthijskooijman/arduino-lmic) which has long served as the reference implementation but it is no longer maintained. The new reference implementation is [MCCI LoRaWAN LMIC library](https://github.com/mcci-catena/arduino-lmic) which is improved and actively maintained ([see below](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-lmic-loramac-node-and-their-variations-howto/24692/4)).

The Arduino framework initially was available only for the AVR family of microcontrollers, but nowadays there are Arduino framework implementations (called Arduino Cores) for many microcontroller families like AVR, SAMD, STM32, ESP32, ESP8266 and nRF5x.  
While the Arduino LMIC reference implementations can be used with multiple microcontroller families, there also exist modified versions that are specially adapted for a certain microcontroller. I call these _ **variations** _ (or _decendants_) of Arduino LMIC and call Arduino LMIC the _ **parent** _ of the decendant.

Many libraries have an official name that is different from the name of their (GitHub) repository. The official library name is important for development tools like PlatformIO which can automatically download libraries if their official name is specified in the platformio.ini project configuration file.

_Update: Topic title has been updated (shortened)._

---

<div class="post-metadata">

**Author:** ![bluejedi](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/bluejedi/32/44639_2.png) [@bluejedi](https://www.thethingsnetwork.org/forum/u/bluejedi)\
**Post date:** [April 5, 2019, 2:20pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/2 "2019-04-05T14:20:06Z")

</div>

[This library is also known as: **Classic LMIC**](https://www.thethingsnetwork.org/forum/t/arduino-lmic-library-naming-classic-lmic-and-mcci-lmic-howto/40592).  
It is preferred to use this name on the forum.

On 3 October 2020 this library was officially [DEPRECATED](https://www.thethingsnetwork.org/forum/t/retiring-matthijskooijman-version-of-lmic/40302). It will no longer be maintained. Use MCCI LMIC instead (see further below).

At the same time the following changes were applied:

- Version number was bumped up to v1.5.1 to comply with [semantic versioning](https://semver.org/).
- Official _library name_ was reverted to “IBM LMIC framework”.  
In december 2017 the library name was changed to “LMIC-Arduino” but it showed that the Arduino IDE library manager was unable to properly handle this (preventing it to update the library). This has now been reverted.
- No functional changes were applied to the code.

| [DEPRECATED] | |
| --- | --- |
| Name: | **IBM LMIC framework** |
| Version: | 1.5.1 |
| Frameworks: | **arduino** |
| Platforms: | atmelavr, atmelsam, espressif8266, intel\_arc32, microchippic32, nordicnrf51, teensy, timsp430 |
| Description: | Arduino port of the LMIC (LoraWAN-in-C, formerly LoraMAC-in-C) framework provided by IBM. |
| URL: | [GitHub - matthijskooijman/arduino-lmic: This library is deprecated, see the README for alternatives.](https://github.com/matthijskooijman/arduino-lmic) |
| Type: | Port |
| BaseType: | **LMIC** |
| Parent Name: | IBM LMiC |
| Parent URL: | - |

```auto

```

This is IBM’s LMiC library ported to Arduino. It previously was the LMIC reference implementation for Arduino but is no longer maintained since quite some time.

The official library name can be found in file library.properties. The name of the GitHub repository is “arduino-lmic” which unfortunately has little resemblance with the library name “IBM LMIC framework”.

The default band plan setting for this library is EU 868 MHz.

It is advised to use the newer [MCCI LMIC](https://github.com/mcci-catena/arduino-lmic) library (“MCCI LoRaWAN LMIC library”) instead, which has improvements, supports more regions and is actively maintained (it is listed [further below)](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-lmic-loramac-node-and-their-variations/24692/4). Do read its [README.md](https://github.com/mcci-catena/arduino-lmic/blob/master/README.md) first.  
Like _Classic LMIC_, _MCCI LMIC_ uses the same “arduino-lmic” GitHub repository name which can be confusing.

Use of _Classic LMIC_ in some cases may still be prefered for memory constrainted 8-bit MCU’s like AVR ATmega328 and ATmega32u4 (used e.g. on Arduino Pro Mini and LoRa32u4,).

**This library is not suitable for use with TTS CE V3 (aka TTN V3) because it lacks LoRaWAN compliancy required by TTS CE V3.**

---

<div class="post-metadata">

**Author:** ![jreiss](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/jreiss/32/46529_2.png) [@jreiss](https://www.thethingsnetwork.org/forum/u/jreiss)\
**Post date:** [April 5, 2019, 2:32pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/3 "2019-04-05T14:32:54Z")

</div>

| | |
| --- | --- |
| Names: | **libmDot** , **libxDot** |
| Version: | 3.1.0 |
| Frameworks: | **mbed** |
| Platforms: | mDot and xDot |
| Description: | Libraries for application development on Multitech Dot hardware |
| URLs: | [https://github.com/MultiTechSystems/libmDot-dev-mbed5](https://github.com/MultiTechSystems/libmDot-dev-mbed5) |
| | [https://github.com/MultiTechSystems/libxDot-dev-mbed5](https://github.com/MultiTechSystems/libxDot-dev-mbed5) |
| Type: | - |
| BaseType: | Proprietary (Closed source) |
| Parent Name: | - |
| Parent URL: | - |

---

<div class="post-metadata">

**Author:** ![blem](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/blem/32/38998_2.png) [@blem](https://www.thethingsnetwork.org/forum/u/blem)\
**Post date:** [April 5, 2019, 5:44pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/4 "2019-04-05T17:44:59Z")

</div>

[This library is also known as: **MCCI LMIC**](https://www.thethingsnetwork.org/forum/t/arduino-lmic-library-naming-classic-lmic-and-mcci-lmic-howto/40592)  
It is preferred to use this name on the forum.

| | |
| --- | --- |
| Name: | **MCCI LoRaWAN LMIC library** |
| Version: | 3.2.0 |
| Frameworks: | **arduino** |
| Platforms: | atmelavr, atmelsam, espressif32, espressif8266, intel\_arc32, microchippic32, nordicnrf51, nordicnrf52, stm32, stm8, teensy, timsp430 |
| Description: | Arduino port of the LMIC (LoraWAN-MAC-in-C) framework provided by IBM. |
| URL: | [https://github.com/mcci-catena/arduino-lmic](https://github.com/mcci-catena/arduino-lmic) |
| Type: | Port |
| BaseType: | **LMIC** |
| ParentName: | IBM LMIC framework |
| Parent URL: | [https://github.com/things-nyc/arduino-lmic](https://github.com/things-nyc/arduino-lmic) |

```auto

```

This library at [https://github.com/mcci-catena/arduino-lmic](https://github.com/mcci-catena/arduino-lmic) is now the reference implementation of LMiC.

The LMiC library at [https://github.com/matthijskooijman/arduino-lmic](https://github.com/matthijskooijman/arduino-lmic) hasn’t been updated for over a year and the last real code change is even older. In the mean time, Terry Moore from MCCI has been working on a fork of the IBM code and is making incredible progress at fixing many old issues and getting an official certification for the code.

In contrast to its [predecessor](https://github.com/matthijskooijman/arduino-lmic) the default band plan setting for this library is US 915 MHz.

---

<div class="post-metadata">

**Author:** ![blem](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/blem/32/38998_2.png) [@blem](https://www.thethingsnetwork.org/forum/u/blem)\
**Post date:** [April 5, 2019, 7:12pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/7 "2019-04-05T19:12:57Z")

</div>

| | |
| --- | --- |
| Name: | **ttn-esp32** |
| Version: | 2.2.2 |
| Frameworks: | **ESP-IDF** |
| Platforms: | espidf |
| Description: | The Things Network device library for ESP-IDF (ESP32) supporting devices with Semtech SX127x chips |
| URL: | [https://github.com/manuelbl/ttn-esp32](https://github.com/manuelbl/ttn-esp32) |
| Type: | Port |
| BaseType: | **LMIC** |
| Parent Name: | MCCI LoRaWAN LMIC library |
| Parent URL: | [https://github.com/mcci-catena/arduino-lmic](https://github.com/mcci-catena/arduino-lmic) |

```auto

```

For the **ESP-IDF framework** (non-Arduino ESP32 framework):

---

<div class="post-metadata">

**Author:** ![blem](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/blem/32/38998_2.png) [@blem](https://www.thethingsnetwork.org/forum/u/blem)\
**Post date:** [April 21, 2019, 8:22pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/8 "2019-04-21T20:22:37Z")

</div>

Version 2.3.2 has been released. It adds support for CMake and PlatformIO, and it integrates the latest LMIC code by MCCI Catena (v2.3.2).

---

<div class="post-metadata">

**Author:** ![bluejedi](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/bluejedi/32/44639_2.png) [@bluejedi](https://www.thethingsnetwork.org/forum/u/bluejedi)\
**Post date:** [August 29, 2019, 1:45pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/11 "2019-08-29T13:45:37Z")

</div>

| | |
| --- | --- |
| Name: | **ESP32\_LoRaWAN** |
| Version: | 2.0 |
| Frameworks: | **arduino** |
| Platforms: | espressif32 |
| Description: | LoRaWAN library for ESP32 + LoRa boards made by heltec |
| URL: | [GitHub - HelTecAutomation/ESP32\_LoRaWAN: Transplanted from Semtech LoRaWAN(https://github.com/Lora-net/LoRaMac-node) protocol to "ESP32 + Arduino" platform. Use RTC, support deep sleep, only working with ESP32 + LoRa boards made by HelTec Automation(TM). Need a unique license to use it.](https://github.com/HelTecAutomation/ESP32_LoRaWAN) |
| Type: | Port |
| BaseType: | **LoRaMac-node** |
| Parent Name: | LoRaMac-node |
| Parent URL: | [GitHub - Lora-net/LoRaMac-node: Reference implementation and documentation of a LoRa network node.](https://github.com/Lora-net/LoRaMac-node) |

```auto

```

This is a port of Semtech’s LoRaMac-node LoRaWAN library for the ESP32.  
It can be used for Heltec ESP32 LoRa products only.

🚩 Partially propriatary. Some essential parts are obfuscated (compiled to assembly).

> A unique license relate to Chip ID is needed, you can check your license here: [http://www.heltec.cn/search/](http://www.heltec.cn/search/)

---

<div class="post-metadata">

**Author:** ![cjhdev](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/cjhdev/32/35697_2.png) [@cjhdev](https://www.thethingsnetwork.org/forum/u/cjhdev)\
**Post date:** [August 29, 2019, 2:29pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/12 "2019-08-29T14:29:00Z")

</div>

| | |
| --- | --- |
| Name: | **lora\_device\_lib** |
| Version: | 0.1.5 |
| Frameworks: | **none, arduino** |
| Platforms: | atmelavr |
| Description: | An experimental LoRaWAN device implementation |
| URL: | [https://github.com/cjhdev/lora\_device\_lib](https://github.com/cjhdev/lora_device_lib) |
| Type: | **New** |
| BaseType: | lora\_device\_lib |
| Parent Name: | - |
| Parent URL: | - |

```auto

```

lora\_device\_lib (ldl) is an experimental LoRaWAN implementation. It is not derived from any other libraries.

- class A only
- OTAA mode only
- LoRa modulation only
- supports ADR and network configurable parameters
- supports multiple regions
- supports SX1272 and SX1276 radios
- has [API documentation](https://cjhdev.github.io/lora_device_lib_api/)
- has an [Arduino wrapper](https://github.com/cjhdev/lora_device_lib/tree/master/bindings/arduino/output/arduino_ldl) for avr types

Generally speaking:

- It has similar memory requirements to LMIC but fewer features
- It has not been conformance tested
- It is designed to be managed by the network rather than the application
- It is unproven

---

<div class="post-metadata">

**Author:** ![bluejedi](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/bluejedi/32/44639_2.png) [@bluejedi](https://www.thethingsnetwork.org/forum/u/bluejedi)\
**Post date:** [April 28, 2021, 7:52am UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/14 "2021-04-28T07:52:05Z")

</div>

27 posts were merged into an existing topic: [Questions about LoRaWAN Libraries](https://www.thethingsnetwork.org/t/questions-about-lorawan-libraries/47182/4)

---

<div class="post-metadata">

**Author:** ![arjanvanb](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/arjanvanb/32/46626_2.png) [@arjanvanb](https://www.thethingsnetwork.org/forum/u/arjanvanb)\
**Post date:** [November 23, 2019, 9:37am UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/21 "2019-11-23T09:37:35Z")

</div>

| | |
| --- | --- |
| Name: | **Basic MAC** |
| Version: | 2.x |
| Frameworks: | gcc-arm-embedded |
| Platforms: | The reference hardware platform is the [B-L072Z-LRWAN1 STM32 LoRa Discovery kit](https://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html) |
| Description: | A portable implementation of LoRaWAN in the C programming language |
| URL: | [GitHub - lorabasics/basicmac: LoRa Basics™ MAC · GitHub](https://github.com/lorabasics/basicmac) |
| Type: | Port |
| BaseType: | **LMIC** |
| Parent Name: | IBM LMiC |
| Parent URL: | - |

```auto

```

From the creators of Basic Station that powers the TTIG gateway, Basic MAC is a portable implementation of the LoRa Alliance’s LoRaWAN specification in the C programming language. It is a fork of IBM’s LMiC library, and supports multiple regions, which are selectable at compile and/or run time. It can handle Class A, Class B, and Class C devices.

#### Documentation

The full documentation is available at [https://doc.sm.tc/mac](https://doc.sm.tc/mac).

And promising: @matthijskooijman [might be picking up work for an Arduino port](https://github.com/lorabasics/basicmac/issues/14#issuecomment-553806986):

> I’ve found [@LacunaSpace](https://github.com/LacunaSpace) willing to sponsor work on a BasicMac port for Arduino. I’ve got a basic version working somewhat […]

---

<div class="post-metadata">

**Author:** ![cjhdev](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/cjhdev/32/35697_2.png) [@cjhdev](https://www.thethingsnetwork.org/forum/u/cjhdev)\
**Post date:** [November 25, 2019, 11:15pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/22 "2019-11-25T23:15:49Z")

</div>

| | |
| --- | --- |
| Name: | **lora\_device\_lib** |
| Version: | 0.2.1 |
| Frameworks: | none, arduino |
| Platforms: | any, atmelavr |
| Description: | An experimental LoRaWAN device implementation |
| URL: | [https://github.com/cjhdev/lora\_device\_lib](https://github.com/cjhdev/lora_device_lib) |
| Type: | New |
| BaseType: | lora\_device\_lib |
| Parent Name: | - |
| Parent URL: | - |

```auto

```

Now at version 0.2.1.

Changes since 0.1.5:

- LoRaWAN 1.1 support\*
- Improved documentation (including a porting guide)
- Deferred duty cycle feature for redundant unconfirmed data
- Improved key handling (security module abstraction)
- New MAC commands
  - DeviceTimeReq/Ans
  - ADRParamSetupReq/Ans

\*328P Arduino wrapper limited to LoRaWAN 1.0 for simplicity.

---

<div class="post-metadata">

**Author:** ![friotte](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/friotte/32/35697_2.png) [@friotte](https://www.thethingsnetwork.org/forum/u/friotte)\
**Post date:** [February 7, 2020, 3:05pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/24 "2020-02-07T15:05:06Z")

</div>

| Name: | **[TheThingsNetwork\_esp32](https://github.com/rgot-org/TheThingsNetwork_esp32)** |
| --- | --- |
| Version: | 0.1.1 |
| Frameworks: | none, arduino |
| Platforms: | esp32 |
| Description: | very similar with TheThingsNetwork/arduino-device-lib. This made lmic very easy to use. |
| URL: | [GitHub - rgot-org/TheThingsNetwork\_esp32](https://github.com/rgot-org/TheThingsNetwork_esp32) |
| Type: | New |
| BaseType: | LMIC |
| Parent Name: | - |
| Parent URL: | - |

```auto
The library recognizes automatically the heltec boards
- Wifi lora 32 V1 & V2
- Wireless stick

```

---

<div class="post-metadata">

**Author:** ![ricaun](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/ricaun/32/37447_2.png) [@ricaun](https://www.thethingsnetwork.org/forum/u/ricaun)\
**Post date:** [April 2, 2020, 2:20pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/25 "2020-04-02T14:20:57Z")

</div>

| Name: | **SimpleLMIC** |
| --- | --- |
| Version: | 1.0.2 |
| Frameworks: | **arduino** |
| Platforms: | atmelavr, atmelsam, espressif32, espressif8266, intel\_arc32, microchippic32, nordicnrf51, nordicnrf52, stm32, stm8, teensy, timsp430 |
| Description: | SimpleLMIC uses the MCCI LoRaWAN LMIC library behind the scene and makes Arduino-friendly |
| URL: | [https://github.com/ricaun/SimpleLMIC](https://github.com/ricaun/SimpleLMIC) |
| Type: | Port |
| BaseType: | **LMIC** |
| ParentName: | MCCI LoRaWAN LMIC library |
| Parent URL: | [https://github.com/mcci-catena/arduino-lmic](https://github.com/mcci-catena/arduino-lmic) |

```auto

```

This library uses the [arduino-lmic](https://github.com/mcci-catena/arduino-lmic) and makes it more user friendly and ttn friendly using the key pattern from the ttn console.

Check the example: [SimpleLMIC\_otaa](https://github.com/ricaun/SimpleLMIC/blob/master/examples/SimpleLMIC_otaa/SimpleLMIC_otaa.ino)

---

<div class="post-metadata">

**Author:** ![SamH](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/samh/32/35697_2.png) [@SamH](https://www.thethingsnetwork.org/forum/u/SamH)\
**Post date:** [June 16, 2020, 8:30am UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/26 "2020-06-16T08:30:58Z")

</div>

**[DEPRECATED]**

| | |
| --- | --- |
| Name: | **TinyLoRa** |
| Version: | 1.3.0 |
| Frameworks: | **arduino** |
| Platforms: | atmelavr, atmelsam, espressif32, espressif8266, gd32v, infineonxmc, intel\_arc32, kendryte210, microchippic32, nordicnrf51, nordicnrf52, ststm32, ststm8, teensy, timsp430 |
| Description: | Library for communicating with TTN using a Hope RF RFM95/96/97/98(W) LoRa Transceiver Module. Library provided by Adafruit. |
| URL: | [GitHub - adafruit/TinyLoRa: LoRaWAN Library](https://github.com/adafruit/TinyLoRa) |
| Type: | Port |
| BaseType: | - |
| Parent Name: | - |
| Parent URL: | - |

- for Hope RF RFM95/96/97/98(W) LoRa Transceiver Module.
- ABP mode only
- Does not support downlinks

  

* * *

⚠ Note that this library which was written by Adafruit is **NOT LoRaWAN compliant** because it cannot handle downlinks.  
It is therefore unable to handle MAC commands from the network which are sent via downlinks.

This library shall not be used with ABP on TTN V3 (TTS CE V3) because it cannot handle MAC commands which will cause a downlink for every uplink.

TinyLora is also used by Adafruit in their ‘LoRaWAN support’ for MicroPython. This means that it also does not support downlinks and is unable to handle MAC commands resulting in the exact same problems as TinyLora. **Adafruit’s ‘LoRaWAN support’ for MicroPython is therefore also NOT LoRaWAN compliant!**

* * *

---

<div class="post-metadata">

**Author:** ![grazy](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/grazy/32/45572_2.png) [@grazy](https://www.thethingsnetwork.org/forum/u/grazy)\
**Post date:** [November 1, 2020, 2:37pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/29 "2020-11-01T14:37:11Z")

</div>

| | |
| --- | --- |
| Name: | **ngraziano/LMICPP-Arduino** |
| Version: | 2.1.2 |
| Frameworks: | **arduino** |
| Platforms: | Atmel AVR,ST STM32,Espressif 32 |
| Description: | Modified Arduino port of the LMIC framework, changed to C++ format |
| URL: | [https://github.com/ngraziano/LMICPP-Arduino](https://github.com/ngraziano/LMICPP-Arduino) |
| Type: | Port |
| BaseType: | **LMIC** |
| Parent Name: | Classic LMIC |
| Parent URL: | [https://github.com/matthijskooijman/arduino-lmic](https://github.com/matthijskooijman/arduino-lmic) |

Main modifications:

- Code in C++ style (class inheritance for different radio or region instead of `#define`)
- Support SX1262 and SX1276
- Class A only and no FSK
- Deep sleep friendly (method to save state and get authorized sleep duration )

The aim is to keep it as compliant as possible while being able to use it in ATmega328P.  
It is tested on ATmega328P (SX1262 and SX 1276), ESP32, RAK811 on EU868.

---

<div class="post-metadata">

**Author:** ![bluejedi](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/bluejedi/32/44639_2.png) [@bluejedi](https://www.thethingsnetwork.org/forum/u/bluejedi)\
**Post date:** [November 1, 2020, 3:53pm UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/30 "2020-11-01T15:53:09Z")

</div>

A post was split to a new topic: [LMICPP-Arduino - LMIC library with SX1262 support](https://www.thethingsnetwork.org/forum/t/lmicpp-arduino-lmic-library-with-sx1262-support/41018)

---

<div class="post-metadata">

**Author:** ![bluejedi](https://www.thethingsnetwork.org/forum/user_avatar/www.thethingsnetwork.org/bluejedi/32/44639_2.png) [@bluejedi](https://www.thethingsnetwork.org/forum/u/bluejedi)\
**Post date:** [June 3, 2021, 8:51am UTC](https://www.thethingsnetwork.org/forum/t/overview-of-lorawan-libraries-howto/24692/31 "2021-06-03T08:51:36Z")

</div>

### MCCI LMIC v.4.0.0 released

[MCCI LoRaWAN LMIC library](https://github.com/mcci-catena/arduino-lmic) v4.0.0 was released yesterday.

Release notes can be found here: [MCCI LMIC v4.0.0 Release Notes](https://github.com/mcci-catena/arduino-lmic/releases/tag/v4.0.0)
