Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
A

arduino-mqtt

> 编程语言
Open source

MQTT library for Arduino

1.1K stars0 likes1 views
WebsiteGitHub

About

MQTT library for Arduino

arduino-mqtt

This library bundles the lwmqtt MQTT 3.1.1 client and adds a thin wrapper to get an Arduino like API.

Download the latest version from the release section.

Or it can be installed from the following library repositories:

  • Arduino IDE's Library Manager
    • By searching for "lwmqtt".
  • PlatformIO
    • By running pio lib install "256dpi/MQTT".
  • IDF Component Manager
    • By adding it to idf_component.yml.
arduino_mqtt:
  git: "https://github.com/256dpi/arduino-mqtt.git"
  version: # tag, branch, or commit hash

Compatibility

The following examples show how you can use the library with various Arduino compatible hardware:

  • Arduino Yun & Yun-Shield (Secure)
  • Arduino Ethernet Shield
  • Arduino WiFi Shield
  • Adafruit HUZZAH ESP8266 (Secure)
  • Arduino WiFi101 Shield (Secure)
  • Arduino MKR GSM 1400 (Secure)
  • Arduino MKR NB 1500
  • ESP32 Development Board (Secure)
  • ESP8266 Development Board

Other shields and boards should also work if they provide a Client based network implementation.

Check out the Wiki to find more examples.

Notes

  • The maximum size for packets being published and received is set by default to 128 bytes. To change the buffer sizes, you need to use MQTTClient client(256) or MQTTClient client(256, 512) instead of just MQTTClient client at the top of your sketch. A single value denotes both the read and write buffer size, two values specify them separately. Beginning with version 2.5.2, the message payload is sent directly during publishing. Therefore, the write buffer is only needed to encode the packet header and topic, for which the default 128 bytes should be enough. However, the receiving of messages is still fully constrained by the read buffer, which may be increased if necessary.

  • On the ESP8266 it has been reported that an additional delay(10); after client.loop(); fixes many stability issues with WiFi connections.

  • To use the library with shiftr.io, you need to provide the instance name (username) and token secret (password) as the second and third argument to client.connect(client_id, username, password).

Example

The following example uses an Arduino MKR1000 to connect to the public shiftr.io instance. You can check on your device after a successful connection here: https://www.shiftr.io/try.

…

API

Create the object with:

cpp
MQTTClient()
MQTTClient(int bufSize)
MQTTClient(int readBufSize, int writeBufSize)
  • MQTTClient has two buffers. One for read and one for write. Default buffer size is 128 bytes. In summary are 256 bytes are used for buffers.
  • The bufSize option sets readBufSize and writeBufSize to the same value.

Initialize the object using the hostname of the broker, the brokers port (default: 1883) and the underlying Client class for network transport:

cpp
void begin(Client &client);
void begin(const char hostname[], Client &client);
void begin(const char hostname[], int port, Client &client);
void begin(IPAddress address, Client &client);
void begin(IPAddress address, int port, Client &client);
  • Specify port 8883 when using secure clients for encrypted connections.
  • Local domain names (e.g. Computer.local on OSX) are not supported by Arduino. You need to set the IP address directly.

The hostname and port can also be changed after calling begin():

cpp
void setHost(const char hostname[]);
void setHost(const char hostname[], int port);
void setHost(IPAddress address);
void setHost(IPAddress address, int port);

Set a will message (last testament) that gets registered on the broker after connecting. setWill() has to be called before calling connect():

cpp
void setWill(const char topic[]);
void setWill(const char topic[], const char payload[]);
void setWill(const char topic[], const char payload[], bool retained, int qos);
void clearWill();

Register a callback to receive messages:

cpp
void onMessage(MQTTClientCallbackSimple);
// Callback signature: void messageReceived(String &topic, String &payload) {}

void onMessage(MQTTClientCallbackSimpleFunction cb);
// Callback signature: std::function

void onMessageAdvanced(MQTTClientCallbackAdvanced);
// Callback signature: void messageReceived(MQTTClient *client, char topic[], char bytes[], int length) {}

