An example for a minimal asset tracking device that connects to Thingsboard over LTE-M and NB-IoT and sends its GPS position as telemetry data using CoAP.
This code was created for the talk "How to create an asset tracker with Zephyr and Thingsboard in no time" presented at the Open Source Summit Europe 2024. Find the corresponding slides here.
This project is made to run on a Nordic nRF9160 Development Kit which contains a modem for LTE-M/NB-IoT and GNSS. The included GPS antenna must be connected to the board. The code depends on the nRF Connect SDK v2.7.0 for its modem and LTE link control libraries.
On startup the application establishes a cellular data connection and starts the GPS receiver. Afterwards it opens a BSD socket for IP communication with a Thingsboard instance and periodically sends GPS position information (latitude, longitude and timestamp) via CoAP to Thingsboards's telemetry endpoint.
Install your own Thingsboard instance as described in the Getting Started Guide for the Thingsboard Community Edition or use a hosted instance at thingsboard.cloud.
Login and create a new device under Entities -> Devices
. Give it a name, use the default profile
for now and click Add
. Click on the new device in the table and then Manage Credentials
to
view the access token for the device. You will need this later when configuring the firmware build
for the device.
First install Zephyr according to the
Getting Started Guide
but replace the command west init ~/zephyrproject
with the following to install the nRF
Connect SDK which comes with its own copy of zephyr:
west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.7.0 ~/zephyrproject
Additionally install python requirements of the nRC Connect SDk into the python virtual environment:
pip3 install -r nrf/scripts/requirements.txt
Checkout the project and initialize the workspace:
west init -m https://github.com/GCX-EMBEDDED/ossummit-asset-tracker asset-tracker
cd asset-tracker
west update
Build the application with
west build -b nrf9160dk/nrf9160/ns application/app
Connect the nRF9160 DK via USB and program the application with:
west flash --erase
In order to authenticate to Thingsboard the device uses its access token which you need
set with the option CONFIG_TBAT_THINGSBOARD_ACCESS_TOKEN
. The app/Kconfig
file defines more
project specific configuration options that you can modify if needed.
If you would like to use a debugger you can enable debug optimzation by adding the debug.conf
file to the configuration:
west build -b nrf9160dk/nrf9160/ns application/app -- -DEXTRA_CONF_FILE=debug.conf
In order to use the nRF Connect Cellular Monitor to capture network traffic over the modem use this build command:
west build -b nrf9160dk/nrf9160/ns -S nrf91-modem-trace-uart application/app -- -DEXTRA_CONF_FILE=trace.conf