LMIC-node | One example to rule them all

Added: pinout diagrams for most supported boards.

See Pinout diagrams in README.md for more information.


LMIC-node v1.2.0

LMIC-node v1.2.0 has been released.

Release notes can be found here: LMIC-node v1.2.0 Release Notes

Added support for the following boards:

  • Raspberry Pi Pico
  • Teensy LC

For more information about what’s new and changed see the release notes.


LMIC-node v1.3.0

LMIC-node v1.3.0 has been released.

Release notes can be found here: LMIC-node v1.3.0 Release Notes


  • Subband selection for US915 and AU915 for OTAA (fixes issue for AU915).


  • Do not schedule uplinks while still joining.
    processWork() will be skipped when still joining (counter will not be read).
  • Incorrect DIO1 pin mapping (5 → 6) for Adafruit Feather M0 LoRa board.
  • AU915 joining fails because proper subband is not selected (OTAA).
  • LMIC_PRINTF_TO not working (properly) (at least on Windows) for boards with ARM based MCU.
  • LMIC_PRINTF_TO not working for boards using SerialUSB.

For more information about what’s new and changed see the release notes.


I welcome your feedback. Please share if you have your device(s) working
with LMIC-node and whether you use macOS, Linux or Windows.

Or discuss issues you run into that may need to be fixed in LMIC-node.
Issues can be reported in the LMIC-node repository on GitHub.

Easy and well working.
Tried on ESP32 Espressif DevKit v1 and ESP32 Wroom32 module
Easy to set and to use. The only needed adaptation is the pinout which depends on the used board.

Not clear what the max possible power is.
Looks to be 14dBm “only”

1 Like

Support has been added for the compact Adafruit QT Py board.

A picture of a working setup can be seen in The Workbench topic here

MCCI LoRaWAN LMIC library v4.0.0 has been released.

If the LMIC-node application is already cloned/installed onto your system and you want to use the latest LMIC library version, you can update the LMIC library in your LMIC-node project by running the PlatformIO command:

pio lib update

This will update all libraries in the project that were previously downloaded (based on lib_deps in platformio.ini). Without a manual lib update PlatformIO will keep using the previously downloaded libraries (which may not be the latest versions).

If a library was not previously downloaded, the latest version will be downloaded.

(PlatformIO downloads libraries separately for each board.)

Espressif8266 platform version 3.0.0 causes an issue in LMIC-node for the NodeMCU V2 (ESP8266) board. If you run into this problem, to fix just update to the latest LMIC-node version on Github.

In PlatformIO installed platforms (e.g. ESP32, STM32, SAMD, ESP8266) are not automatically updated. Updating a platform can be done from the PlatformIO IDE Home/Platforms/Update page or with PlatformIO command pio update. Latter will update all platforms at once.

Updating a platform normally does not cause issues. However, the new espressif8266 platform version 3.0.0 does cause an issue for the NodeMCU V2 (ESP8266) board for LMIC debugging (LMIC_PRINTF_TO). This manifests as compilation error "cookie_io_functions_t does not name a type". This has been fixed (i.e. support for espressif8266 v3.0.0 has been added) in the latest version of LMIC-node.

4 posts were split to a new topic: Looking for easier to program node

I added GPS functionality to the LMIC-node application. You can find my github repository here:
LMIC-node-gps-tracker, forked from lnlp/LMIC-node.

I did not add a decent readme file in the repository yet , but I did add a lot of comments in the code.


A decent README.md was already included with LMIC-node so you won’t have to write it from scratch. :wink:

The README.md is the first thing people will see on the repository home page.
At minimum it should be updated to reflect the name of your repository.

Requiring users to dive into the code first to find out if it provides the functionality they are looking for and if they can use it for their board and GPS module is not user friendly and time consuming. Some documentation will therefore be appreciated.

Adding the documentation in a separate file (e.g. GPS.md) will make it easier to sync with future LMIC-node updates.

Things that will be useful to document:

  • What functionality is added and/or changed in your code?
    What makes your repository different from LMIC-node?
  • Which GPS module(s) and which board(s) are supported by the added GPS code?
  • A description of added functionality and how people can use it.
  • With which GPS module and board was it tested?
  • Any known limitations.

(Don’t forget to also update the repository description aka ‘About’).

In a future update LMIC-node program documentation will be moved from README.md to a separate file. That will make it easier to update the README.md for repository forks.

I know, (and a very extensive one) but I did not have the time to complete a readme.
When writing the readme I will adopt your recommendations.

What do you mean by that? It is my first forked repository that I published on Github. (I have a lot to learn)

On the repository home page top-right select the settings icon:

capture 2021-08-19 14·40·07

You can then edit/update the description:

capture 2021-08-19 14·40·47

It will also be useful to add “GPS” as keyword (‘topic’). LMIC-node already has the maximum number of 20 topics defined so you will need to remove one of the existing topics first (I suggest to remove cmwx1zzabz).

The description (‘about’) and keywords (‘topics’) are used by search engines (including GitHub search) for finding relevant matches.

1 Like

Thank you for your extensive answer. I know now what to do.

Please specify (in this thread) which board and GPS module your added GPS code supports.

The code is tested on a TTGO T-Beam board v1.0 (with and without display) and a TTGO LoRa32 v2.1.6 with an NEO-6M gps module.
I think all other ESP32 boards in the boards directory equiped with a gps (module) will work if they support the tinygps++ library. You only have to change the TX en RX port definitions in platfomio.ini.

LOL - for various values of “only” - see one of the other threads where that is the exact issue for someone right now!

Hence the extreme importance of a basic readme, however terse, to highlight that with different board revisions comes different pin connections. Otherwise you’ll end up with lots of issues on your repro asking why it doesn’t work.

I know, I know. I’m on holyday now somewhere in Europe and there are a lot of other important things to do now :wink:


LMIC-node is currently listed
First in The Top 5 LoRaWAN LMIC Open Source Projects on GitHub.

See: https://awesomeopensource.com/projects/lmic/lorawan

And 10th place in The Top 60 Arduino Lorawan Open Source Projects on Github.


Well deserved - a comprehensive & detailed piece of work!