Skip to content

Implementing MQTT in C

by HiveMQ Team
(updated on ) 7 min read

IoT and IIoT developers can use C to implement MQTT, a communication protocol designed for efficient machine-to-machine data exchange in IoT systems. Using an MQTT C Client Library like Eclipse Paho C Client Library, developers can write applications for real-time communications using less code and data compared to other IoT communication protocols.

C is a widely used programming language created in the 1970s. It’s commonly used in operating systems, device drivers, and protocol stacks. Developers can use a C MQTT client to connect to an MQTT broker, publish data, and subscribe to topics to receive data.

How to Use an MQTT C Client Library?

MQTT C Client Libraries allow developers to write C applications to connect to a broker, publish messages, and subscribe to topics. There are a few different options for working with MQTT using C. This article will focus on the Eclipse Paho C Client Library. It supports MQTT v3 and MQTT v5, WebSocket Transport, and SSL/TLS. It offers both synchronous and asynchronous APIs. To get started with the Paho C Client Library, clone the repo and use the following code to install it.

git clone https://git.eclipse.org/r/paho/org.eclipse.paho.mqtt.c
make
sudo make install

Make sure you include the header file in your application.

#include "MQTTClient.h"

Then you can create a client object. To do this, you need to begin by configuring an MQTT broker, either locally or using HiveMQ Cloud Serverless, and then use the broker URL to instantiate a client.

MQTTClient client;
rc = MQTTClient_create(&client, url, clientid, MQTTCLIENT_PERSISTENCE_NONE, NULL);

How to Connect to an MQTT Broker in C?

MQTT works because of brokers. Devices only need to open one connection with a broker to share data with numerous other devices. The HiveMQ MQTT broker can support up to 200 million connections. HiveMQ has a hosted option, HiveMQ Cloud Serverless, as well as an open-source option, HiveMQ CE.

Once you’ve created a client instance, you can connect to a broker. The following code is an example of connecting with authentication credentials.

MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
conn_opts.keepAliveInterval = 10;
conn_opts.cleansession = 1;
conn_opts.username = "username";
conn_opts.password = "password";
rc = MQTTClient_connect(client, conn_opts);

After you’ve connected to a broker, you can publish messages and subscribe to topics to share data between IoT devices.

Code Examples of Using MQTT in C

Publishing MQTT Messages in C

char* payload = "a payload";
int payloadlen = strlen(payload);
int qos = 1;
int retained = 0;
MQTTClient_deliveryToken dt;
rc = MQTTClient_publish(client, topicName, payloadlen, payload, qos, retained, &dt);

Subscribing MQTT Messages in C

const char* topic = "mytopic";
int qos = 2;
rc = MQTTClient_subscribe(client, topic, qos);

You can find the above code examples and more information in our earlier blog Paho MQTT C Client.

MQTT Security Best Practices While Using C MQTT Broker

Security is especially important in IoT use cases where devices have limited memory and computing capabilities. Fortunately, there are steps you can take to keep your C MQTT applications secure. Using a secure network or VPN adds security to your applications. You can also use the popular security standard SSL/TLS for transport-level encryption. It encrypts your data while it is being transmitted and verifies identity on both sides. You can also implement security practices at the application level by using a client identifier, username, and password.

To use TLS/SSL, you need to add the SSL options data to the connect options:

MQTTClient_SSLOptions ssl_opts = MQTTClient_SSLOptions_initializer;
ssl_opts.enableServerCertAuth = 0;
conn_opts.ssl = &ssl_opts;

Use Case Examples for MQTT in C

Developers can use C to implement MQTT for IoT use cases such as remote monitoring, home automation, telemetry, and sensor networks. Using MQTT with C can allow you to build applications to share data between devices in real time with limited bandwidth. For example, you could write a C application to subscribe to humidity data published to an MQTT broker and automate an application to send an alert if a greenhouse’s humidity falls below a set threshold.

Conclusion

Developers can use C with MQTT to build efficient IoT applications and work with real-time data. When deciding how to build an application, consider your specific requirements, constraints, and project objectives to make an informed choice about using MQTT in your C projects. Click here to learn more about MQTT Client libraries.

FAQs on Implementing MQTT in C

HiveMQ Team

The HiveMQ team loves writing about MQTT, Sparkplug, Industrial IoT, protocols, how to deploy our platform, and more. We focus on industries ranging from energy, to transportation and logistics, to automotive manufacturing. Our experts are here to help, contact us with any questions.

HiveMQ logo
Review HiveMQ on G2