Caution
This library is not maintained. It was my first 'popular' Open Source project, and brought MQTT to the Arduino platform just as both were gaining popularity.
But times have changed, and I haven't needed to use it for a long time now. This means I simply don't have the setup locally to properly develop, test and maintain the library. Alternative libraries exist and I urge you to pick one that is actively maintained.
So Long and Thanks For All The PUBACKs
Nick 2026
This library provides a client for doing simple publish/subscribe messaging with a server that supports MQTT.
The library comes with a number of example sketches. See File > Examples > PubSubClient within the Arduino application.
Full API documentation is available here: https://pubsubclient.knolleary.net
- It can only publish QoS 0 messages. It can subscribe at QoS 0 or QoS 1.
- The maximum message size, including header, is 256 bytes by default. This
is configurable via
MQTT_MAX_PACKET_SIZEinPubSubClient.hor can be changed by callingPubSubClient::setBufferSize(size). - The keepalive interval is set to 15 seconds by default. This is configurable
via
MQTT_KEEPALIVEinPubSubClient.hor can be changed by callingPubSubClient::setKeepAlive(keepAlive). - The client uses MQTT 3.1.1 by default. It can be changed to use MQTT 3.1 by
changing value of
MQTT_VERSIONinPubSubClient.h.
The library uses the Arduino Ethernet Client api for interacting with the underlying network hardware. This means it Just Works with a growing number of boards and shields, including:
- Arduino Ethernet
- Arduino Ethernet Shield
- Arduino YUN – use the included
YunClientin place ofEthernetClient, and be sure to do aBridge.begin()first - Arduino WiFi Shield - if you want to send packets > 90 bytes with this shield,
enable the
MQTT_MAX_TRANSFER_SIZEdefine inPubSubClient.h. - Sparkfun WiFly Shield – library
- TI CC3000 WiFi - library
- Intel Galileo/Edison
- ESP8266
- ESP32
The library cannot currently be used with hardware based on the ENC28J60 chip – such as the Nanode or the Nuelectronics Ethernet Shield. For those, there is an alternative library available.
This code is released under the MIT License.