This article will present the steps for setting up a Thread border router on Raspberry Pi 5 using the open-source implementation OpenThread. The border router’s software stack will run on the host processor (Raspberry Pi), and a minimal “controller” will run on a device with a Thread radio (NRF52840 USB dongle). This kind of setup is known as a “Radio co-processor” (RPC) design. More information can be found here.

Figure 1. Raspberry Pi 5 running OpenThread border router

Creating a Thread Radio Co-processor (RCP)

Required items:

SDK and Toolchain Installation

The Thread Radio Co-processor source code is available as a sample in nRF Connect SDK.

nRF Connect SDK has an associated toolchain, which includes tools and modules required to build nRF Connect SDK samples and applications. Installation guides for the SDK, the toolchain, and nRF Util are available on the Nordic site.

Once installed, open a terminal and execute the following command to check that a toolchain is available:

$ nrfutil toolchain-manager list

The result should look similar to this:

Build the Application

The source code for the application is available in your nRF Connect SDK installation folder (e.g., C:\nordic\v2.7.0\nrf\samples\openthread\coprocessor).

The application can be built using the nRF Connect VS Code extension or the nRF Util command-line tool. Here, we will use the command-line tool.

To build the thread co-processor sample, we will use the following steps:

Navigate to the nRF SDK folder. Start a CLI toolchain environment that is configured to work with West and the rest of the nRF Connect Toolchain and nRF Connect SDK environment:

$ nrfutil toolchain-manager launch --terminal

In the opened terminal, use the command below to build the application:

$ west build -p always -b nrf52840dongle/nrf52840 nrf/samples/openthread/coprocessor/

Program the NRF52840 USB Dongle with the RPC Firmware

Navigate to the coprocessor sample folder and execute the following commands:

Generate a package for a Device Firmware Update (DFU) of the nRF52840 Dongle device:

$ nrfutil pkg generate --hw-version 52 --sd-req=0x00
 --application build/coprocessor/zephyr/zephyr.hex --application-version 1 build/coprocessor/zephyr/zephyr.zip

Plug the dongle into a USB port and press its RESET button to put it into the Device Firmware Update (DFU) mode. The LED on the dongle will start blinking red.

Update the firmware of the dongle with our package using a serial USB connection:

$ nrfutil dfu usb-serial -pkg .\build\coprocessor\zephyr\zephyr.zip -p COM4                                                                                                 

Remember that the serial device, in your case, may have a different name.

Installing OTBR on Raspberry Pi 5

Instructions are based on the official guide of OpenThread

Clone the repo

$ git clone https://github.com/openthread/ot-br-posix

Install dependencies

Go to the cloned repo directory and execute:

$ WEB_GUI=1 ./script/bootstrap

Compile and install OTBR

At this step, we specify the Raspberry Pi’s interface, which in our case is the wlan0 (WiFi) interface.

$ INFRA_IF_NAME=wlan0 WEB_GUI=1 ./script/setup

Attach the RCP Board

Now, we can plug in the nRF52840 Dongle, which we already programmed as a Radio co-processor (RPC), and then power cycle the Raspberry Pi.

Note: By default, the OpenThread border router configuration expects the RCP device serial port to be ttyACM0.

Check this using:

$ ls /dev/tty*

If your RCP device has a different serial port, please follow the instructions from the official guide here.

Testing

If the installation has been successful, the thread border router’s Web GUI service will be running. We can access it using a browser and typing the Raspberry Pi’s IP address, like this: http://192.168.178.XX.

Was this article helpful?