mirror of
https://github.com/SIMS-IOT-Devices/FreeRTOS-ESP-IDF-MQTTS.git
synced 2024-09-18 16:36:09 -04:00
127 lines
4.1 KiB
C
127 lines
4.1 KiB
C
#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 "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();
|
|
} |