• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

boards/04-Jan-2025-92

compose/04-Jan-2025-1,03556

src/04-Jan-2025-354264

CMakeLists.txtD04-Jan-2025270 149

KconfigD04-Jan-2025802 2919

README.rstD04-Jan-20256.3 KiB146106

overlay-e1000.confD04-Jan-202567 53

prj.confD04-Jan-20251.1 KiB4733

sample.yamlD04-Jan-2025344 1918

README.rst

1.. zephyr:code-sample:: mqtt-sn-publisher
2   :name: MQTT-SN publisher
3   :relevant-api: mqtt_sn_socket
4
5   Send MQTT-SN PUBLISH messages to an MQTT-SN gateway.
6
7Overview
8********
9
10`MQTT <http://mqtt.org/>`_ (MQ Telemetry Transport) is a lightweight
11publish/subscribe messaging protocol optimized for small sensors and
12mobile devices.
13
14MQTT-SN can be considered as a version of MQTT which is adapted to
15the peculiarities of a wireless communication environment. While MQTT
16requires a reliable TCP/IP transport, MQTT-SN is designed to be usable
17on any datagram-based transport like UDP, ZigBee or even a plain UART
18(with an additional framing protocol).
19
20The Zephyr MQTT-SN Publisher sample application is an MQTT-SN v1.2
21client that sends MQTT-SN PUBLISH messages to an MQTT-SN gateway.
22It also SUBSCRIBEs to a topic.
23See the `MQTT-SN v1.2 spec`_ for more information.
24
25.. _MQTT-SN v1.2 spec: https://www.oasis-open.org/committees/download.php/66091/MQTT-SN_spec_v1.2.pdf
26
27The source code of this sample application can be found at:
28:zephyr_file:`samples/net/mqtt_sn_publisher`.
29
30Requirements
31************
32
33- Linux machine
34- MQTT-SN gateway, like Eclipse Paho
35- Mosquitto server: any version that supports MQTT v3.1.1. This sample
36  was tested with mosquitto 1.6.
37- Mosquitto subscriber
38- LAN for testing purposes (Ethernet)
39
40Build and Running
41*****************
42
43This sample application supports both static IP addresses and the Gateway Discovery process.
44Open the :zephyr_file:`samples/net/mqtt_sn_publisher/prj.conf` file and set the IP addresses according
45to the LAN environment. CONFIG_NET_SAMPLE_MQTT_SN_STATIC_GATEWAY can be used to select the
46static IP or Gateway discovery process.
47
48You will also need to start an MQTT-SN gateway. A convenience Docker Compose specification file
49is provided in :zephyr_file:`samples/net/mqtt_sn_publisher/compose/compose.yaml`.
50First, Start the net-tools configuration from[here](https://github.com/zephyrproject-rtos/net-tools)
51with:
52
53.. code-block:: console
54
55	$ ./net-setup.sh --config docker.conf
56
57Then bring up the Docker environment in a separate terminal window with:
58
59.. code-block:: console
60
61	$ cd ./compose
62	$ docker compose up
63
64You can also set up this environment manually.With Paho, you can either build it
65from source - see `PAHO MQTT-SN Gateway`_ - or run an unofficial docker image, l
66ike `kyberpunk/paho`_.
67
68.. _PAHO MQTT-SN Gateway: https://www.eclipse.org/paho/index.php?page=components/mqtt-sn-transparent-gateway/index.php
69.. _kyberpunk/paho: https://hub.docker.com/r/kyberpunk/paho
70
71On your Linux host computer, open 3 terminal windows. At first, start mosquitto:
72
73.. code-block:: console
74
75	$ sudo mosquitto -v -p 1883
76
77Then, in another window, start the gateway, e.g. by using docker:
78
79.. code-block:: console
80
81	$ docker run -it -p 10000:10000 -p 10000:10000/udp --name paho -v $PWD/gateway.conf:/etc/paho/gateway.conf:ro kyberpunk/paho
82
83Then, locate your zephyr directory and type:
84
85.. zephyr-app-commands::
86   :zephyr-app: samples/net/mqtt_sn_publisher
87   :board: native_sim/native/64
88   :goals: run
89   :compact:
90
91Optionally, use any MQTT explorer to connect to your broker.
92
93Sample output
94=============
95
96This is the applications output:
97
98.. code-block:: console
99
100	WARNING: Using a test - not safe - entropy source
101	*** Booting Zephyr OS build zephyr-v3.2.0-279-gc7fa387cea81  ***
102	[00:00:00.000,000] <inf> net_config: Initializing network
103	[00:00:00.000,000] <inf> net_config: IPv4 address: 172.18.0.20
104	[00:00:00.000,000] <inf> mqtt_sn_publisher_sample: MQTT-SN sample
105	[00:00:00.000,000] <inf> mqtt_sn_publisher_sample: Network connected
106	[00:00:00.000,000] <inf> mqtt_sn_publisher_sample: Waiting for connection...
107	[00:00:00.000,000] <inf> mqtt_sn_publisher_sample: Connecting client
108	[00:00:00.510,000] <inf> net_mqtt_sn: Decoding message type: 5
109	[00:00:00.510,000] <inf> net_mqtt_sn: Got message of type 5
110	[00:00:00.510,000] <inf> net_mqtt_sn: MQTT_SN client connected
111	[00:00:00.510,000] <inf> mqtt_sn_publisher_sample: MQTT-SN event EVT_CONNECTED
112	[00:00:01.020,000] <inf> net_mqtt_sn: Decoding message type: 19
113	[00:00:01.020,000] <inf> net_mqtt_sn: Got message of type 19
114	[00:00:10.200,000] <inf> mqtt_sn_publisher_sample: Publishing timestamp
115	[00:00:10.200,000] <inf> net_mqtt_sn: Registering topic
116										2f 75 70 74 69 6d 65                             |/uptime
117	[00:00:10.200,000] <inf> net_mqtt_sn: Can't publish; topic is not ready
118	[00:00:10.710,000] <inf> net_mqtt_sn: Decoding message type: 11
119	[00:00:10.710,000] <inf> net_mqtt_sn: Got message of type 11
120	[00:00:10.710,000] <inf> net_mqtt_sn: Publishing to topic ID 14
121	[00:00:20.400,000] <inf> mqtt_sn_publisher_sample: Publishing timestamp
122	[00:00:20.400,000] <inf> net_mqtt_sn: Publishing to topic ID 14
123
124This is the output from the MQTT-SN gateway:
125
126.. code-block:: console
127
128	20221024 140210.191   CONNECT           <---  ZEPHYR                              0C 04 04 01 00 3C 5A 45 50 48 59 52
129	20221024 140210.192   CONNECT           ===>  ZEPHYR                              10 12 00 04 4D 51 54 54 04 02 00 3C 00 06 5A 45 50 48 59 52
130	20221024 140210.192   CONNACK           <===  ZEPHYR                              20 02 00 00
131	20221024 140210.192   CONNACK           --->  ZEPHYR                              03 05 00
132
133	20221024 140210.643   SUBSCRIBE   0001  <---  ZEPHYR                              0C 12 00 00 01 2F 6E 75 6D 62 65 72
134	20221024 140210.648   SUBSCRIBE   0001  ===>  ZEPHYR                              82 0C 00 01 00 07 2F 6E 75 6D 62 65 72 00
135	20221024 140210.660   SUBACK      0001  <===  ZEPHYR                              90 03 00 01 00
136	20221024 140210.661   SUBACK      0001  --->  ZEPHYR                              08 13 00 00 0D 00 01 00
137
138	20221024 140220.338   REGISTER    0002  <---  ZEPHYR                              0D 0A 00 00 00 02 2F 75 70 74 69 6D 65
139	20221024 140220.348   REGACK      0002  --->  ZEPHYR                              07 0B 00 0E 00 02 00
140
141	20221024 140220.848   PUBLISH           <---  ZEPHYR                              0C 0C 00 00 0E 00 00 31 30 32 30 30
142	20221024 140220.850   PUBLISH           ===>  ZEPHYR                              30 0E 00 07 2F 75 70 74 69 6D 65 31 30 32 30 30
143
144	20221024 140230.539   PUBLISH           <---  ZEPHYR                              0C 0C 00 00 0E 00 00 32 30 34 30 30
145	20221024 140230.542   PUBLISH           ===>  ZEPHYR                              30 0E 00 07 2F 75 70 74 69 6D 65 32 30 34 30 30
146