nRF9160: Asset Tracker

Note

The Asset Tracker application is succeeded by the nRF9160: Asset Tracker v2 application. It will be phased out in future releases.

The Asset Tracker demonstrates how to use the nRF Cloud to connect an nRF9160-based kit to the nRF Connect for Cloud via LTE, transmit GPS and sensor data, and retrieve information about the device.

Overview

The application uses the LTE link control driver to establish a network connection. It then collects various data locally, and transmits the data to Nordic Semiconductor’s cloud solution, nRF Connect for Cloud. The data is visualized in nRF Connect for Cloud’s web interface.

The collected data includes the GPS position, accelerometer readings (the device’s physical orientation), and data from various environment sensors.

Sensor data

nRF Cloud sensor type

Data unit

GPS coordinates

GPS

NMEA Gxxx string

Accelerometer data

FLIP

String

Temperature

TEMP

Celsius

Humidity

HUMID

Percent

Air pressure

AIR_PRESS

Pascal

Light sensor

LIGHT

Lux

On the nRF9160 DK, the application uses simulated sensor data by default, but it can be configured with Kconfig options to use real sensors to collect data. On the Thingy:91, onboard sensors are used by default. GPS is enabled by default on both the kits.

In addition to the sensor data, the application retrieves information from the LTE modem, such as the signal strength, battery voltage, and current operator. This information is available in nRF Connect for Cloud under the section Cellular Link Monitor.

The LTE Link Monitor application, implemented as part of nRF Connect for Desktop can be used to send AT commands to the device and receive the responses. You can also send AT commands from the Terminal card on nRF Connect for Cloud when the device is connected.

By default, the Asset Tracker supports firmware updates through AWS FOTA.

Power optimization

The Asset Tracker can run in three power modes that are configured in the Kconfig file of the application. Currently the dynamic switching between eDRX and PSM during run-time is only supported on the nRF9160 DK. However, both nRF9160 DK and Thingy:91 support build-time configuration for enabling eDRX, PSM or both.

Note

Not all cellular network providers support these modes, and the granted parameters can vary between networks. Network operators can also limit the availability of power saving features for roaming users. SIM card subscription also affects the availability of the cellular IoT power saving features.

Demo mode

This is the default setting. In this mode, the device maintains a continuous cellular link and can receive data at all times. To enable this mode, set CONFIG_POWER_OPTIMIZATION_ENABLE=n.

Request eDRX mode

In this mode, the device requests the eDRX feature from the cellular network to save power. The device maintains a continuous cellular link. The device is reachable only at the configured eDRX intervals or when the device sends data. To enable this mode on an nRF9160 DK during run-time, set CONFIG_POWER_OPTIMIZATION_ENABLE=y and then set Switch 2 to the N.C. position. On Thingy:91 and nRF9160 DK, the CONFIG_LTE_EDRX_REQ option is used to enable eDRX during build-time.

Request Power Saving Mode (PSM)

In this mode, the device requests the PSM feature from the cellular network to save power. The device maintains a continuous cellular link. The device is reachable only at the configured PSM intervals or when the device sends data. To enable this mode on an nRF9160 DK during run-time, set CONFIG_POWER_OPTIMIZATION_ENABLE=y and then set Switch 2 to the GND position. On Thingy:91 and nRF9160 DK, the CONFIG_GPS_CONTROL_PSM_ENABLE_ON_START option is used to enable PSM during build-time.

Requirements

The sample supports the following development kits:

Hardware platforms

PCA

Board name

Build target

Thingy:91

PCA20035

thingy91_nrf9160

thingy91_nrf9160ns

nRF9160 DK

PCA10090

nrf9160dk_nrf9160

nrf9160dk_nrf9160ns

The sample is configured to compile and run as a non-secure application on nRF91’s Cortex-M33. Therefore, it automatically includes the Secure Partition Manager that prepares the required peripherals to be available for the application.

You can also configure it to use TF-M instead of Secure Partition Manager.

User interface

The buttons and switches have the following functions when the connection is established:

Button 1 (SW3 on Thingy:91):
  • Send a BUTTON event to the nRF Connect for Cloud.

  • Enable or disable GPS operation (long press the button for a minimum of 10 seconds).

Switch 1 (only on nRF9160 DK):
  • Toggle to simulate orientation change (flipping) of the kit.

Switch 2 (only on nRF9160 DK):

On the nRF9160 DK, the application state is indicated by the LEDs.

LED 3 and LED 4:
  • LED 3 blinking: The device is connecting to the LTE network.

  • LED 3 ON: The device is connected to the LTE network.

  • LED 4 blinking: The device is connecting to nRF Connect for Cloud.

  • LED 3 and LED 4 blinking: The MQTT connection has been established and the user association procedure with nRF Connect for Cloud has been initiated.

  • LED 4 ON: The device is connected and ready for sensor data transfer.

