The general flow when
Code: Select all
MQTT_CLIENT: Error create mqtt task
1.ESP Bootup
2.WIFI_EVENT_STA_START
3.WIFI_EVENT_AP_START
4.WIFI_EVENT_STA_CONNECTED
5.IP_EVENT_STA_GOT_IP
6.MQTT app start
then after some time,
7.WIFI_EVENT_STA_DISCONNECTED
8.MQTT app stop
9.WIFI_EVENT_STA_CONNECTED
10.IP_EVENT_STA_GOT_IP
11. MQTT app start
but,
Code: Select all
E (348564) MQTT_CLIENT: Error create mqtt task
E (348574) MQTT:
FAILED TO START MQTT CLIENT -1
mqtt app start function is as follows
Code: Select all
void mqtt_app_start(char mac_id[])
{
mqtt_events = xEventGroupCreate();
mqtt_credential_read_nvs(); //++ function to read MQTT credential from NVS
sprintf(mqtt_var.data_topic, "%s/data", mac_id);
esp_mqtt_client_config_t mqtt_config = {
.uri = mqtt_var.mqtt_url,
.username = mqtt_var.mqtt_user,
.password = mqtt_var.mqtt_pass,
.keepalive = 60};
client = esp_mqtt_client_init(&mqtt_config);
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
esp_err_t mqtt_err = esp_mqtt_client_start(client);
if (mqtt_err != ESP_OK)
{
ESP_LOGE(TAG, "\n FAILED TO START MQTT CLIENT %d\n", mqtt_err);
vTaskDelay(100/ portTICK_PERIOD_MS);
esp_restart();
}
else
{
xEventGroupWaitBits(mqtt_events, MQTT_CONNECTED | MQTT_DISCONNECTED, pdTRUE, pdFALSE, pdMS_TO_TICKS(10000));
}
}
mqtt stop function is as follows
Code: Select all
void mqtt_app_stop()
{
ESP_LOGE(TAG, "\n\nxx -- STOPPING MQTT -- xx\n");
mqtt_con_flag = false;
mqtt_connected = false;
esp_err_t mqtt_err = esp_mqtt_client_stop(client);
if (mqtt_err != ESP_OK)
{
ESP_LOGE(TAG, "\n FAILED TO STOP MQTT CLIENT %s\n", esp_err_to_name(mqtt_err));
}
else
{
if(HandleMqtt != NULL)
{
vTaskDelete(HandleMqtt);
}
// vTaskDelete(HandleMqtt); //creating problems in wifi reconnection
xEventGroupSetBits(mqtt_events, MQTT_DISCONNECTED);
}
}
Please help. Thank you.