2018-07-24 14:59:03 +00:00
ESP-MQTT
========
Overview
--------
ESP-MQTT is an implementation of MQTT protocol client (MQTT is a lightweight publish/subscribe messaging protocol).
Features
--------
* supports MQTT over TCP, SSL with mbedtls, MQTT over Websocket, MQTT over Websocket Secure.
* Easy to setup with URI
* Multiple instances (Multiple clients in one application)
* Support subscribing, publishing, authentication, will messages, keep alive pings and all 3 QoS levels (it should be a fully functional client).
Application Example
-------------------
2018-12-02 15:37:27 +00:00
* :example: `protocols/mqtt/tcp` : MQTT over tcp, default port 1883
* :example: `protocols/mqtt/ssl` : MQTT over tcp, default port 8883
* :example: `protocols/mqtt/ws` : MQTT over Websocket, default port 80
* :example: `protocols/mqtt/wss` : MQTT over Websocket Secure, default port 443
2018-07-24 14:59:03 +00:00
Configuration
-------------
URI
^^^
- Curently support `` mqtt `` , `` mqtts `` , `` ws `` , `` wss `` schemes
- MQTT over TCP samples:
2019-09-27 01:35:26 +00:00
- `` mqtt://mqtt.eclipse.org `` : MQTT over TCP, default port 1883:
- `` mqtt://mqtt.eclipse.org:1884 `` MQTT over TCP, port 1884:
- `` mqtt://username:password@mqtt.eclipse.org:1884 `` MQTT over TCP,
2018-07-24 14:59:03 +00:00
port 1884, with username and password
- MQTT over SSL samples:
2019-09-27 01:35:26 +00:00
- `` mqtts://mqtt.eclipse.org `` : MQTT over SSL, port 8883
- `` mqtts://mqtt.eclipse.org:8884 `` : MQTT over SSL, port 8884
2018-07-24 14:59:03 +00:00
- MQTT over Websocket samples:
2019-09-27 01:35:26 +00:00
- `` ws://mqtt.eclipse.org:80/mqtt ``
2018-07-24 14:59:03 +00:00
- MQTT over Websocket Secure samples:
2019-09-27 01:35:26 +00:00
- `` wss://mqtt.eclipse.org:443/mqtt ``
2018-07-24 14:59:03 +00:00
- Minimal configurations:
.. code :: c
const esp_mqtt_client_config_t mqtt_cfg = {
2019-09-27 01:35:26 +00:00
.uri = "mqtt://mqtt.eclipse.org",
2018-07-24 14:59:03 +00:00
// .user_context = (void *)your_context
};
2019-04-17 13:56:59 +00:00
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
esp_mqtt_client_start(client);
- Note: By default mqtt client uses event loop library to post related mqtt events (connected, subsribed, published, etc.)
2018-07-24 14:59:03 +00:00
- If there are any options related to the URI in
`` esp_mqtt_client_config_t `` , the option defined by the URI will be
overridden. Sample:
.. code :: c
const esp_mqtt_client_config_t mqtt_cfg = {
2019-09-27 01:35:26 +00:00
.uri = "mqtt://mqtt.eclipse.org:1234",
2018-07-24 14:59:03 +00:00
.port = 4567,
};
2019-09-27 01:35:26 +00:00
//MQTT client will connect to mqtt.eclipse.org using port 4567
2018-07-24 14:59:03 +00:00
SSL
^^^
2019-09-27 01:35:26 +00:00
- Get certificate from server, example: `` mqtt.eclipse.org ``
`` openssl s_client -showcerts -connect mqtt.eclipse.org:8883 </dev/null 2>/dev/null|openssl x509 -outform PEM >mqtt_eclipse_org.pem ``
2018-07-24 14:59:03 +00:00
- Check the sample application: `` examples/mqtt_ssl ``
- Configuration:
.. code :: cpp
const esp_mqtt_client_config_t mqtt_cfg = {
2019-09-27 01:35:26 +00:00
.uri = "mqtts://mqtt.eclipse.org:8883",
2018-07-24 14:59:03 +00:00
.event_handle = mqtt_event_handler,
2019-09-27 01:35:26 +00:00
.cert_pem = (const char *)mqtt_eclipse_org_pem_start,
2018-07-24 14:59:03 +00:00
};
For more options on `` esp_mqtt_client_config_t `` , please refer to API reference below
2019-06-23 01:54:31 +00:00
Change settings in Project Configuration Menu
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2018-07-24 14:59:03 +00:00
::
2019-06-23 01:54:31 +00:00
idf.py menuconfig
-> Component config -> ESP-MQTT Configuration
2018-07-24 14:59:03 +00:00
2018-09-19 05:29:09 +00:00
- :ref: `CONFIG_MQTT_PROTOCOL_311` : Enables 3.1.1 version of MQTT protocol
2018-07-24 14:59:03 +00:00
2018-09-19 05:29:09 +00:00
- :ref: `CONFIG_MQTT_TRANSPORT_SSL` , :ref: `CONFIG_MQTT_TRANSPORT_WEBSOCKET` : Enables specific MQTT transport layer, such as SSL, WEBSOCKET, WEBSOCKET_SECURE
2018-07-24 14:59:03 +00:00
2018-09-19 05:29:09 +00:00
- :ref: `CONFIG_MQTT_CUSTOM_OUTBOX` : Disables default implementation of mqtt_outbox, so a specific implementaion can be supplied
2018-07-24 14:59:03 +00:00
API Reference
-------------
2018-09-19 05:29:09 +00:00
.. include :: /_build/inc/mqtt_client.inc