Thread Border Router serves as a gateway between the Internet and the Thread network. There are two ways of connecting the Thread Border Router to the Internet. The first one uses the standard Ethernet cable with an RJ-45 plug, while the other one uses a built-in Wi-Fi module.
The Border Router is intended for development purposes, to make it easy for developers to connect their Thread network to the Internet in the development phase. It also supports the Thread native commissioning procedure utilizing NFC to initiate the process.
The Border Router consists of Raspberry Pi 3 B, NXP Semiconductors' NFC reader shield, and Nordic’s nRF52840 Development Kit. The NXP Semiconductors' NFC reader shield is an optional element required for Thread native commissioning. However, the shield is not necessary to connect a Thread network to the Internet.
nRF52840 Development Kit acts as a connectivity chip running the Network Co-Processor (NCP) application. It communicates with Raspberry Pi using the Spinel protocol. Raspberry Pi firmware is based on OpenWRT (distribution #cb9d252) and contains several deamons for controlling the NCP and the NFC reader shield, such as wpantund on GitHub and NFC commissioning deamon.
For your convenience, this SDK provides pre-built, ready-to-use binary images for both nRF52840 and Raspberry Pi. The binary image intended for Border Router is distributed under license inherited from OpenWRT project (OpenWRT_LICENSE.txt), with limitations imposed by license inherited from NXP’s EXPLORE_NFC_WW (NXP_EXPLORE-NFC-WW_LICENSE.pdf). EXPLORE_NFC_WW license applies if a user uses a Border Router feature to natively commission nodes using NFC. Licenses can be found in the package containing the Border Router binary image. For corresponding source code and build system, refer to README.md.
RaspPi_Thread_Border_Router_Demo_v0.11.0-1.alpha.img
<InstallFolder>\examples\thread\experimental\ncp
<InstallFolder>\examples\thread\experimental\cli
Complete the following steps to set up the Border Router solution:
RaspPi_Thread_Border_Router_Demo_v0.11.0-1.alpha.img
.cmd
).Thread Settings:
The following are the default settings of the Border Router:
To customize the Thread settings, you must connect to the Border Router using SSH. It is recommended to set a password, which can be done using the passwd
command after logging in through SSH, or in the LuCI configuration panel.
Because the Border Router received its IPv4 address dynamically using DHCPv4, you must log in to the router and check its address. Alternatively, you can use scanning software like Advanced IP Scanner. When the IPv4 address is known to you, open an Internet browser and go to this address. The LuCI configuration panel opens. The default logging credentials are: id: "root" and empty password. Change the password to a non-empty value.
Log in to the router using SSH. Vim and nano text editors are available on the Border Router. To change the settings, edit the /etc/config/thread_border_router
file. The following lines can be found at the top of the file:
Edit these variables to customize the Thread configuration.
Connectivity:
NAT64 technology is enabled by default. It is used to enable communication between the IPv6-only Thread network with pure IPv4 LAN network that the Border Router connects to, as is the case in most applications. In that way, Thread nodes are able to connect to IPv4 cloud services. Thread devices will receive a NAT64-prefix and use it to create their own Unique Local Address.
The other connectivity option, which is also enabled by default, is support for the native IPv6 connection. It uses built-in DHCPv6 client on the Border Router which is able to receive prefixes from the Ethernet interface. If the received prefix is shorter than 63 bits, the 64-bit long subnet prefix is created and forwarded to the Thread network. In such situation, devices create one more address based on the forwarded prefix, which, unlike in a pure NAT64 solution, allows them to be reached from the Internet.
Support for Domain Name System (DNS) resolution is also available. This mechanism is used to translate a host name into a corresponding IP address. It can be used either for translating a domain name into its native IPv6 or for obtaining its IPv4 address and returning IPv6 translated with the DNS64 mechanism.
To test the Border Router, you can use another node with command line interface (CLI) and ping the Google DNS server 8.8.8.8.
ipaddr:
2000::/3
prefix, in this example 2001:db8:dead:beef:98ba:8f31:fc05:6919. This address can be used to reach the node from any IPv6-connected device. The simplest test is to ping this address from a computer connected to the IPv6 network.In a typical use case, it is assumed that no additional communication interface is present. In such scenario, Thread Border Router starts in Access Point mode, advertising its own Wi-Fi network called "Nordic Thread Border Router". A user connects to this network and chooses a local Wi-Fi network for the Thread Border Router to connect to.
Next, the network advertised by the Thread Border Router becomes unavailable. The switch from Access Point mode to Station mode occurs and the connectivity between the Thread Network and the Internet through the local Wi-Fi is maintained.
The behavior of the Router after the reboot can be configured using a jumper or a configuration file. Details are presented in Configuring Wi-Fi behavior after reboot.
The Border Router will by default store the previous network configuration after a reboot. You can change this behavior either by using a jumper on the Raspberry Pi board or by editing a configuration file:
Using a jumper:
You can configure a jumper in order to reset the Wi-Fi configuration after each reboot:
To maintatin the configuration after a reboot, GPIO26 must be connected to GND or simply left disconnected:
Using a configuration file: Edit the file /boot/wifi_config.txt
. Set the erase_wifi_configuration
property to 1
to revert the wireless settings to the default Access Point configuration after every reboot. The default setting (erase_wifi_configuration=0
) will store the previous network configuration.
The following flowchart presents the Wi-Fi initialization procedure:
When the Access Point is enabled, the following steps are required to connect the Thread Border Router to the specified Wi-Fi network in a client mode.
192.168.2.1
address: From now on, the Access Point provided by the Thread Border Router will no longer be available. The configuration panel will stop responding as well. Thread Border Router is now connected to the selected Network and will obtain its IPv4 and IPv6 addresses using DHCP and DHCPv6 respectively.
The MQTT-SN Gateway used in the Thread MQTT-SN Example can be run on the Thread Border Router. To do that, MQTT-SN Gateway must be enabled in the /etc/config/thread_border_router
file. The paho_mqtt_sn_gateway_enable
flag must be set to true
.
With this option enabled, MQTT-SN Gateway starts automatically once you reboot the Raspberry Pi. The gateway has already been configured to work correctly with the Thread MQTT-SN Example.
The configuration file for the Paho MQTT-SN Gateway is located in /etc/paho-mqtt-sn-gateway
.conf. By default, the IPv4 address of the Eclipse IoT MQTT Broker is used. You may want to use another MQTT Broker. To do that, modify the BrokerName and BrokerPortNo variables in the configuration file.
Note that you need to type the IPv4 address of the MQTT Broker. The host name representation is currently not supported.