nRF5 SDK for Thread v0.11.0
Thread MQTT-SN Example

The Thread MQTT-SN example demonstrates interaction between nodes with the use of OpenThread and built-in MQTT-SN protocol.

The purpose of this example is to toggle the LED on the subscriber board by publishing LED_ON and LED_OFF commands from the publisher board. Since MQTT-SN network topology demands a gateway, which serves as a translator between MQTT-SN clients and an MQTT broker, a third-party MQTT-SN gateway has been used. It has been taken from Eclipse Paho project. For additional information on the gateway used, see Eclipse Paho MQTT-SN C/C++ client for Embedded platforms.

Description

Both client nodes indicate their Thread network state on BSP_LED_0. When the device is not connected to the network, the LED blinks at a 100 ms period. Once the device connects to a network, either as a Child or as a Router, the LED stops blinking and remains turned on. On startup, nodes automatically enter the Thread network with default parameters. The first device that is turned on becomes a Leader of the network, while the rest of the nodes become Children and Routers.

Clients' MQTT-SN network state is indicated on BSP_LED_3. When the device is not connected to the network, the LED is off. Once the device connects to a network, the LED is turned on.

As the MQTT-SN network in this example runs on Thread, the MQTT-SN Gateway plays the role of a Thread Border Router, which means it is a gateway between the Internet and the Thread Network. It can be run on a Raspberry Pi with OpenWRT-based firmware. To connect the MQTT-SN Gateway to the Thread network, you need Nordic's nRF52840 Development Kit running the Network Co-Processor (NCP). For details on how to set up a Thread Border Router and run MQTT-SN Gateway, refer to the Thread Border Router documentation.

Subscriber

The subscriber node is controlled by specific actions triggered by pressing the buttons:

When a MQTT-SN client has subscribed to a topic, every message published by other nodes on that topic is sent to the subscribing client. Unsubscribing to a topic cancels the subscription, so that no messages on that topic are forwarded to the client.

Subscriber LED assignments

Subscriber button assignments

Publisher

The publisher node is controlled by specific actions triggered by pressing the buttons:

Note
The Publisher node sends LED_ON and LED_OFF commands alternately, irrespectively of the state of BSP_LED_2 on the subscriber board. It might happen that the state of BSP_LED_3 on the subscriber board and the published command are the same. Pressing BSP_BUTTON_3 on the publisher board would have no effect on the state of BSP_LED_2 on the subscriber board then, despite fully functional and working network. Pressing BSP_BUTTON_3 on the publisher board again would change the command and the publisher would toggle the BSP_LED_2 state.

Publisher LED assignments

Publisher button assignments

Setup

You can find the source code and the makefiles in the following folders:

Testing

  1. Build the example according to the instructions in Building examples.
  2. Turn the MQTT-SN gateway on according to the instructions in Thread Border Router.
  3. Program a development board with the MQTT-SN Subscriber application.
  4. Program another development board with the MQTT-SN Publisher application.
  5. Connect the clients to the gateway by pressing BSP_BUTTON_2 on both boards.
  6. Subscribe by pressing BSP_BUTTON_3 on the subscriber client board.
  7. Try toggling BSP_LED_2 on the subscriber by pressing BSP_BUTTON_3 on the publisher board.
  8. Unsubscribe by pressing BSP_BUTTON_3 on the subscriber board again. Pressing BSP_BUTTON_3 on the publisher board should have no effect on the state of BSP_LED_2 on the subscriber board then.
Note
Majority of the messages are sent through a broker in the cloud. It might be necessary to wait a few seconds for all messages to be delivered.

Documentation feedback | Developer Zone | Subscribe | Updated