#include #include #include #include #include "esp_wifi.h" #include "esp_system.h" #include "nvs_flash.h" #include "esp_event.h" #include "esp_netif.h" #include "esp_log.h" #include "mqtt_client.h" #include "esp_tls.h" #include "esp_ota_ops.h" #include "my_data.h" static const char *TAG = "MQTT_TCP"; extern const uint8_t mqtt_eclipseprojects_io_pem_start[] asm("_binary_mqtt_eclipseprojects_io_pem_start"); extern const uint8_t mqtt_eclipseprojects_io_pem_end[] asm("_binary_mqtt_eclipseprojects_io_pem_end"); static void wifi_event_handler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { switch (event_id) { case WIFI_EVENT_STA_START: printf("WiFi connecting ... \n"); break; case WIFI_EVENT_STA_CONNECTED: printf("WiFi connected ... \n"); break; case WIFI_EVENT_STA_DISCONNECTED: printf("WiFi lost connection ... \n"); break; case IP_EVENT_STA_GOT_IP: printf("WiFi got IP ... \n\n"); break; default: break; } } void wifi_connection() { // 1 - Wi-Fi/LwIP Init Phase esp_netif_init(); // TCP/IP initiation s1.1 esp_event_loop_create_default(); // event loop s1.2 esp_netif_create_default_wifi_sta(); // WiFi station s1.3 wifi_init_config_t wifi_initiation = WIFI_INIT_CONFIG_DEFAULT(); esp_wifi_init(&wifi_initiation); // s1.4 // 2 - Wi-Fi Configuration Phase esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, wifi_event_handler, NULL); esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, wifi_event_handler, NULL); wifi_config_t wifi_configuration = { .sta = { .ssid = SSID, .password = PASS}}; esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_configuration); // 3 - Wi-Fi Start Phase esp_wifi_start(); // 4- Wi-Fi Connect Phase esp_wifi_connect(); } static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event) { esp_mqtt_client_handle_t client = event->client; switch (event->event_id) { case MQTT_EVENT_CONNECTED: ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); esp_mqtt_client_subscribe(client, "my_topic", 0); esp_mqtt_client_publish(client, "my_topic", "Hi to all from ESP32 .........", 0, 1, 0); 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); 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("\nTOPIC=%.*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"); 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) { ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id); mqtt_event_handler_cb(event_data); } static void mqtt_app_start(void) { esp_mqtt_client_config_t mqtt_cfg = { .uri = "mqtts://test.mosquitto.org:8883", .cert_pem = (const char *)mqtt_eclipseprojects_io_pem_start, }; 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); } void app_main(void) { nvs_flash_init(); wifi_connection(); vTaskDelay(2000 / portTICK_PERIOD_MS); printf("WIFI was initiated ...........\n"); mqtt_app_start(); }