1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-28 23:29:45 +01:00
RIOT/examples/lorawan
Marian Buschsieweke 4b6ad3b99f
examples/lorawan: drop crazy STM32 hack
We cannot just decrement the reference counter of power modes without
any coordination. First, this will trigger an `assert()`ion on non
STM32 MCUs that have power modes that are not used (the ref count would
be decremented below zero). Second, there hopefully is a reason a
certain power mode is blocked, e.g. because a periph driver needs a
certain clock to function.

Likely the `periph_uart` driver on STM32 boards keeps power modes
blocked after TX is completed even when no RX callback is present, which
is the waste of power this hack tries to address. But that should be
addressed there.
2024-10-01 15:44:39 +02:00
..
tests-with-config examples: tests: move lorawan examples to tests-with-config 2021-01-25 21:10:06 +01:00
main.c examples/lorawan: drop crazy STM32 hack 2024-10-01 15:44:39 +02:00
Makefile examples/lorawan: use auto_init_loramac 2022-04-21 11:26:56 +02:00
Makefile.ci boards/nucleo-c031c6 initial add 2024-01-30 10:11:57 -05:00
README.md examples/lorawan: extend list of supported radios 2023-04-30 21:56:52 +02:00

LoRaWAN

Description

This application shows a basic LoRaWAN use-case with RIOT.

By using the real time clock and low-power capabilities of a board, this application also shows how to program a LoRaWAN Class A device using RIOT.

By default, the application uses the Over-The-Air Activation (OTAA) procedure.

Configuration

To join a LoRaWAN network using OTAA activation, edit the application Makefile and set your device information:

ACTIVATION_MODE ?= otaa
DEVEUI ?= 0000000000000000
APPEUI ?= 0000000000000000
APPKEY ?= 00000000000000000000000000000000

To join a LoRaWAN network using ABP activation, edit the application Makefile and set your device and LoRaWAN application information:

ACTIVATION_MODE ?= abp
DEVADDR ?= 00000000
NWKSKEY ?= 00000000000000000000000000000000
APPSKEY ?= 00000000000000000000000000000000
RX2_FREQ ?= 869525000
RX2_DR ?= 3

Note that rx2 frequency (RX2_FREQ) and datarate (RX2_DR) variables must be set explicitly at compile time when using ABP activation because they are supposed to be known in advance by the network and the device. In this example, the values used are compatible with TheThingsNetwork provider network. They might change depending on the network provider used.

Use the BOARD, DRIVER and LORA_REGION make variables to adapt the application to your hardware setup and region of use:

  • BOARD can be one of the nucleo-64 boards
  • DRIVER can be either sx1261, sx1262, sx1268, sx1276 or sx1272
  • LORA_REGION can be EU868, US915, etc (see LoRaWAN regional parameters for details).

The SEND_PERIOD_S variable can also be adapted to change the time period (in seconds) between each message sent by the device.

Usage

Simply build and flash the application for a ST B-L072Z-LRWAN1 board:

make flash term

ST Nucleo-64 can be used as-is with mbed LoRa shields: there's one based on the sx1276 radio and one based on the the sx1272 radio.

Automatic test

The automatic test replicates 11-lorawan release specs test:

It is recommended to test using iotlab-nodes. The default configuration is already set on the application Makefile.

Requirements

  • The tests assumes that there is a gateway in all DR distance to the device and the device was flashed with the correct keys.

  • To use iotlab it is required to have a valid account for the FIT IoT-LAB (registration there is open for everyone) and the iot-lab/cli-tools need to be installed.

  • iotlab uses TTN lorawan gateways, to run the test you will need to create an account add an application and register a device. For this test you need to take note of the Device EUI, Application EUI & Application Key for that device.

Usage

  1. flash device with appropriate keys and test

    $ DEVEUI= APPEUI= APPKEY= make -C examples/lorawan/ flash test

With iotlab

  1. setup the iotlab experiment:

    $ make -C examples/lorawan/ iotlab-exp

  2. flash device, set appropriate keys and test

    $ DEVEUI= APPEUI= APPKEY= IOTLAB_NODE=auto make -C examples/lorawan/ flash test

  3. stop the iotlab experiment:

    $ make -C examples/lorawan/ iotlab-stop

note: if you have multiple running experiments you will need to set IOTLAB_EXP_ID to the appropriate experiment, when using the iotlab-exp you will see a: Waiting that experiment 175694 gets in state Running. That number matches the experiment id you started.