Main Content

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