WiFi心跳超时放宽:30s一次PINGREQ,连续2帧无应答(约60s)才复位(V1.4/V1.4-Chinese/V1.5 + README)

This commit is contained in:
helei 2026-08-11 11:46:45 +08:00
parent 8570eac171
commit 01a27be2e2
6 changed files with 44 additions and 23 deletions

View File

@ -135,15 +135,22 @@ void net_wifi_process(void)
NVIC_SystemReset(); NVIC_SystemReset();
} }
/* 15s 一次 PINGREQ上一帧 PINGREQ 未收到 PINGRESP 判断链 */ /* 30s 一次 PINGREQ须小于 MQTT keepalive 60s
if (HAL_GetTick() - s_ping_tick >= 15000) { * 2 PINGRESP 60s
* */
static uint8_t ping_miss = 0;
if (HAL_GetTick() - s_ping_tick >= 30000) {
if (g_mqttc_ping_outstanding) { if (g_mqttc_ping_outstanding) {
/* 心跳超时:服务器无响应(假在线/网络异常),直接复位重连 */ ping_miss++;
log_error("> WiFi: 心跳超时(服务器无响应),系统复位"); if (ping_miss >= 2) {
log_error("> WiFi: 心跳超时 60s服务器无响应系统复位");
reset_log_mark(RSN_PING_TIMEOUT); reset_log_mark(RSN_PING_TIMEOUT);
HAL_Delay(100); HAL_Delay(100);
NVIC_SystemReset(); NVIC_SystemReset();
} }
} else {
ping_miss = 0;
}
s_ping_tick = HAL_GetTick(); s_ping_tick = HAL_GetTick();
mqttc_ping(); mqttc_ping();
} }

View File

@ -116,7 +116,7 @@ WiFi 建链子顺序net_wifi_init阻塞式等待期间 vTaskDelay 让
② AT+CWJAP 连代码里固定的 SSID/PASSesp8266.h 的 WIFI_SSID/WIFI_PASS60s 倒计时) ② AT+CWJAP 连代码里固定的 SSID/PASSesp8266.h 的 WIFI_SSID/WIFI_PASS60s 倒计时)
③ ESP-Touch SmartConfig 智能配网60s 倒计时,配到的热点由模块保存) ③ ESP-Touch SmartConfig 智能配网60s 倒计时,配到的热点由模块保存)
全部失败 → 回 4G 全部失败 → 回 4G
WiFi 运行:15s MQTT PINGREQ 心跳TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 WiFi 运行:30s MQTT PINGREQ 心跳,连续 2 帧无应答(约 60s判死TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连
CLOSED=服务器主动断开/被平台踢下线ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s CLOSED=服务器主动断开/被平台踢下线ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s
``` ```

View File

@ -132,14 +132,21 @@ void net_wifi_process(void)
NVIC_SystemReset(); NVIC_SystemReset();
} }
/* 15s 一次 PINGREQ上一帧 PINGREQ 未收到 PINGRESP 判断链 */ /* 30s 一次 PINGREQ须小于 MQTT keepalive 60s
if (HAL_GetTick() - s_ping_tick >= 15000) { * 2 PINGRESP 60s
* */
static uint8_t ping_miss = 0;
if (HAL_GetTick() - s_ping_tick >= 30000) {
if (g_mqttc_ping_outstanding) { if (g_mqttc_ping_outstanding) {
/* 心跳超时:服务器无响应(假在线/网络异常),直接复位重连 */ ping_miss++;
log_error("> WiFi: ping timeout (server no response), system reset"); if (ping_miss >= 2) {
log_error("> WiFi: ping timeout 60s (server no response), system reset");
HAL_Delay(100); HAL_Delay(100);
NVIC_SystemReset(); NVIC_SystemReset();
} }
} else {
ping_miss = 0;
}
s_ping_tick = HAL_GetTick(); s_ping_tick = HAL_GetTick();
mqttc_ping(); mqttc_ping();
} }

View File

@ -84,7 +84,7 @@ WiFi 建链子顺序net_wifi_init阻塞式等待期间 vTaskDelay 让
② AT+CWJAP 连代码里固定的 SSID/PASSesp8266.h 的 WIFI_SSID/WIFI_PASS60s 倒计时) ② AT+CWJAP 连代码里固定的 SSID/PASSesp8266.h 的 WIFI_SSID/WIFI_PASS60s 倒计时)
③ ESP-Touch SmartConfig 智能配网60s 倒计时,配到的热点由模块保存) ③ ESP-Touch SmartConfig 智能配网60s 倒计时,配到的热点由模块保存)
全部失败 → 回 4G 全部失败 → 回 4G
WiFi 运行:15s MQTT PINGREQ 心跳TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 WiFi 运行:30s MQTT PINGREQ 心跳,连续 2 帧无应答(约 60s判死TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连
CLOSED=服务器主动断开/被平台踢下线ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s CLOSED=服务器主动断开/被平台踢下线ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s
``` ```

View File

@ -135,15 +135,22 @@ void net_wifi_process(void)
NVIC_SystemReset(); NVIC_SystemReset();
} }
/* 15s 一次 PINGREQ上一帧 PINGREQ 未收到 PINGRESP 判断链 */ /* 30s 一次 PINGREQ须小于 MQTT keepalive 60s
if (HAL_GetTick() - s_ping_tick >= 15000) { * 2 PINGRESP 60s
* */
static uint8_t ping_miss = 0;
if (HAL_GetTick() - s_ping_tick >= 30000) {
if (g_mqttc_ping_outstanding) { if (g_mqttc_ping_outstanding) {
/* 心跳超时:服务器无响应(假在线/网络异常),直接复位重连 */ ping_miss++;
log_error("> WiFi: 心跳超时(服务器无响应),系统复位"); if (ping_miss >= 2) {
log_error("> WiFi: 心跳超时 60s服务器无响应系统复位");
reset_log_mark(RSN_PING_TIMEOUT); reset_log_mark(RSN_PING_TIMEOUT);
HAL_Delay(100); HAL_Delay(100);
NVIC_SystemReset(); NVIC_SystemReset();
} }
} else {
ping_miss = 0;
}
s_ping_tick = HAL_GetTick(); s_ping_tick = HAL_GetTick();
mqttc_ping(); mqttc_ping();
} }

View File

@ -117,7 +117,7 @@ WiFi 建链子顺序net_wifi_init阻塞式等待期间 vTaskDelay 让
② AT+CWJAP 连代码里固定的 SSID/PASSesp8266.h 的 WIFI_SSID/WIFI_PASS60s 倒计时) ② AT+CWJAP 连代码里固定的 SSID/PASSesp8266.h 的 WIFI_SSID/WIFI_PASS60s 倒计时)
③ ESP-Touch SmartConfig 智能配网60s 倒计时,配到的热点由模块保存) ③ ESP-Touch SmartConfig 智能配网60s 倒计时,配到的热点由模块保存)
全部失败 → 回 4G 全部失败 → 回 4G
WiFi 运行:15s MQTT PINGREQ 心跳TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 WiFi 运行:30s MQTT PINGREQ 心跳,连续 2 帧无应答(约 60s判死TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连
CLOSED=服务器主动断开/被平台踢下线ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s CLOSED=服务器主动断开/被平台踢下线ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s
``` ```