Application state indicated by LEDs

Application state indicated by LEDs

All LEDs (1-4):
  • Blinking in groups of two (LED 1 and 3, LED 2 and 4): Recoverable error in the Modem library.

  • Blinking in cross pattern (LED 1 and 4, LED 2 and 3): Communication error with the nRF Connect for Cloud.

On the Thingy:91, the application state is indicated by a single RGB LED as follows:

LED color

State

White

Connecting to network

Cyan

Connecting to nRF Connect for Cloud

Yellow

Waiting for user association

Blue

Connected, sending environment data

Purple

Searching for GPS

Green

GPS has fix, sending GPS and environment data

Red

Error

Using the LwM2M carrier library

This application supports the nRF Connect SDK LwM2M carrier library.

To enable the LwM2M carrier library, add the following parameter to your build command:

-DOVERLAY_CONFIG=lwm2m_carrier_overlay.conf

In SEGGER Embedded Studio, select Tools -> Options -> nRF Connect to add the above CMake parameter. See Providing CMake options for more information.

Alternatively, you can manually set the configuration options to match the contents of the overlay config file.

Building and running

This sample can be found under applications/asset_tracker in the nRF Connect SDK folder structure.

The sample is built as a non-secure firmware image for the nrf9160dk_nrf9160ns build target. Because of this, it automatically includes the Secure Partition Manager. You can also configure it to use TF-M instead of SPM.

See Building and programming a sample application for information about how to build and program the application.

The Kconfig file of the application contains options to configure the application. For example, configure CONFIG_POWER_OPTIMIZATION_ENABLE to enable power optimization or CONFIG_TEMP_USE_EXTERNAL to use an external temperature sensor instead of simulated temperature data. In SEGGER Embedded Studio, select Project -> Configure nRF Connect SDK project to browse and configure these options. Alternatively, use the command line tool menuconfig or configure the options directly in prj.conf.

Note

For nRF9160 DK v0.15.0 and later, set the CONFIG_NRF9160_GPS_ANTENNA_EXTERNAL option to y when building the application to achieve the best external antenna performance.

This application supports the nRF Connect SDK Secure bootloader chain, but it is disabled by default. To enable the immutable bootloader, set CONFIG_SECURE_BOOT=y.

Using RSA signing for MCUboot

When CONFIG_BOOTLOADER_MCUBOOT is set to y, the Asset Tracker application adds an overlay configuration for MCUboot. This configuration enables the RSA signing of the images for backward compatibility with the MCUboot versions that precede the nRF Connect SDK v1.4.0. The overlay can be found in mcuboot_overlay-rsa.conf.

Testing

After programming the application and all prerequisites to your kit, test the Asset Tracker application by performing the following steps:

  1. Connect the kit to the computer using a USB cable. The kit is assigned a COM port (Windows) or ttyACM device (Linux), which is visible in the Device Manager.

  2. Connect to the kit with a terminal emulator, for example, LTE Link Monitor.

  3. Reset the kit.

  4. Observe in the terminal window that the kit starts up in the Secure Partition Manager and that the application starts. This is indicated by output similar to the following lines:

    SPM: prepare to jump to Non-Secure image
    ***** Booting Zephyr OS v1.13.99 *****
    Application started
    
  5. Observe in the terminal window that the connection to nRF Connect for Cloud is established. This may take several minutes.

  6. Open a web browser and navigate to https://nrfcloud.com/. Follow the instructions to set up your account and add an LTE device.

  7. The first time you start the application, add the device to your account:

    1. Observe that the LED(s) indicate that the device is waiting for user association.

    2. Follow the instructions on nRF Connect for Cloud to add your device.

    3. If association is successful, the device reconnects to nRF Connect for Cloud. If the LED(s) indicate an error, check the details of the error in the terminal window. The device must be power-cycled to restart the association procedure.

  8. Observe that the LED(s) indicate that the connection is established.

  9. Observe that the device count on your nRF Connect for Cloud dashboard is incremented by one.

  10. Select the device from your device list on nRF Connect for Cloud, and observe that sensor data and modem information is received from the kit.

  11. Press Button 1 (SW3 on Thingy:91) to send BUTTON data to nRF Connect for Cloud.

  12. Press Button 1 (SW3 on Thingy:91) for a minimum of 10 seconds to enable GPS tracking. The kit must be outdoors in clear space for a few minutes to get the first position fix.

  13. Optionally send AT commands from the terminal, and observe that the response is received.

Dependencies

This application uses the following nRF Connect SDK libraries and drivers:

It uses the following sdk-nrfxlib libraries:

In addition, it uses the following sample: