Subscribe to an MQTT Topic with a Callback Function
This example shows how to use an MQTT client to subscribe to a topic with a callback function.
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 depends 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 Topic with a Callback Function
To subscribe with a callback function, use the callback function named showmessage
attached with this example. The showmessage
function prints the received data and corresponding topic when triggered.
Use the subscribe
function to subscribe to the topic of interest. Use a Name-Value pair argument to assign the callback function at the same time. The displayed table shows the subscribed topic and the corresponding callback function.
topicToSub = "channels/1393455/subscribe/fields/field2"; subscribe(mqClient, topicToSub, Callback = "showmessage")
ans=1×3 table
Topic QualityOfService Callback
__________________________________________ ________________ _____________
"channels/1393455/subscribe/fields/field2" 0 "showmessage"
Write to the Subscribed Topic
To trigger the callback function, the MQTT client needs to receive messages for the subscribed topic. Use the write
function to write messages to the subscribed topic.
topicToWrite = "channels/1393455/publish/fields/field2"; msg = "70"; write(mqClient, topicToWrite, msg)
Trigger Callback Function
Pause to allow the message to transfer from the MQTT client, to the MQTT broker, and back to the client.
pause(2)
When the MQTT client receives the message from the subscribed topic, the callback function showmessage
is automatically triggered. The following context is printed in the MATLAB Command Window.
Topic: channels/1393455/subscribe/fields/field2, Message: 70
Close the MQTT Client
Close access to ThingSpeak by clearing the MQTT client variable from the workspace.
clear mqClient