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. Download the root certificate from thingspeak.com and use its local path. Assign those values in MATLAB®.
clientID = "Your Client ID"; userName = "Your Username"; password = "Your Password"; rootCert = "C:\Downloads\thingspeakcert.cer";
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 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