diff --git a/V1.4-Chinese/STM32F103_App1/HardWare/NETWORK/net_wifi.c b/V1.4-Chinese/STM32F103_App1/HardWare/NETWORK/net_wifi.c index 0578e6b..551aa7f 100644 --- a/V1.4-Chinese/STM32F103_App1/HardWare/NETWORK/net_wifi.c +++ b/V1.4-Chinese/STM32F103_App1/HardWare/NETWORK/net_wifi.c @@ -135,14 +135,21 @@ void net_wifi_process(void) NVIC_SystemReset(); } - /* 15s 一次 PINGREQ;上一帧 PINGREQ 未收到 PINGRESP 判断链 */ - if (HAL_GetTick() - s_ping_tick >= 15000) { + /* 30s 一次 PINGREQ(须小于 MQTT keepalive 60s); + * 连续 2 帧无 PINGRESP(约 60s 无响应)才判链路死亡,复位重连, + * 容忍单次网络抖动,避免误复位 */ + static uint8_t ping_miss = 0; + if (HAL_GetTick() - s_ping_tick >= 30000) { if (g_mqttc_ping_outstanding) { - /* 心跳超时:服务器无响应(假在线/网络异常),直接复位重连 */ - log_error("> WiFi: 心跳超时(服务器无响应),系统复位"); - reset_log_mark(RSN_PING_TIMEOUT); - HAL_Delay(100); - NVIC_SystemReset(); + ping_miss++; + if (ping_miss >= 2) { + log_error("> WiFi: 心跳超时 60s(服务器无响应),系统复位"); + reset_log_mark(RSN_PING_TIMEOUT); + HAL_Delay(100); + NVIC_SystemReset(); + } + } else { + ping_miss = 0; } s_ping_tick = HAL_GetTick(); mqttc_ping(); diff --git a/V1.4-Chinese/STM32F103_App1/README.md b/V1.4-Chinese/STM32F103_App1/README.md index c9d41e2..59a3650 100644 --- a/V1.4-Chinese/STM32F103_App1/README.md +++ b/V1.4-Chinese/STM32F103_App1/README.md @@ -116,7 +116,7 @@ WiFi 建链子顺序(net_wifi_init,阻塞式,等待期间 vTaskDelay 让 ② AT+CWJAP 连代码里固定的 SSID/PASS(esp8266.h 的 WIFI_SSID/WIFI_PASS,60s 倒计时) ③ ESP-Touch SmartConfig 智能配网(60s 倒计时,配到的热点由模块保存) 全部失败 → 回 4G -WiFi 运行:15s MQTT PINGREQ 心跳;TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 +WiFi 运行:30s MQTT PINGREQ 心跳,连续 2 帧无应答(约 60s)判死;TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 (CLOSED=服务器主动断开/被平台踢下线;ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s) ``` diff --git a/V1.4/STM32F103_App1/HardWare/NETWORK/net_wifi.c b/V1.4/STM32F103_App1/HardWare/NETWORK/net_wifi.c index f3ec1e9..654229d 100644 --- a/V1.4/STM32F103_App1/HardWare/NETWORK/net_wifi.c +++ b/V1.4/STM32F103_App1/HardWare/NETWORK/net_wifi.c @@ -132,13 +132,20 @@ void net_wifi_process(void) NVIC_SystemReset(); } - /* 15s 一次 PINGREQ;上一帧 PINGREQ 未收到 PINGRESP 判断链 */ - if (HAL_GetTick() - s_ping_tick >= 15000) { + /* 30s 一次 PINGREQ(须小于 MQTT keepalive 60s); + * 连续 2 帧无 PINGRESP(约 60s 无响应)才判链路死亡,复位重连, + * 容忍单次网络抖动,避免误复位 */ + static uint8_t ping_miss = 0; + if (HAL_GetTick() - s_ping_tick >= 30000) { if (g_mqttc_ping_outstanding) { - /* 心跳超时:服务器无响应(假在线/网络异常),直接复位重连 */ - log_error("> WiFi: ping timeout (server no response), system reset"); - HAL_Delay(100); - NVIC_SystemReset(); + ping_miss++; + if (ping_miss >= 2) { + log_error("> WiFi: ping timeout 60s (server no response), system reset"); + HAL_Delay(100); + NVIC_SystemReset(); + } + } else { + ping_miss = 0; } s_ping_tick = HAL_GetTick(); mqttc_ping(); diff --git a/V1.4/STM32F103_App1/README.md b/V1.4/STM32F103_App1/README.md index cf77674..10d0ac9 100644 --- a/V1.4/STM32F103_App1/README.md +++ b/V1.4/STM32F103_App1/README.md @@ -84,7 +84,7 @@ WiFi 建链子顺序(net_wifi_init,阻塞式,等待期间 vTaskDelay 让 ② AT+CWJAP 连代码里固定的 SSID/PASS(esp8266.h 的 WIFI_SSID/WIFI_PASS,60s 倒计时) ③ ESP-Touch SmartConfig 智能配网(60s 倒计时,配到的热点由模块保存) 全部失败 → 回 4G -WiFi 运行:15s MQTT PINGREQ 心跳;TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 +WiFi 运行:30s MQTT PINGREQ 心跳,连续 2 帧无应答(约 60s)判死;TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 (CLOSED=服务器主动断开/被平台踢下线;ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s) ``` diff --git a/V1.5/STM32F103_App1/HardWare/NETWORK/net_wifi.c b/V1.5/STM32F103_App1/HardWare/NETWORK/net_wifi.c index bc45b36..a9314ee 100644 --- a/V1.5/STM32F103_App1/HardWare/NETWORK/net_wifi.c +++ b/V1.5/STM32F103_App1/HardWare/NETWORK/net_wifi.c @@ -135,14 +135,21 @@ void net_wifi_process(void) NVIC_SystemReset(); } - /* 15s һ PINGREQһ֡ PINGREQ δյ PINGRESP ж */ - if (HAL_GetTick() - s_ping_tick >= 15000) { + /* 30s һ PINGREQС MQTT keepalive 60s + * 2 ֡ PINGRESPԼ 60s Ӧ·λ + * ̵綶λ */ + static uint8_t ping_miss = 0; + if (HAL_GetTick() - s_ping_tick >= 30000) { if (g_mqttc_ping_outstanding) { - /* ʱӦ/쳣ֱӸλ */ - log_error("> WiFi: ʱӦϵͳλ"); - reset_log_mark(RSN_PING_TIMEOUT); - HAL_Delay(100); - NVIC_SystemReset(); + ping_miss++; + if (ping_miss >= 2) { + log_error("> WiFi: ʱ 60sӦϵͳλ"); + reset_log_mark(RSN_PING_TIMEOUT); + HAL_Delay(100); + NVIC_SystemReset(); + } + } else { + ping_miss = 0; } s_ping_tick = HAL_GetTick(); mqttc_ping(); diff --git a/V1.5/STM32F103_App1/README.md b/V1.5/STM32F103_App1/README.md index 8f5bbf7..f536986 100644 --- a/V1.5/STM32F103_App1/README.md +++ b/V1.5/STM32F103_App1/README.md @@ -117,7 +117,7 @@ WiFi 建链子顺序(net_wifi_init,阻塞式,等待期间 vTaskDelay 让 ② AT+CWJAP 连代码里固定的 SSID/PASS(esp8266.h 的 WIFI_SSID/WIFI_PASS,60s 倒计时) ③ ESP-Touch SmartConfig 智能配网(60s 倒计时,配到的热点由模块保存) 全部失败 → 回 4G -WiFi 运行:15s MQTT PINGREQ 心跳;TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 +WiFi 运行:30s MQTT PINGREQ 心跳,连续 2 帧无应答(约 60s)判死;TCP 断开(CLOSED)/心跳超时 → 打印原因并直接整机复位重连 (CLOSED=服务器主动断开/被平台踢下线;ping 超时=服务器无响应/假在线,最坏检测延迟 ~30s) ```