Closed Shaopus closed 4 years ago
Hi @Shaopus
I assume that you meant ESP8266_RTOS_SDK in release/v3.3
, not the ESP-IDF in v3.3
, so this version of esp-mqtt: https://github.com/espressif/ESP8266_RTOS_SDK/tree/release/v3.3/components/mqtt/esp-mqtt
This version is based on an older revision of esp-mqtt, specifically this commit of esp-mqtt: 8b45c25fdca6e4bfe693321c368080db86b9c8ae and the errors you're getting are very likely concurrency issues, since the API locks were added a bit later to support publishing from a separate task in 752953dc3be007cca4255b66a35d3087e61f6a54.
As a workaround I might suggest replacing the content of components/mqtt/esp-mqtt
in ESP8266_RTOS_SDK with the latest version this library.
Hi @david-cermak
Thanks! It is OK when I use the latest version.
Environment
Problem Description
I use the example of esp-mqtt in ESP8266_RTOS_SDK,when I use timer(5s) to publish,shows me an error like:
Code
static EventGroupHandle_t wifi_event_group; const static int CONNECTED_BIT = BIT0; esp_mqtt_client_handle_t client;
static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) { esp_mqtt_client_handle_t client = event->client; int msg_id; // 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_publish(client, "/topic/qos1", "data_3", 0, 1, 0); ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
}
static esp_err_t wifi_event_handler(void ctx, system_event_t event) { / For accessing reason codes in case of disconnection / system_event_info_t *info = &event->event_info;
}
static void wifi_init(void) { tcpip_adapter_init(); wifi_event_group = xEventGroupCreate(); ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL)); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); wifi_config_t wifi_config = { .sta = { .ssid = CONFIG_WIFI_SSID, .password = CONFIG_WIFI_PASSWORD, }, }; ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); ESP_LOGI(TAG, "start the WIFI SSID:[%s]", CONFIG_WIFI_SSID); ESP_ERROR_CHECK(esp_wifi_start()); ESP_LOGI(TAG, "Waiting for wifi"); xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, portMAX_DELAY); }
static void mqtt_app_start(void) { esp_mqtt_client_config_t mqtt_cfg = { .uri = CONFIG_BROKER_URL, .event_handle = mqtt_event_handler, // .user_context = (void *)your_context };
if CONFIG_BROKER_URL_FROM_STDIN
endif / CONFIG_BROKER_URL_FROM_STDIN /
}
static void th2mqtt_timer_cb(TimerHandle_t xTimer) { int msg_id; msg_id = esp_mqtt_client_publish(client, "/topic/th", "{\"temperature\":25.5,\"humidity\":67.7}", 0, 0, 0); ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id); }
void app_main() { TimerHandle_t th_timer;
}
I (2144235) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2149236) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2154241) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2159242) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2164246) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2169247) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2174251) MQTT_EXAMPLE: sent publish successful, msg_id=0 E (2189254) MQTT_CLIENT: Error write data or timeout, written len = 0 E (2189257) MQTT_CLIENT: Error to public data to topic=/topic/th, qos=0 I (2189260) MQTT_EXAMPLE: sent publish successful, msg_id=-1 E (2199269) MQTT_CLIENT: Error write data or timeout, written len = 0 E (2199272) MQTT_CLIENT: Error to public data to topic=/topic/th, qos=0 I (2199275) MQTT_EXAMPLE: sent publish successful, msg_id=-1 E (2209282) MQTT_CLIENT: Error write data or timeout, written len = 0 E (2209285) MQTT_CLIENT: Error to public data to topic=/topic/th, qos=0 I (2209288) MQTT_EXAMPLE: sent publish successful, msg_id=-1 E (2219297) MQTT_CLIENT: Error write data or timeout, written len = 0 E (2219300) MQTT_CLIENT: Error to public data to topic=/topic/th, qos=0 I (2219303) MQTT_EXAMPLE: sent publish successful, msg_id=-1 I (2220568) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2220581) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2220592) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2220604) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2220616) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2224272) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2229273) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2234276) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2239279) MQTT_EXAMPLE: sent publish successful, msg_id=0 I (2244282) MQTT_EXAMPLE: sent publish successful, msg_id=0