This package contains the frameworks to enable a LoRaWAN® gateway that can be run on STM32MP1 Series with a local server or TheThingsNetwork.
This package consists of an OpenEmbedded meta layer, named meta-st-stm32mpu-app-lorawan, that must be added on top of the STM32MP1 Distribution Package. It brings a complete, consistent, easy-to-build and install LoRaWAN gateway for STM32MP1 Series.
The meta layer contains the frameworks, tools and applications to run the LoRaWAN gateway. Various images are available for different use cases such as single Arm® Cortex®-A7 core, dual Arm® Cortex®-A7 and -M4 cores, and the possibility to choose between an Ethernet or a Wi-Fi connection.
1. Hardware requirements[edit source]
The LoRaWAN concentrator RAK831
The converter board
This bundle enables to start with all the required hardware components (pick your geographic area).
You can now assemble the modules on the board.
This is how it should look like:
2. Software prerequisites[edit source]
Install the STM32MP1 Distribution Package, but do not initialize the OpenEmbedded environment (sourcing the envsetup.sh) before having installed the meta-st-stm32mpu-app-lorawan meta layer (see next chapter).
3. Installing the meta layer[edit source]
- First, clone the git repositories to <Distribution Package installation directory>/layers/meta-st.
If you have a Linux® Virtual Machine, modify your Virtual Machine administrator username to match your Gerrit account. This way you can generate the ssh-rsa key. Your Gerrit username is in the id_rsa and id_rsa.pub keys.
To do so, change the username of the session. Proceed as follows:
1.If you have only one user on the Virtual Machine, create a new one to be allowed to modify the administrator user:
sudo adduser temporary
Then set the password
2. Allow the temporary user to run sudo by adding the user to sudo group:
sudo adduser temporary sudo
3. Log out with the command exit, and log in again as temporary user.
4. Change your username:
sudo usermod -l newUsername oldUsername
… and home-folder name
sudo usermod -d /home/newHomeDir -m newUsername
5. Log out, go back to administrator user, and delete the temporary user:
sudo deluser temporary sudo rm -r /home/temporary
Then generate a new ssh-rsa key here, add it to your Gerrit account and run the following commands:
cd <Distribution Package installation directory>/layers/meta-st git clone https://github.com/STMicroelectronics/meta-st-stm32mpu-app-lorawan -b thud
4. Building the software image[edit source]
First set up the LoRaWAN gateway build environment:
cd <Distribution Package installation directory>
Different OpenSTLinux expansion packages are available to target different use cases. The following commands need to be executed in the build environment.
You can choose between two different machines:
- stm32mp1-lorawan-a7 to use only the Arm Cortex-A7 core for the whole application process:
DISTRO=openstlinux-weston MACHINE=stm32mp1-lorawan-a7 source layers/meta-st/scripts/envsetup.sh bitbake st-image-lorawan
- stm32mp1-lorawan-m4 to use both the Arm Cortex-A7 and Cortex-M4 cores, the Arm Cortex-A7 managing the communications with TheThingsNetwork server and the Arm Cortex-M4 the real-time communications with the concentrator:
DISTRO=openstlinux-weston MACHINE=stm32mp1-lorawan-m4 source layers/meta-st/scripts/envsetup.sh bitbake st-image-lorawan
5. Flash the built image[edit source]
Follow this link to know how to flash the built image.
6. Launching the LoRaWAN gateway software[edit source]
- Power the board
- To connect to the board and run commands, use SSH over USB. Connect a USB/micro-USB cable between the Windows machine and the ST-LINK port.
- Then launch Tera Term (you can download here), and start a serial communication with a baud rate of 115200. Restart the board to be able to access to the command line.
- Depending on how you want to connect your board to the internet
- Ethernet connection
- Connect the ethernet cable
cd /usr/local/lorawan-gateway/
./LoRaWAN_gateway_launcher.sh ethernet
- Wifi connection
- Do not connect the ethernet cable
cd /usr/local/lorawan-gateway/
./LoRaWAN_gateway_launcher.sh wifi
- During the launcher script execution, enter your preferred server and up and down ports when it is requested.
- Important: copy your EUI before restarting the gateway.
All these information can be found or changed manually in the global_conf.json and local_conf.json files located in /usr/local/lorawan-gateway/ on the board.
Your gateway reboots and after a short time, you will be able to receive or transmit information through LoRaWAN.
7. Source code of the firmware running on the Arm Cortex-M4 core[edit source]
To access or modify the code of the firmware running on the Arm Cortex-M4, proceed as follows:
cd <working directory> repo init -u https://github.com/STMicroelectronics/STM32MP1_LoRaWAN-manifests -b refs/tags/STM32MP15-Ecosystem-v1.2.0 -m default.xml repo sync
8. LoRaWAN node[edit source]
This chapter provides an example of how to create a test node. It is important to note that you can choose the way the Device EUI, address, network session key and application session key are configured:
- either by defining them on your own in the Commissioning.h file of your code and copying the fields during the registration of the node on TheThingsNetwork or the local server,
- or by letting TheThingsNetwork or the local server define them randomly during the registration of the node, and then store them in the Commissioning.h file of your code before compiling it.
Refer to test device for an example of test device creation. Make sure that your end-node application duty cycle is compliant with the government regulations defined in [1]. The end-note application described in the present example is regulated so that it can send a new LoRaWAN message at a minimum period of 3 minutes with this low amount of data. To lengthen the delay between two dispatches, change the APP_TX_DUTYCYCLE variable.
9. LoRaWAN server[edit source]
You can choose between two different types of server. The following instructions show how to use them.
9.1. How to proceed on TheThingsNetwork[edit source]
Log in or create an account on https://www.thethingsnetwork.org:
- Go into your CONSOLE.
- Click GATEWAYS.
- Click register gateway.
- Check I'm using the legacy packet forwarder and enter the EUI you previously copied in your EUI. If it is not available, create one and change it in the global_conf.json and local_conf.json files in /usr/local/lorawan-gateway/, then reboot your board.
- Enter a description of the gateway: it corresponds to the name you can see on the map of the site.
- Select your Frequency Plan.
- Select your Router (for Europe choose ttn-router-eu).
- You can place your gateway on the map by clicking it or by directly entering its coordinates.
- Indicate whether you are using an indoor or outdoor antenna.
- Not mandatory: for your application devices, you can use cayenne. This framework stores the data and you can easily visualize them.
9.2. How to proceed with the LoRaWAN local server[edit source]
9.2.1. Configuring the server[edit source]
A local LoRaWAN server is available natively with this layer.
First start postgresql in order to use psql
sudo -i -u postgres initdb -D /var/lib/postgresql/data pg_ctl -D /var/lib/postgresql/data -l logfile start
Then create all the roles and databases required for the application:
psql create role loraserver_as with login password '<PASSWORD>'; create role loraserver_ns with login password '<PASSWORD>';
create database loraserver_as with owner loraserver_as; create database loraserver_ns with owner loraserver_ns; \c loraserver_as create extension pg_trgm; create extension hstore; \q logout cp /etc/loraserver/config/eu868.toml /etc/loraserver/loraserver.toml
You can now launch the different parts of this local LoRaWAN server:
sudo systemctl enable lora-gateway-bridge sudo systemctl start lora-gateway-bridge sudo systemctl enable loraserver sudo systemctl start loraserver sudo systemctl enable lora-app-server sudo systemctl start lora-app-server
Your Local LoRaWAN is now running.
9.2.2. Configuring the lora-app-server[edit source]
To access your application site through a web browser with a computer on the same network:
ifconfig
The line above enables to know the IP address.
Then access the application web site IP_address:8080. By default the login and password are admin.
On the application site:
- Go to Network-servers, click ADD and then enter localhost:8000 for the name and the server. Click ADD NETWORK-SERVER.
- Go to Service-profiles, click CREATE. Choose a name, take the localhost:8000 server. Select Add gateway meta-data. All the rest is empty. Click CREATE SERVICE-PROFILE.
- Go to Device-profiles, click CREATE. Enter the information related to your node. Then save and click again you node to unlock some configuration features. Click CREATE DEVICE-PROFILE.
If you have a Decode or Encode fonction for your node, you can put them in the CODEC section.
Decode function example:
function Decode(fPort, bytes) { // Decode an uplink message from a buffer // (array) of bytes to an object of fields. var decoded = {};; // Decode bytes to int var batteryInt = bytes[7] var humidityInt = (bytes[5] << 8) | bytes[6]; var pressureInt = (bytes[1] << 8) | bytes[2]; var temperatureInt = (bytes[3] << 8) | bytes[4]; // Decode int to float decoded.battery = (batteryInt*100)/254 // Battery in % decoded.humidity = humidityInt / 10; // Humidity in % decoded.pressure = pressureInt / 10; // Pressue in hPa decoded.temperature = temperatureInt / 100; // Temperature in °C return decoded; }
- Go to Gateways, click CREATE. Choose a name, a description, the Gateway_ID of your gateway (you can find it in global_conf.json or local_conf.json), and select the localhost:8000 server. No gateway profile and discovery enabling is needed. Click CREATE GATEWAY.
- Go to Applications, click CREATE. Choose a name, a description, select your service-profile and a codec if you use one. Click CREATE APPLICATION.
- Click your Application name. Click CREATE in the DEVICES menu. Choose a name, a description, enter the Device EUI of your node as well as your Device-profile. Check Disable frame-counter validation and then click CREATE DEVICE.
- Click your created node just above. In ACTIVATION, enter the device address, the network session key and application session key of your node. The Uplink frame-counter is incremented. Click (RE)ACTIVATE DEVICE.
- You can now visualize your node frames in LORAWAN FRAMES on each node section.
10. Field test[edit source]
A successful test at a 10-km distance without obstacles has been realized. It is recommended to place the gateway at the highest possible position: