2018-07-24 16:59:03 +02: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 16:37:27 +01: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 16:59:03 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Configuration
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-------------
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								URI
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								^^^
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   Curently support `` mqtt `` , `` mqtts `` , `` ws `` , `` wss ``  schemes
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   MQTT over TCP samples:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -   `` mqtt://iot.eclipse.org `` : MQTT over TCP, default port 1883:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -   `` mqtt://iot.eclipse.org:1884 ``  MQTT over TCP, port 1884:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -   `` mqtt://username:password@iot.eclipse.org:1884 ``  MQTT over TCP,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      port 1884, with username and password
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   MQTT over SSL samples:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -   `` mqtts://iot.eclipse.org `` : MQTT over SSL, port 8883
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -   `` mqtts://iot.eclipse.org:8884 `` : MQTT over SSL, port 8884
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   MQTT over Websocket samples:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -   `` ws://iot.eclipse.org:80/ws `` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   MQTT over Websocket Secure samples:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   -   `` wss://iot.eclipse.org:443/ws `` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   Minimal configurations:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								..  code ::  c
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const esp_mqtt_client_config_t mqtt_cfg = {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        .uri = "mqtt://iot.eclipse.org",
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // .user_context = (void *)your_context
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    };
 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-17 15:56:59 +02: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 16:59:03 +02: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 = {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        .uri = "mqtt://iot.eclipse.org:1234",
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        .port = 4567,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    };
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    //MQTT client will connect to iot.eclipse.org using port 4567
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SSL
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								^^^
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   Get certificate from server, example: `` iot.eclipse.org `` 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   `` openssl s_client -showcerts -connect iot.eclipse.org:8883 </dev/null 2>/dev/null|openssl x509 -outform PEM >iot_eclipse_org.pem `` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   Check the sample application: `` examples/mqtt_ssl `` 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-   Configuration:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								..  code ::  cpp
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const esp_mqtt_client_config_t mqtt_cfg = {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        .uri = "mqtts://iot.eclipse.org:8883",
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        .event_handle = mqtt_event_handler,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        .cert_pem = (const char *)iot_eclipse_org_pem_start,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    };
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For more options on `` esp_mqtt_client_config_t `` , please refer to API reference below
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-23 11:54:31 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Change settings in Project Configuration Menu
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-24 16:59:03 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								::
 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-23 11:54:31 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    idf.py menuconfig
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    -> Component config -> ESP-MQTT Configuration
 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-24 16:59:03 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-19 15:29:09 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  :ref: `CONFIG_MQTT_PROTOCOL_311` : Enables 3.1.1 version of MQTT protocol
  
						 
					
						
							
								
									
										
										
										
											2018-07-24 16:59:03 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-19 15:29:09 +10: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 16:59:03 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-19 15:29:09 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  :ref: `CONFIG_MQTT_CUSTOM_OUTBOX` : Disables default implementation of mqtt_outbox, so a specific implementaion can be supplied
  
						 
					
						
							
								
									
										
										
										
											2018-07-24 16:59:03 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								API Reference
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-------------
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-19 15:29:09 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								..  include ::  /_build/inc/mqtt_client.inc