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
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.
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
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.
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.