2026-08-10 21:18:36 +08:00
/* net_wifi.c - WiFi <20> <> <EFBFBD> ˣ<EFBFBD> <CBA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> µ<EFBFBD> ͨ<EFBFBD> <CDA8> ʵ<EFBFBD> <CAB5> ֮һ <D6AE> <D2BB>
*
* <EFBFBD> <EFBFBD> <EFBFBD> ɣ <EFBFBD> esp8266 . c ( ESP - 01 S AT <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> / TCP <EFBFBD> <EFBFBD> ) + mqtt_client . c ( <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> MQTT 3.1 .1 ) <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˳ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӳ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> AP <EFBFBD> Զ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ( 20 s ) <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̶ <EFBFBD> SSID ( 60 s ) <EFBFBD> <EFBFBD>
* Smart Config <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ( 60 s ) <EFBFBD> <EFBFBD> ʧ <EFBFBD> ܷ <EFBFBD> <EFBFBD> أ <EFBFBD> <EFBFBD> <EFBFBD> network . c <EFBFBD> л <EFBFBD> 4 G <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> н Σ <EFBFBD> mqttc_process <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD> <EFBFBD> ģ <EFBFBD> 30 s <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ( CLOSED / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ ) <EFBFBD> <EFBFBD> ready <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> network . c <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> л <EFBFBD> 4 G <EFBFBD> <EFBFBD>
*/
# include "net_wifi.h"
# include "esp8266.h"
# include "mqtt_client.h"
# include "network.h"
# include "air780e.h" /* bg_delay */
# include "uart.h"
# include "log.h"
# include "reset_log.h"
# include "stdio.h"
# include "string.h"
volatile uint8_t g_wifi_mqtt_ready = 0 ;
volatile uint8_t g_wifi_first_publish_ok = 0 ;
/* WiFi ģ<> <C4A3> <EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ־<EFBFBD> <D6BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> RECOVERY <20> <> <EFBFBD> <EFBFBD> (sys<79> <73> <EFBFBD> <EFBFBD> )<29> <> λ<EFBFBD> <CEBB>
* net <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> net_wifi_process <EFBFBD> <EFBFBD> ִ <EFBFBD> С <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> UART4 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> տ <EFBFBD> <EFBFBD> <EFBFBD> net <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4 G <EFBFBD> л <EFBFBD> / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͻ */
volatile uint8_t g_wifi_restore_req = 0 ;
static uint32_t s_ping_tick = 0 ;
/* <20> <> <EFBFBD> з<EFBFBD> <D0B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݴ<EFBFBD> */
static char s_topic_up [ 48 ] ;
/*==== <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɹ<EFBFBD> <C9B9> <EFBFBD> <EFBFBD> <EFBFBD> 0 <20> <> <EFBFBD> <EFBFBD> g_wifi_mqtt_ready ====
* <EFBFBD> <EFBFBD> ˳ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> EEPROM <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " <EFBFBD> ϴγ ɹ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʽ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> ϴ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȳ <EFBFBD> <EFBFBD> Ѵ <EFBFBD> AP <EFBFBD> Զ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ( CIPSTATUS , 10 s )
* Ȼ <EFBFBD> <EFBFBD> ͳ һ <EFBFBD> <EFBFBD> <EFBFBD> ̶ <EFBFBD> SSID ( 60 s <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ ) <EFBFBD> <EFBFBD> SmartConfig ( 60 s <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ )
* <EFBFBD> ɹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʵ <EFBFBD> <EFBFBD> ʹ <EFBFBD> õ ķ <EFBFBD> ʽ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> EEPROM <EFBFBD> <EFBFBD> <EFBFBD> 䣨 NET_SaveMode <EFBFBD> <EFBFBD> */
int net_wifi_init ( void )
{
log_info ( " > WiFi: <20> <> ʼ <EFBFBD> <CABC> ... " ) ;
g_wifi_mqtt_ready = 0 ;
g_wifi_first_publish_ok = 0 ;
esp_gpio_init ( ) ;
UART4_StartRx ( ) ;
if ( esp_reset ( ) ! = 0 ) return - 1 ;
if ( esp_send_cmd ( " AT " , " OK " , 2000 ) ! = 0 ) return - 1 ;
esp_send_cmd ( " ATE0 " , " OK " , 1000 ) ; /* <20> ػ<EFBFBD> <D8BB> ԣ<EFBFBD> ʧ<EFBFBD> ܲ<EFBFBD> <DCB2> <EFBFBD> <EFBFBD> <EFBFBD> */
if ( esp_send_cmd ( " AT+CWMODE=1 " , " OK " , 2000 ) ! = 0 ) return - 1 ;
int joined = 0 ;
uint8_t via_smart = 0 ; /* 1=<3D> <> <EFBFBD> <EFBFBD> <EFBFBD> õ<EFBFBD> <C3B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ㣨<C8B5> Ѵ <EFBFBD> AP<41> <50> SmartConfig<69> <67> */
/* <20> ϴ<EFBFBD> <CFB4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ<EFBFBD> <C8B5> ɹ<EFBFBD> <C9B9> ģ<EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> 룬<EFBFBD> <EBA3AC> <EFBFBD> Ȳ<EFBFBD> <C8B2> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> */
if ( NET_GetLastMode ( ) = = NET_MODE_WIFI_SMART ) {
if ( esp_saved_ap_connected ( 10 ) = = 0 ) {
joined = 1 ;
via_smart = 1 ;
}
}
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> SSID/PASS */
if ( ! joined & & esp_join_fixed_ap ( ) = = 0 ) {
joined = 1 ;
via_smart = 0 ;
}
/* <20> ̶<EFBFBD> <CCB6> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϣ<EFBFBD> <CFA3> <EFBFBD> SmartConfig <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ESP-Touch APP <20> 㲥<EFBFBD> <E3B2A5> <EFBFBD> 룩 */
if ( ! joined ) {
if ( esp_smartconfig ( ) = = 0 ) {
joined = 1 ;
via_smart = 1 ;
} else {
log_warn ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> AP <20> <> <EFBFBD> ӷ<EFBFBD> ʽ <EFBFBD> <CABD> ʧ<EFBFBD> <CAA7> " ) ;
return - 1 ;
}
}
/* TCP <> <CDB8> <EFBFBD> <EFBFBD> MQTT <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
if ( esp_enter_transparent ( MqttInfoStr . ServerIP , MqttInfoStr . ServerPort ) ! = 0 ) return - 1 ;
/* <20> <> <EFBFBD> <EFBFBD> MQTT <20> <> <EFBFBD> <EFBFBD> + <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
mqttc_init ( MqttInfoStr . ClientID , MqttInfoStr . Username , MqttInfoStr . Passward ) ;
if ( mqttc_connect ( ) ! = 0 ) return - 1 ;
{
char topic_down [ 48 ] ;
snprintf ( topic_down , sizeof ( topic_down ) , " %s%s " , MqttInfoStr . Topic , MqttInfoStr . ClientID ) ;
if ( mqttc_subscribe ( topic_down ) ! = 0 ) return - 1 ;
snprintf ( s_topic_up , sizeof ( s_topic_up ) , " /iot/data/up/%s " , MqttInfoStr . ClientID ) ;
}
g_wifi_mqtt_ready = 1 ;
s_ping_tick = HAL_GetTick ( ) ;
log_info ( " > WiFi: Ready " ) ;
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʽ <EFBFBD> <CABD> <EFBFBD> 䣨<EFBFBD> <E4A3A8> <EFBFBD> 仯ʱд EEPROM<4F> <4D> */
NET_SaveMode ( via_smart ? NET_MODE_WIFI_SMART : NET_MODE_WIFI_FIXED ) ;
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> һ <EFBFBD> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4G <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> 루ͬʱ<CDAC> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> ״η<D7B4> <CEB7> <EFBFBD> <EFBFBD> ɹ<EFBFBD> <C9B9> <EFBFBD> */
NET_publish_power ( 1 ) ;
return 0 ;
}
/*==== <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ѯ<EFBFBD> <D1AF> <EFBFBD> <EFBFBD> <EFBFBD> б <EFBFBD> <D0B1> Ľ<EFBFBD> <C4BD> <EFBFBD> + <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ====*/
void net_wifi_process ( void )
{
/* <20> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> RECOVERY<52> <59> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> net <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> У <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> 뱾 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ľ <EFBFBD> <EFBFBD> <EFBFBD> / <EFBFBD> շ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
if ( g_wifi_restore_req ) {
g_wifi_restore_req = 0 ;
log_warn ( " > WiFi: <20> յ<EFBFBD> <D5B5> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <D6B4> AT+RESTORE <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
g_net_tx_busy = 1 ;
g_wifi_mqtt_ready = 0 ;
reset_log_mark ( RSN_CMD_RECOVERY ) ;
if ( esp_factory_restore ( ) ! = 0 ) {
log_warn ( " > WiFi: RESTORE ʧ<> ܣ<EFBFBD> <DCA3> <EFBFBD> ǿ<EFBFBD> <C7BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
}
HAL_Delay ( 100 ) ;
NVIC_SystemReset ( ) ;
}
if ( ! g_wifi_mqtt_ready ) return ;
int r ;
while ( ( r = mqttc_process ( ) ) = = 1 ) { }
if ( r = = - 1 ) {
/* <20> յ<EFBFBD> CLOSED<45> <44> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ͽ<EFBFBD> TCP<43> <50> <EFBFBD> <EFBFBD> ƽ ̨<C6BD> <CCA8> <EFBFBD> <EFBFBD> <EFBFBD> ߣ<EFBFBD> <DFA3> <EFBFBD> ֱ<EFBFBD> Ӹ<EFBFBD> λ<EFBFBD> <CEBB> <EFBFBD> <EFBFBD> */
log_error ( " > WiFi: <20> <> <EFBFBD> ӱ<EFBFBD> <D3B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> رգ <D8B1> <D5A3> <EFBFBD> ƽ ̨<C6BD> <CCA8> <EFBFBD> <EFBFBD> <EFBFBD> ߣ<EFBFBD> <DFA3> <EFBFBD> ϵͳ<CFB5> <CDB3> λ " ) ;
reset_log_mark ( RSN_KICKED ) ;
HAL_Delay ( 100 ) ;
NVIC_SystemReset ( ) ;
}
2026-08-11 11:46:45 +08:00
/* 30s һ <> <D2BB> PINGREQ<45> <51> <EFBFBD> <EFBFBD> С <EFBFBD> <D0A1> MQTT keepalive 60s<30> <73> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 2 ֡ <EFBFBD> <EFBFBD> PINGRESP <EFBFBD> <EFBFBD> Լ 60 s <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӧ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> · <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> ̵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 綶 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ */
static uint8_t ping_miss = 0 ;
if ( HAL_GetTick ( ) - s_ping_tick > = 30000 ) {
2026-08-10 21:18:36 +08:00
if ( g_mqttc_ping_outstanding ) {
2026-08-11 11:46:45 +08:00
ping_miss + + ;
if ( ping_miss > = 2 ) {
log_error ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ 60s<30> <73> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> <EFBFBD> ϵͳ<CFB5> <CDB3> λ " ) ;
reset_log_mark ( RSN_PING_TIMEOUT ) ;
HAL_Delay ( 100 ) ;
NVIC_SystemReset ( ) ;
}
} else {
ping_miss = 0 ;
2026-08-10 21:18:36 +08:00
}
s_ping_tick = HAL_GetTick ( ) ;
mqttc_ping ( ) ;
}
}
/*==== <20> <> <EFBFBD> з<EFBFBD> <D0B7> <EFBFBD> ====*/
void net_wifi_publish_up ( const char * json )
{
if ( ! g_wifi_mqtt_ready ) return ;
if ( mqttc_publish ( s_topic_up , json ) = = 0 & & ! g_wifi_first_publish_ok ) {
g_wifi_first_publish_ok = 1 ;
log_info ( " > WiFi: <20> ״η<D7B4> <CEB7> <EFBFBD> <EFBFBD> ɹ<EFBFBD> " ) ;
}
}