1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include "freertos/event_groups.h"
#include <esp_event.h>
#include <esp_netif.h>
#include <esp_log.h>
#include "net.h"
#define MQTT_CONNECTED_BIT BIT0
static const char *tag = "mqtt";
static EventGroupHandle_t mqtt_evt_group;
static void mqtt_evt_handler(void *args, esp_event_base_t eb, int32_t evt_id, void *data)
{
esp_mqtt_event_handle_t evt = (esp_mqtt_event_handle_t) data;
switch (evt_id) {
case MQTT_EVENT_CONNECTED:
ESP_LOGI(tag, "MQTT_EVENT_CONNECTED");
xEventGroupSetBits(mqtt_evt_group, MQTT_CONNECTED_BIT);
break;
case MQTT_EVENT_PUBLISHED:
ESP_LOGI(tag, "MQTT_EVENT_PUBLISHED, msg_id=%d", evt->msg_id);
break;
default:
ESP_LOGI(tag, "MQTT event id:%d", evt->event_id);
break;
}
}
esp_mqtt_client_handle_t mqtt_connect(void)
{
esp_mqtt_client_handle_t client = NULL;
const esp_mqtt_client_config_t cfg = {
.host = CONFIG_BROKER_HOST,
.username = CONFIG_BROKER_USERNAME,
.password = CONFIG_BROKER_PASSWORD,
.client_id = CONFIG_BROKER_CLIENT_ID,
.transport = MQTT_TRANSPORT_OVER_SSL,
.protocol_ver = MQTT_PROTOCOL_V_3_1_1
};
if (!(client = esp_mqtt_client_init(&cfg))) {
ESP_LOGI(tag, "esp_mqtt_client_init() failed");
return NULL;
}
ESP_LOGI(tag, "MQTT broker: %s", cfg.host);
esp_mqtt_client_register_event(client,
ESP_EVENT_ANY_ID,
mqtt_evt_handler,
client);
mqtt_evt_group = xEventGroupCreate();
ESP_ERROR_CHECK(esp_mqtt_client_start(client));
xEventGroupWaitBits(mqtt_evt_group,
MQTT_CONNECTED_BIT,
pdFALSE,
pdFALSE,
portMAX_DELAY);
return client;
}
|