Subscribe to an MQTT Wildcard Topic
This example shows how to use an MQTT client to subscribe to a wildcard topic.
ThingSpeak™ is used as the broker in this example.
Message Queuing Telemetry Transport (MQTT) is an OASIS standard messaging protocol for the Internet of Things (IoT). It is designed as an extremely lightweight publish/subscribe messaging transport that is ideal for connecting remote devices with a small code footprint and minimal network bandwidth.
ThingSpeak is an IoT analytics platform service that allows you to aggregate, visualize, and analyze live data streams in the cloud. You can send data to ThingSpeak from your devices, create instant visualization of live data, and send alerts.
Create an MQTT Client and Connect to the Broker
Set up a ThingSpeak broker and get Client ID, Username, and Password from it. Assign those values in MATLAB®.
clientID = "Your Client ID"; userName = "Your Username"; password = "Your Password";
Download the root certificate from thingspeak.com as described in How to Download Root Certificate for Use With Industrial Communication Toolbox MQTT Functions. Get the path of the downloaded root certificate. The location and file name extension depend on the browser you use. For example, using Edge you might set rootCert
like this:
rootCert = "C:\Downloads\DigiCert Global Root CA.crt";
The certificate saved from Firefox® might have the file extension .pem
.
Establish a secure connection to ThingSpeak with an appropriate port number using the mqttclient
function.
brokerAddress = "ssl://mqtt3.thingspeak.com"; port = 8883; mqClient = mqttclient(brokerAddress, Port = port, ClientID = clientID,... Username = userName, Password = password, CARootCertificate = rootCert);
Subscribe to a Wildcard Topic
To subscribe to all the topics under a certain hierarchy, use the subscribe
function with a wildcard to make the subscription easier. The displayed table shows the wildcard topic has been subscribed successfully.
topicWildcard = "channels/1393455/subscribe/fields/+";
subscribe(mqClient, topicWildcard)
ans=1×3 table
Topic QualityOfService Callback
_____________________________________ ________________ ________
"channels/1393455/subscribe/fields/+" 0 ""
Write to Different Topics Under the Wildcard
To verify that the wildcard subscription is successful, make sure the messages written to different topics under the wildcard subscription are received by the MQTT client.
Use the write
function to write messages to different topics under the wildcard. Pause for a few seconds after each write
to avoid violating the rate limits in ThingSpeak.
topicToWrite1 = "channels/1393455/publish/fields/field1"; topicToWrite2 = "channels/1393455/publish/fields/field2"; msg1 = "60"; msg2 = "30"; write(mqClient, topicToWrite1, msg1) pause(2) write(mqClient, topicToWrite2, msg2) pause(2)
Peek at the MQTT Client
Use the peek
function to view the most recently received data for all subscribed topics. The displayed timetable indicates that the messages under the wildcard have been received successfully.
peek(mqClient)
ans=2×2 timetable
Time Topic Data
____________________ __________________________________________ ____
06-Jan-2022 13:36:40 "channels/1393455/subscribe/fields/field1" "60"
06-Jan-2022 13:36:43 "channels/1393455/subscribe/fields/field2" "30"
Close the MQTT Client
Close access to ThingSpeak by clearing the MQTT client variable from the workspace.
clear mqClient