void onMessageAdvanced(MQTTClientCallbackAdvancedFunction cb);
// Callback signature: std::function
  • The set callback is mostly called during a call to loop() but may also be called during a call to subscribe(), unsubscribe() or publish() // QoS > 0 if messages have been received before receiving the required acknowledgement. Therefore, it is strongly recommended to not call subscribe(), unsubscribe() or publish() // QoS > 0 directly in the callback.
  • In case you need a reference to an object that manages the client, use the void * ref property on the client to store a pointer, and access it directly from the advanced callback.
  • If the platform supports `` you can directly register a function wrapper.

Set more advanced options:

cpp
void setKeepAlive(int keepAlive);
void setCleanSession(bool cleanSession);
void setTimeout(int timeout);
void setOptions(int keepAlive, bool cleanSession, int timeout);
  • The keepAlive option controls the keep alive interval in seconds (default: 10).
  • The cleanSession option controls the session retention on the broker side (default: true).
  • The timeout option controls the default timeout for all commands in milliseconds (default: 1000).

Set a custom clock source "custom millis" callback to enable deep sleep applications:

cpp
void setClockSource(MQTTClientClockSource);
// Callback signature: uint32_t clockSource() {}
  • The specified callback is used by the internal timers to get a monotonic time in milliseconds. Since the clock source for the built-in millis is stopped when the Arduino goes into deep sleep, you need to provide a custom callback that first syncs with a built-in or external Real Time Clock (RTC). You can pass NULL to reset to the default implementation.

Connect to broker using the supplied client ID and an optional username and password:

cpp
bool connect(const char clientID[], bool skip = false);
bool connect(const char clientID[], const char username[], bool skip = false);
bool connect(const char clientID[], const char username[], const char password[], bool skip = false);
  • If password is present but username is absent, the client will fall back to an empty username.
  • If the skip option is set to true, the client will skip the network level connection and jump to the MQTT level connection. This option can be used in order to establish and verify TLS connections manually before giving control to the MQTT client.
  • The functions return a boolean that indicates if the connection has been established successfully (true).

Publish a message to the broker with an optional payload, which can be a string or binary:

…
  • Beginning with version 2.5.2, payloads of arbitrary length may be published, see Notes.
  • The functions return a boolean that indicates if the publishing has been successful (true).

Obtain the last used packet ID and prepare the publication of a duplicate message using the specified packet ID:

cpp
uint16_t lastPacketID();
void prepareDuplicate(uint16_t packetID);
  • These functions may be used to implement a retry logic for failed publications of QoS1 and QoS2 messages.
  • The lastPacketID() function can be used after calling publish() to obtain the used packet ID.
  • The prepareDuplicate() function may be called before publish() to temporarily change the next used packet ID and flag the message as a duplicate.

Subscribe to a topic:

cpp
bool subscribe(const String &topic);
bool subscribe(const String &topic, int qos);
bool subscribe(const char topic[]);
bool subscribe(const char topic[], int qos);
  • The functions return a boolean that indicates if the subscription has been successful (true).

Unsubscribe from a topic:

cpp
bool unsubscribe(const String &topic);
bool unsubscribe(const char topic[]);
  • The functions return a boolean that indicates if the unsubscription has been successful (true).

Sends and receives packets:

cpp
bool loop();
  • This function should be called in every loop.
  • The function returns a boolean that indicates if the loop has been successful (true).

Check if the client is currently connected:

cpp
bool connected();

Check whether a session was present at the time of the last connect:

cpp
bool sessionPresent();

Configure dropping of overflowing messages (exceeding read buffer) and checking the count of dropped messages:

cpp
void dropOverflow(bool enabled);
uint32_t droppedMessages();

Access low-level information for debugging:

cpp
lwmqtt_err_t lastError();
lwmqtt_return_code_t returnCode();
  • The error codes can be found here.
  • The return codes can be found here.

Disconnect from the broker:

cpp
bool disconnect();
  • The function returns a boolean that indicates if the disconnect has been successful (true).

Release Management

  • Update version in library.properties.
  • Create release on GitHub.

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Carduinoiotmqtt

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言