Hendrik Langer
5 years ago
3 changed files with 155 additions and 0 deletions
@ -0,0 +1,105 @@ |
|||||
|
#include "XD0MQTT.h" |
||||
|
|
||||
|
#include <stdio.h> |
||||
|
#include <stdint.h> |
||||
|
#include <stddef.h> |
||||
|
#include <string.h> |
||||
|
#include "esp_wifi.h" |
||||
|
#include "esp_system.h" |
||||
|
#include "nvs_flash.h" |
||||
|
#include "esp_event.h" |
||||
|
#include "tcpip_adapter.h" |
||||
|
|
||||
|
#include "freertos/FreeRTOS.h" |
||||
|
#include "freertos/task.h" |
||||
|
#include "freertos/semphr.h" |
||||
|
#include "freertos/queue.h" |
||||
|
|
||||
|
#include "lwip/sockets.h" |
||||
|
#include "lwip/dns.h" |
||||
|
#include "lwip/netdb.h" |
||||
|
|
||||
|
#include "esp_log.h" |
||||
|
#include "mqtt_client.h" |
||||
|
#include "esp_tls.h" |
||||
|
|
||||
|
static const char *TAG = "MQTT"; |
||||
|
|
||||
|
XD0MQTT::XD0MQTT() {} |
||||
|
|
||||
|
static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event) |
||||
|
{ |
||||
|
esp_mqtt_client_handle_t client = event->client; |
||||
|
int msg_id; |
||||
|
//int mbedtls_err; esp_err_t err;
|
||||
|
// your_context_t *context = event->context;
|
||||
|
switch (event->event_id) { |
||||
|
case MQTT_EVENT_CONNECTED: |
||||
|
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); |
||||
|
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos0", 0); |
||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); |
||||
|
|
||||
|
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1); |
||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); |
||||
|
|
||||
|
msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1"); |
||||
|
ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id); |
||||
|
break; |
||||
|
case MQTT_EVENT_DISCONNECTED: |
||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED"); |
||||
|
break; |
||||
|
|
||||
|
case MQTT_EVENT_SUBSCRIBED: |
||||
|
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id); |
||||
|
msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0); |
||||
|
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id); |
||||
|
break; |
||||
|
case MQTT_EVENT_UNSUBSCRIBED: |
||||
|
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id); |
||||
|
break; |
||||
|
case MQTT_EVENT_PUBLISHED: |
||||
|
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id); |
||||
|
break; |
||||
|
case MQTT_EVENT_DATA: |
||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA"); |
||||
|
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic); |
||||
|
printf("DATA=%.*s\r\n", event->data_len, event->data); |
||||
|
break; |
||||
|
case MQTT_EVENT_ERROR: |
||||
|
ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); |
||||
|
//mbedtls_err = 0;
|
||||
|
//err = esp_tls_get_and_clear_last_error(event->error_handle, &mbedtls_err, NULL);
|
||||
|
//ESP_LOGI(TAG, "Last esp error code: 0x%x", err);
|
||||
|
//ESP_LOGI(TAG, "Last mbedtls failure: 0x%x", mbedtls_err);
|
||||
|
break; |
||||
|
default: |
||||
|
ESP_LOGI(TAG, "Other event id:%d", event->event_id); |
||||
|
break; |
||||
|
} |
||||
|
return ESP_OK; |
||||
|
} |
||||
|
|
||||
|
//static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
|
||||
|
static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) { |
||||
|
esp_mqtt_client_handle_t client = event->client; |
||||
|
mqtt_event_handler_cb(event); |
||||
|
//ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
|
||||
|
//mqtt_event_handler_cb(event_data);
|
||||
|
} |
||||
|
|
||||
|
bool XD0MQTT::begin(void) { |
||||
|
esp_mqtt_client_config_t mqtt_cfg; |
||||
|
mqtt_cfg.uri = MQTT_BROKER_URI; |
||||
|
mqtt_cfg.event_handle = mqtt_event_handler; |
||||
|
mqtt_cfg.cert_pem = (const char *)rootCACertificate; |
||||
|
mqtt_cfg.username = MQTT_USERNAME; |
||||
|
mqtt_cfg.password = MQTT_PASSWORD; |
||||
|
mqtt_cfg.user_context = (void*)this; |
||||
|
|
||||
|
ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size()); |
||||
|
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); |
||||
|
|
||||
|
return true; |
||||
|
} |
@ -0,0 +1,46 @@ |
|||||
|
#ifndef _XD0MQTT_H |
||||
|
#define _XD0MQTT_H |
||||
|
|
||||
|
#include <Arduino.h> |
||||
|
|
||||
|
class XD0MQTT { |
||||
|
public: |
||||
|
XD0MQTT(void); |
||||
|
bool begin(void); |
||||
|
private: |
||||
|
// openssl s_client -showcerts -connect home.xd0.de:8883 </dev/null 2>/dev/null|openssl x509 -outform PEM >mqtt_xd0.de.pem
|
||||
|
const char* rootCACertificate = \ |
||||
|
"-----BEGIN CERTIFICATE-----\n" \ |
||||
|
"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\n" \ |
||||
|
"-----END CERTIFICATE-----\n"; |
||||
|
}; |
||||
|
|
||||
|
#endif /* _XD0MQTT_H */ |
Loading…
Reference in new issue