All Projects β†’ 256dpi β†’ Arduino Mqtt

256dpi / Arduino Mqtt

Licence: mit
MQTT library for Arduino

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Arduino Mqtt

Blinker Library
An IoT Solution,Blinker library for embedded hardware. Works with Arduino, ESP8266, ESP32.
Stars: ✭ 1,095 (+59.85%)
Mutual labels:  arduino, mqtt, iot
Home Assistant Config
My Home Assistant Configuration 🏑🏑
Stars: ✭ 133 (-80.58%)
Mutual labels:  arduino, mqtt, iot
Sitewhere
SiteWhere is an industrial strength open-source application enablement platform for the Internet of Things (IoT). It provides a multi-tenant microservice-based infrastructure that includes device/asset management, data ingestion, big-data storage, and integration through a modern, scalable architecture. SiteWhere provides REST APIs for all system functionality. SiteWhere provides SDKs for many common device platforms including Android, iOS, Arduino, and any Java-capable platform such as Raspberry Pi rapidly accelerating the speed of innovation.
Stars: ✭ 788 (+15.04%)
Mutual labels:  arduino, mqtt, iot
Blinker Doc
blinkerδΈ­ζ–‡ζ–‡ζ‘£
Stars: ✭ 139 (-79.71%)
Mutual labels:  arduino, mqtt, iot
Pjon
PJON (Padded Jittering Operative Network) is an experimental, arduino-compatible, multi-master, multi-media network protocol.
Stars: ✭ 2,615 (+281.75%)
Mutual labels:  arduino, mqtt, iot
Sonoff Homeassistant
Firmware for ESP8266 based itead Sonoff switches for use with HomeAssistant
Stars: ✭ 354 (-48.32%)
Mutual labels:  arduino, mqtt, iot
Homie Esp8266
πŸ’‘ ESP8266 framework for Homie, a lightweight MQTT convention for the IoT
Stars: ✭ 1,241 (+81.17%)
Mutual labels:  arduino, mqtt, iot
Espmqttclient
Wifi and MQTT handling for ESP8266 and ESP32
Stars: ✭ 169 (-75.33%)
Mutual labels:  arduino, mqtt, iot
Blynk Server
Blynk is an Internet of Things Platform aimed to simplify building mobile and web applications for the Internet of Things. Easily connect 400+ hardware models like Arduino, ESP8266, ESP32, Raspberry Pi and similar MCUs and drag-n-drop IOT mobile apps for iOS and Android in 5 minutes
Stars: ✭ 8 (-98.83%)
Mutual labels:  arduino, mqtt, iot
Tasmota
Alternative firmware for ESP8266 with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at
Stars: ✭ 16,624 (+2326.86%)
Mutual labels:  arduino, mqtt, iot
Freedomotic
Open IoT Framework
Stars: ✭ 354 (-48.32%)
Mutual labels:  arduino, mqtt, iot
Sensors Software
sourcecode for reading sensor data
Stars: ✭ 469 (-31.53%)
Mutual labels:  arduino, iot
Watchy
Watchy - An Open Source E-Ink Smartwatch
Stars: ✭ 469 (-31.53%)
Mutual labels:  arduino, iot
Haswitchplate
LCD touchscreen for Home Automation
Stars: ✭ 666 (-2.77%)
Mutual labels:  arduino, mqtt
Esp Mqtt Json Digital Leds
(OBSOLETE) ESP8266 MQTT JSON Digital LEDs for Home Assistant
Stars: ✭ 503 (-26.57%)
Mutual labels:  arduino, mqtt
Automated Irrigation System
This is the software of an open source automated irrigation system. The complete setup including hardware can be found in the README.
Stars: ✭ 442 (-35.47%)
Mutual labels:  arduino, iot
Platformio Atom Ide
PlatformIO IDE for Atom: The next generation integrated development environment for IoT
Stars: ✭ 475 (-30.66%)
Mutual labels:  arduino, iot
Arduinomenu
Arduino generic menu/interactivity system
Stars: ✭ 520 (-24.09%)
Mutual labels:  arduino, iot
Ejabberd
Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server)
Stars: ✭ 5,077 (+641.17%)
Mutual labels:  mqtt, iot
Esphome Core
🚨 No longer used 🚨 - The C++ framework behind ESPHome
Stars: ✭ 545 (-20.44%)
Mutual labels:  arduino, iot

arduino-mqtt

Build Status GitHub release

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 even better use the builtin Library Manager in the Arduino IDE and search for "MQTT".

The library is also available on PlatformIO. You can install it by running: pio lib install "MQTT".

Compatibility

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

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) instead of just MQTTClient client on the top of your sketch. The passed value denotes the read and write buffer size.

  • 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 token key (username) and token secret (password) as the second and third argument to client.connect(name, key, secret).

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.

#include <SPI.h>
#include <WiFi101.h>
#include <MQTT.h>

const char ssid[] = "ssid";
const char pass[] = "pass";

WiFiClient net;
MQTTClient client;

unsigned long lastMillis = 0;

void connect() {
  Serial.print("checking wifi...");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }

  Serial.print("\nconnecting...");
  while (!client.connect("arduino", "public", "public")) {
    Serial.print(".");
    delay(1000);
  }

  Serial.println("\nconnected!");

  client.subscribe("/hello");
  // client.unsubscribe("/hello");
}

void messageReceived(String &topic, String &payload) {
  Serial.println("incoming: " + topic + " - " + payload);

  // Note: Do not use the client in the callback to publish, subscribe or
  // unsubscribe as it may cause deadlocks when other things arrive while
  // sending and receiving acknowledgments. Instead, change a global variable,
  // or push to a queue and handle it in the loop after calling `client.loop()`.
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, pass);

  // Note: Local domain names (e.g. "Computer.local" on OSX) are not supported
  // by Arduino. You need to set the IP address directly.
  client.begin("public.cloud.shiftr.io", net);
  client.onMessage(messageReceived);

  connect();
}

void loop() {
  client.loop();

  if (!client.connected()) {
    connect();
  }

  // publish a message roughly every second.
  if (millis() - lastMillis > 1000) {
    lastMillis = millis();
    client.publish("/hello", "world");
  }
}

API

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

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():

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():

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:

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

void onMessage(MQTTClientCallbackSimpleFunction cb);
// Callback signature: std::function<void(String &topic, String &payload)>

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

void onMessageAdvanced(MQTTClientCallbackAdvancedFunction cb);
// Callback signature: std::function<void(MQTTClient *client, char topic[], char bytes[], int length)>
  • 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 <functional> you can directly register a function wrapper.

Set more advanced options:

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:

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 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:

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 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).

Publishes a message to the broker with an optional payload:

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

Subscribe to a topic:

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 subscribe has been successful (true).

Unsubscribe from a topic:

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

Sends and receives packets:

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:

bool connected();

Access low-level information for debugging:

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:

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.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].