问题请教,esp32-c3 wifi和mqtt实现重连方法有哪些?

dami88
Posts: 12
Joined: Sat May 07, 2022 1:36 am

问题请教,esp32-c3 wifi和mqtt实现重连方法有哪些?

Postby dami88 » Thu May 12, 2022 6:33 am

问题请教,esp32-c3 wifi和mqtt实现重连方法有哪些?

目前只实现了一种:
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
case MQTT_EVENT_DISCONNECTED:
//在这里加好像不行。
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
break;
case MQTT_EVENT_ERROR:
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));

}
//202205111413 test
esp_wifi_disconnect...;
esp_wifi_set_config... ;
esp_wifi_connect...;
esp_mqtt_client_disconnect...;
esp_mqtt_client_reconnect...;

。。。
}
能实现WiFi断网后再开启重连。
1,不知道这方法长期来讲是靠谱不
2,为什么在MQTT_EVENT_DISCONNECTED不行,在MQTT_EVENT_ERROR行呢?
3,在程序中还有什么方法能知道设备WiFi掉线了,mqtt连不上了?mqtt还可以靠这个事件。WiFi呢?
4,如果用个笨的方法WiFi断网就直接复位,长期的话,那会让设备出问题不。
谢谢大家。。。

ESP_YJM
Posts: 300
Joined: Fri Feb 26, 2021 10:30 am

Re: 问题请教,esp32-c3 wifi和mqtt实现重连方法有哪些?

Postby ESP_YJM » Thu May 12, 2022 6:47 am

1. 对于 MQTT 而言,其自身就支持自动重连,无需其他函数调用。
2. 对于 WIFI 的自动重连,可以参考这个 https://github.com/espressif/esp-idf/bl ... main.c#L68

dami88
Posts: 12
Joined: Sat May 07, 2022 1:36 am

Re: 问题请教,esp32-c3 wifi和mqtt实现重连方法有哪些?

Postby dami88 » Thu May 12, 2022 8:57 am

谢谢,按您的试了一下。
把例子的
void wifi_init_sta(void)
{

/* The event will not be processed after unregister */
// ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip));
// ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id));
// vEventGroupDelete(s_wifi_event_group);
//这几句注释了
}
然后自己的重启那几句注释了。启动不起来了。
但加上前面三局wifi的启动函数。就可以了。

证明mqtt确实是可以自己重启的。

wifi 如果不处理还是不能自动重启。

非常感谢。

Who is online

Users browsing this forum: No registered users and 45 guests