2026-08-10 21:18:36 +08:00
/* esp8266.c - ESP-01S (AT<41> ̼<EFBFBD> ) <20> <> <EFBFBD> <EFBFBD>
*
* <EFBFBD> <EFBFBD> ֲ <EFBFBD> Բ ο <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̡ <EFBFBD> 4 · <EFBFBD> ̵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ƴ <EFBFBD> WIFI <EFBFBD> <EFBFBD> 4 G V3 .4 WIFI <EFBFBD> ص <EFBFBD> <EFBFBD> <EFBFBD> HARDWARE / WIFI / wifi . c <EFBFBD> <EFBFBD>
* <EFBFBD> ɱ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ HAL <EFBFBD> ⣬ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> USART2 <EFBFBD> <EFBFBD> Ϊ UART4 ( PC10 / PC11 ) <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> Ÿ <EFBFBD> Ϊ PA5 <EFBFBD> <EFBFBD>
*
* <EFBFBD> <EFBFBD> <EFBFBD> ջ <EFBFBD> <EFBFBD> 壺 <EFBFBD> <EFBFBD> 4 G <EFBFBD> <EFBFBD> <EFBFBD> ˹ <EFBFBD> <EFBFBD> <EFBFBD> U2_CopyBuff <EFBFBD> <EFBFBD> WiFi <EFBFBD> <EFBFBD> <EFBFBD> ˼ <EFBFBD> <EFBFBD> <EFBFBD> ʱ <EFBFBD> <EFBFBD> UART4 IDLE <EFBFBD> ж <EFBFBD> <EFBFBD> ӣ <EFBFBD>
* <EFBFBD> <EFBFBD> stm32f1xx_it . c <EFBFBD> <EFBFBD> UART4_IRQHandler <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͨ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> network . c <EFBFBD> л <EFBFBD> ʱ
* StopRx / StartRx <EFBFBD> <EFBFBD> ֤ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
# include "esp8266.h"
# include "air780e.h" /* U2_CopyBuff / bg_delay */
2026-08-15 06:40:38 +08:00
# include "network.h"
2026-08-10 21:18:36 +08:00
# include "uart.h"
# include "log.h"
# include "led.h"
# include "system.h"
# include "stdio.h"
# include "string.h"
# include <stdarg.h>
/*==== <20> <> <EFBFBD> ջ<EFBFBD> <D5BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ====*/
void esp_rx_clear ( void )
{
U2_CopyIndex = 0 ;
U2_CopyBuff [ 0 ] = 0 ;
U2_CopyFlag = 0 ;
}
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ư<EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> Ӵ<EFBFBD> <D3B4> <EFBFBD> <EFBFBD> ң<EFBFBD> strstr <20> <> 0x00 <20> <> ʧ<EFBFBD> <CAA7> <EFBFBD> <EFBFBD> */
static uint8_t * esp_memfind ( uint8_t * hay , uint16_t hay_len , const char * needle )
{
uint16_t nlen = strlen ( needle ) ;
if ( hay_len < nlen ) return NULL ;
for ( uint16_t i = 0 ; i < = hay_len - nlen ; i + + ) {
if ( memcmp ( hay + i , needle , nlen ) = = 0 ) return hay + i ;
}
return NULL ;
}
/* <20> ȴ<EFBFBD> <C8B4> <EFBFBD> <EFBFBD> ջ<EFBFBD> <D5BB> <EFBFBD> <EFBFBD> г <EFBFBD> <D0B3> ֹؼ<D6B9> <D8BC> ֣<EFBFBD> <D6A3> ڼ<EFBFBD> <DABC> <EFBFBD> Ƭι <C6AC> <CEB9> /<2F> ܺ<EFBFBD> ̨<EFBFBD> <CCA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ư <EFBFBD> ȫ ƥ <EFBFBD> 䣻 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ERROR " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʧ <EFBFBD> ܷ <EFBFBD> <EFBFBD> أ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȳ <EFBFBD> ʱ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0 = <EFBFBD> ȵ <EFBFBD> */
static int esp_wait ( const char * expect , int timeout_ms )
{
int t = timeout_ms / 100 ;
while ( t - - > 0 ) {
bg_delay ( 100 ) ;
if ( U2_CopyFlag ) {
if ( esp_memfind ( U2_CopyBuff , U2_CopyIndex , expect ) ) return 0 ;
if ( expect [ 0 ] ! = ' E ' & & esp_memfind ( U2_CopyBuff , U2_CopyIndex , " ERROR " ) ) return - 1 ;
}
}
return - 1 ;
}
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> ־<EFBFBD> ij<EFBFBD> <C4B3> ȴ<EFBFBD> <C8B4> <EFBFBD> ÿ<EFBFBD> <C3BF> <EFBFBD> <EFBFBD> ӡһ <D3A1> <D2BB> ʣ<EFBFBD> <CAA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڹ۲<DAB9> <DBB2> <EFBFBD> <EFBFBD> ȡ<EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ERROR " / " FAIL " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʧ <EFBFBD> ܷ <EFBFBD> <EFBFBD> ء <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0 = <EFBFBD> ȵ <EFBFBD> */
static int esp_wait_countdown ( const char * expect , int timeout_s )
{
int remain = timeout_s * 10 ; /* 100ms <20> <> <EFBFBD> <EFBFBD> */
int sec = timeout_s ;
while ( remain - - > 0 ) {
bg_delay ( 100 ) ;
if ( U2_CopyFlag ) {
if ( esp_memfind ( U2_CopyBuff , U2_CopyIndex , expect ) ) {
log_info ( " > WiFi: <20> ȴ<EFBFBD> <C8B4> <EFBFBD> <EFBFBD> <EFBFBD> (ʣ %ds) " , sec ) ;
return 0 ;
}
if ( esp_memfind ( U2_CopyBuff , U2_CopyIndex , " ERROR " ) | |
esp_memfind ( U2_CopyBuff , U2_CopyIndex , " FAIL " ) ) {
return - 1 ;
}
}
if ( remain % 10 = = 0 & & sec > 0 ) {
2026-08-15 06:40:38 +08:00
g_net_ui_countdown = sec ; /* OLED <20> <> ʾ <EFBFBD> <CABE> */
2026-08-10 21:18:36 +08:00
log_info ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> ʱ %ds " , sec - - ) ;
}
}
return - 1 ;
}
/*==== <> <CDB8> /AT <20> <> <EFBFBD> ݷ<EFBFBD> <DDB7> ͣ<EFBFBD> UART4<54> <34> ĩβ<C4A9> Զ<EFBFBD> <D4B6> <EFBFBD> \r\n ====*/
static void ESP_printf ( const char * fmt , . . . )
{
static uint32_t last_tx_tick = 0 ;
char buf [ 256 ] ;
va_list ap ;
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AT ָ<> <D6B8> ֮<EFBFBD> <D6AE> <EFBFBD> <EFBFBD> <EFBFBD> ټ<EFBFBD> <D9BC> <EFBFBD> 30ms<6D> <73> <EFBFBD> <EFBFBD> 4G <20> <> һ <EFBFBD> <D2BB> */
while ( HAL_GetTick ( ) - last_tx_tick < 30 ) {
HAL_Delay ( 1 ) ;
}
va_start ( ap , fmt ) ;
vsnprintf ( buf , sizeof ( buf ) , fmt , ap ) ;
va_end ( ap ) ;
HAL_UART_Transmit ( & huart4 , ( uint8_t * ) buf , strlen ( buf ) , 500 ) ;
HAL_UART_Transmit ( & huart4 , ( uint8_t * ) " \r \n " , 2 , 500 ) ;
last_tx_tick = HAL_GetTick ( ) ;
}
/* <> <CDB8> ģʽ ԭʼ <D4AD> <CABC> <EFBFBD> ݷ<EFBFBD> <DDB7> ͣ<EFBFBD> MQTT <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ʊ<EFBFBD> <C6B1> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> \r\n<> <6E> */
void esp_send ( const uint8_t * data , uint16_t len )
{
HAL_UART_Transmit ( & huart4 , ( uint8_t * ) data , len , 1000 ) ;
}
/*==== GPIO ====*/
void esp_gpio_init ( void )
{
GPIO_InitTypeDef g = { 0 } ;
__HAL_RCC_GPIOA_CLK_ENABLE ( ) ;
ESP_RST_HIGH ( ) ; /* Ĭ<> <C4AC> <EFBFBD> <EFBFBD> <EFBFBD> ߣ<EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
g . Pin = ESP_RST_PIN ;
g . Mode = GPIO_MODE_OUTPUT_PP ;
g . Pull = GPIO_NOPULL ;
g . Speed = GPIO_SPEED_FREQ_LOW ;
HAL_GPIO_Init ( ESP_RST_PORT , & g ) ;
ESP_RST_HIGH ( ) ;
}
/*==== Ӳ<> <D3B2> <EFBFBD> <EFBFBD> λ + <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬ<EFBFBD> <CDAC> ====
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 500 ms <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȱ <EFBFBD> 115200 ̽ <EFBFBD> ⣨ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> / RESTORE <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģ <EFBFBD> 飩 <EFBFBD> <EFBFBD>
* ͨ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AT + UART_DEF <EFBFBD> ̶ <EFBFBD> Ϊ WIFI_BAUD_TARGET <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> */
int esp_reset ( void )
{
log_info ( " > WiFi: ESP <20> <> λ... " ) ;
/* <20> ر<EFBFBD> <D8B1> ж<EFBFBD> /DMA<4D> <41> <EFBFBD> <EFBFBD> ֹģ<D6B9> 鸴λ<E9B8B4> ڼ<EFBFBD> <DABC> <EFBFBD> <EFBFBD> 봥<EFBFBD> <EBB4A5> <EFBFBD> жϷ籩<CFB7> <E7B1A9> ͬ 4G cat_reset ˼·<CBBC> <C2B7> */
HAL_NVIC_DisableIRQ ( UART4_IRQn ) ;
HAL_NVIC_DisableIRQ ( DMA2_Channel3_IRQn ) ;
HAL_UART_DMAStop ( & huart4 ) ;
DMA2_Channel3 - > CCR & = ~ DMA_CCR_EN ;
while ( DMA2_Channel3 - > CCR & DMA_CCR_EN ) ;
DMA2 - > IFCR = DMA_IFCR_CGIF3 ;
__HAL_UART_CLEAR_IDLEFLAG ( & huart4 ) ;
__HAL_UART_CLEAR_OREFLAG ( & huart4 ) ;
__HAL_UART_CLEAR_PEFLAG ( & huart4 ) ;
__HAL_UART_CLEAR_FEFLAG ( & huart4 ) ;
__HAL_UART_CLEAR_NEFLAG ( & huart4 ) ;
esp_rx_clear ( ) ;
ESP_RST_LOW ( ) ;
bg_delay ( 500 ) ;
ESP_RST_HIGH ( ) ;
bg_delay ( 1500 ) ; /* <20> <> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> boot log <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϣ<EFBFBD> */
/* <20> <> λ<EFBFBD> <CEBB> <EFBFBD> ɺ<EFBFBD> <C9BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> DMA+IDLE <20> <> <EFBFBD> <EFBFBD> */
esp_rx_clear ( ) ;
UART4_SetBaudRate ( WIFI_BAUD_DEFAULT ) ;
HAL_NVIC_EnableIRQ ( DMA2_Channel3_IRQn ) ;
HAL_NVIC_EnableIRQ ( UART4_IRQn ) ;
/* <20> Ȱ<EFBFBD> 115200 ̽<> <CCBD> */
if ( esp_send_cmd ( " AT " , " OK " , 1500 ) = = 0 ) {
/* ͨ<> ˣ<EFBFBD> <CBA3> ̶<EFBFBD> ΪĿ<CEAA> 겨<EFBFBD> <EAB2A8> <EFBFBD> ʣ<EFBFBD> AT+UART_DEF <20> <> <EFBFBD> 籣<EFBFBD> 棩 */
if ( esp_send_cmd ( " AT+UART_DEF=921600,8,1,0,0 " , " OK " , 3000 ) = = 0 ) {
UART4_SetBaudRate ( WIFI_BAUD_TARGET ) ;
bg_delay ( 200 ) ;
if ( esp_send_cmd ( " AT " , " OK " , 1500 ) = = 0 ) {
log_info ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> -> 921600 " ) ;
return 0 ;
}
/* Ŀ<> 겨<EFBFBD> <EAB2A8> <EFBFBD> <EFBFBD> ͨ<EFBFBD> <CDA8> ʧ<EFBFBD> ܣ<EFBFBD> <DCA3> ع<EFBFBD> Ϊ 115200<30> <30> ά<EFBFBD> ֿ<EFBFBD> <D6BF> <EFBFBD> */
log_warn ( " > WiFi: 921600 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> ˵<EFBFBD> 115200 " ) ;
UART4_SetBaudRate ( WIFI_BAUD_DEFAULT ) ;
bg_delay ( 100 ) ;
esp_send_cmd ( " AT+UART_DEF=115200,8,1,0,0 " , " OK " , 2000 ) ;
return 0 ;
}
/* <20> ̼<EFBFBD> <CCBC> <EFBFBD> ֧<EFBFBD> <D6A7> UART_DEF <20> ȣ <EFBFBD> ά<EFBFBD> <CEAC> 115200 Ҳ<> <D2B2> <EFBFBD> <EFBFBD> */
log_warn ( " > WiFi: UART_DEF ʧ<> <CAA7> , <20> <> <EFBFBD> <EFBFBD> 115200 " ) ;
return 0 ;
}
/* 115200 <20> <> ͨ<EFBFBD> <CDA8> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀ<EFBFBD> 겨<EFBFBD> <EAB2A8> <EFBFBD> <EFBFBD> */
UART4_SetBaudRate ( WIFI_BAUD_TARGET ) ;
if ( esp_send_cmd ( " AT " , " OK " , 1500 ) = = 0 ) {
log_info ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 921600 " ) ;
return 0 ;
}
log_warn ( " > WiFi: <20> <> <EFBFBD> в<EFBFBD> <D0B2> <EFBFBD> <EFBFBD> ʾ <EFBFBD> <CABE> <EFBFBD> AT Ӧ<> <D3A6> " ) ;
UART4_SetBaudRate ( WIFI_BAUD_DEFAULT ) ;
return - 1 ;
}
/*==== ͨ<> <CDA8> AT ָ<> <EFBFBD> <EEA3BA> <EFBFBD> ͡<EFBFBD> <CDA1> 建<EFBFBD> <E5BBBA> <EFBFBD> <EFBFBD> <EFBFBD> ȹؼ<C8B9> <D8BC> <EFBFBD> ====*/
/* <20> <> <EFBFBD> ջ<EFBFBD> <D5BB> <EFBFBD> ʮ<EFBFBD> <CAAE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ת<EFBFBD> <D7AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ã<EFBFBD> <C3A3> <EFBFBD> strstr <20> <> 0x00 <20> <> ʧ<EFBFBD> <CAA7> <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> ʲ ô */
/* <20> <> <EFBFBD> ջ<EFBFBD> <D5BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ת<EFBFBD> <D7AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ã<EFBFBD> <C3A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ı <EFBFBD> <C4B1> <EFBFBD> ӡ<EFBFBD> <D3A1> <EFBFBD> <EFBFBD> <EFBFBD> ɴ<EFBFBD> ӡ<EFBFBD> ֽ<EFBFBD> <D6BD> <EFBFBD> ʾ Ϊ '.' */
static void esp_dump_rx ( const char * tag )
{
char text [ 65 ] ;
uint16_t len = U2_CopyIndex < 64 ? U2_CopyIndex : 64 ;
for ( uint16_t i = 0 ; i < len ; i + + ) {
uint8_t c = U2_CopyBuff [ i ] ;
text [ i ] = ( c > = 32 & & c < = 126 ) ? ( char ) c : ' . ' ;
}
text [ len ] = ' \0 ' ;
log_warn ( " > WiFi <20> <> <EFBFBD> <EFBFBD> [%s] idx=%u: %s " , tag , U2_CopyIndex , len ? text : " (empty) " ) ;
}
/*==== ͨ<> <CDA8> AT ָ<> <EFBFBD> <EEA3BA> <EFBFBD> ͡<EFBFBD> <CDA1> 建<EFBFBD> <E5BBBA> <EFBFBD> <EFBFBD> <EFBFBD> ȹؼ<C8B9> <D8BC> <EFBFBD> ====
* ע <EFBFBD> <EFBFBD> <EFBFBD> 建 <EFBFBD> <EFBFBD> <EFBFBD> ڷ <EFBFBD> <EFBFBD> ͡ <EFBFBD> ֮ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> Ӧ <EFBFBD> <EFBFBD> <EFBFBD> ij ٵ <EFBFBD> β <EFBFBD> ͣ <EFBFBD> <EFBFBD> <EFBFBD> CWJAP <EFBFBD> <EFBFBD>
* " WIFI GOT IP " ֮ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ٵ <EFBFBD> OK <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ԣ <EFBFBD> <EFBFBD> <EFBFBD> ֹ esp_wait ƥ <EFBFBD> 䵽
* <EFBFBD> ¾ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " <EFBFBD> ٳɹ<EFBFBD> " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AT + CIPMODE = 1 ʵ <EFBFBD> <EFBFBD> ʧ <EFBFBD> <EFBFBD> ȴ <EFBFBD> <EFBFBD> <EFBFBD> ж <EFBFBD> OK <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* DMA + IDLE <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> Rx_Buf <EFBFBD> IDLE <EFBFBD> <EFBFBD> <EFBFBD> Ż <EFBFBD> <EFBFBD> ӽ <EFBFBD> U2_CopyBuff <EFBFBD> <EFBFBD> */
int esp_send_cmd ( const char * cmd , const char * expect , int timeout_ms )
{
ESP_printf ( " %s " , cmd ) ;
esp_rx_clear ( ) ;
if ( esp_wait ( expect , timeout_ms ) ! = 0 ) {
log_warn ( " > WiFi AT <20> <> ʱ: %s " , cmd ) ;
esp_dump_rx ( cmd ) ;
return - 1 ;
}
return 0 ;
}
/*==== <20> <> ѯģ<D1AF> <C4A3> <EFBFBD> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <CFB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ㣨SmartConfig <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AP<41> <50> ====
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AT + CIPSTATUS <EFBFBD> <EFBFBD> STATUS : 2 = <EFBFBD> <EFBFBD> <EFBFBD> õ <EFBFBD> IP <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> 2 ~ 3 s <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϣ <EFBFBD> <EFBFBD> <EFBFBD> " WIFI GOT IP " <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> */
int esp_saved_ap_connected ( int timeout_s )
{
log_info ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ѱ<EFBFBD> <D1B1> <EFBFBD> <EFBFBD> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> (%ds) " , timeout_s ) ;
for ( int i = 0 ; i < timeout_s ; i + + ) {
ESP_printf ( " AT+CIPSTATUS " ) ;
esp_rx_clear ( ) ;
if ( esp_wait ( " STATUS:2 " , 1000 ) = = 0 ) {
log_info ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӱ<EFBFBD> <D3B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ<EFBFBD> " ) ;
return 0 ;
}
}
log_warn ( " > WiFi: <20> <> <EFBFBD> ѱ<EFBFBD> <D1B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ<EFBFBD> " ) ;
return - 1 ;
}
/*==== <20> <> <EFBFBD> ӹ̶<D3B9> WiFi<46> <69> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ﱣ<EFBFBD> <EFB1A3> <EFBFBD> <EFBFBD> SSID/PASS<53> <53> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> WIFI_JOIN_TIMEOUT_S ====*/
int esp_join_fixed_ap ( void )
{
char cmd [ 96 ] ;
2026-08-15 06:40:38 +08:00
g_net_ui_phase = NET_UI_WIFI_FIXED ;
2026-08-10 21:18:36 +08:00
log_info ( " > WiFi: <20> <> <EFBFBD> ӹ̶<D3B9> <CCB6> ȵ<EFBFBD> '%s' (%ds) " , WIFI_SSID , WIFI_JOIN_TIMEOUT_S ) ;
/* <20> <> <EFBFBD> <EFBFBD> CWAUTOCONN=1<> <31> Ĭ<EFBFBD> ϣ<EFBFBD> <CFA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӳɹ<D3B3> <C9B9> <EFBFBD> AP<41> ᱻģ<E1B1BB> 鱣<EFBFBD> 棬
* ֮ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ <EFBFBD> <EFBFBD> Զ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӣ <EFBFBD> <EFBFBD> <EFBFBD> esp_wait_got_ip <EFBFBD> <EFBFBD> */
snprintf ( cmd , sizeof ( cmd ) , " AT+CWJAP= \" %s \" , \" %s \" " , WIFI_SSID , WIFI_PASS ) ;
ESP_printf ( " %s " , cmd ) ;
esp_rx_clear ( ) ;
if ( esp_wait_countdown ( " WIFI GOT IP " , WIFI_JOIN_TIMEOUT_S ) ! = 0 ) {
/* <20> <> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> = ģ<> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> FAIL/ERROR<4F> <52> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȣ <EFBFBD> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ = <20> 泬ʱ<E6B3AC> <CAB1> <EFBFBD> ȵ㲻<C8B5> ڣ<EFBFBD> */
log_warn ( " > WiFi: <20> ̶<EFBFBD> <CCB6> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> <EFBFBD> ʧ<EFBFBD> ܻ<EFBFBD> <DCBB> <EFBFBD> ʱ " ) ;
esp_dump_rx ( " CWJAP " ) ;
return - 1 ;
}
log_info ( " > WiFi: <20> ̶<EFBFBD> <CCB6> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
return 0 ;
}
/*==== Smart Config (ESP-Touch) <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 60s <20> <> <EFBFBD> <EFBFBD> ʱ ====
* <EFBFBD> ֻ <EFBFBD> APP ( ESP - Touch ) <EFBFBD> 㲥 WiFi <EFBFBD> <EFBFBD> <EFBFBD> 룻 <EFBFBD> ɹ <EFBFBD> <EFBFBD> <EFBFBD> AP <EFBFBD> <EFBFBD> Ϣ <EFBFBD> <EFBFBD> ģ <EFBFBD> <EFBFBD> <EFBFBD> Զ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 棬
* ֮ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֱ <EFBFBD> <EFBFBD> AT + CWJAP <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> <EFBFBD> ȵ 㡣 */
int esp_smartconfig ( void )
{
log_info ( " > WiFi: SmartConfig <20> <> ʼ (%ds), <20> <> <EFBFBD> <EFBFBD> ESP-Touch APP " , WIFI_SMART_TIMEOUT_S ) ;
2026-08-15 06:40:38 +08:00
g_net_ui_phase = NET_UI_WIFI_SMART ;
2026-08-10 21:18:36 +08:00
g_net_led_smartconfig = 1 ; /* NET_LED 100ms <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> ģʽ */
if ( esp_send_cmd ( " AT+CWSTARTSMART " , " OK " , 5000 ) ! = 0 ) { g_net_led_smartconfig = 0 ; return - 1 ; }
esp_rx_clear ( ) ;
if ( esp_wait_countdown ( " connected " , WIFI_SMART_TIMEOUT_S ) ! = 0 ) {
log_warn ( " > WiFi: SmartConfig <20> <> ʱ " ) ;
esp_send_cmd ( " AT+CWSTOPSMART " , " OK " , 2000 ) ;
g_net_led_smartconfig = 0 ;
return - 1 ;
}
log_info ( " > WiFi: SmartConfig <20> ѻ<EFBFBD> ȡ<EFBFBD> ȵ<EFBFBD> " ) ;
esp_send_cmd ( " AT+CWSTOPSMART " , " OK " , 2000 ) ;
g_net_led_smartconfig = 0 ;
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ɹ<EFBFBD> <C9B9> <EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ㡣<C8B5> <E3A1A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CIPSTATUS(STATUS:2=<3D> <> <EFBFBD> õ<EFBFBD> IP)<29> <>
* <EFBFBD> <EFBFBD> <EFBFBD> ܵ <EFBFBD> " WIFI GOT IP " <EFBFBD> <EFBFBD> ӡ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CWSTOPSMART <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڼ 䱻 <EFBFBD> 建 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
if ( esp_saved_ap_connected ( 10 ) ! = 0 ) {
log_warn ( " > WiFi: SmartConfig δ<> <CEB4> ȡ<EFBFBD> <C8A1> IP " ) ;
return - 1 ;
}
log_info ( " > WiFi: SmartConfig <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ<EFBFBD> " ) ;
return 0 ;
}
/*==== <20> ˳<EFBFBD> <EFBFBD> <CDB8> ģʽ <C4A3> <CABD> OTA <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> ã<EFBFBD> ====
* " +++ " ǰ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 s <EFBFBD> <EFBFBD> Ĭ guard time <EFBFBD> <EFBFBD> <EFBFBD> Ҳ <EFBFBD> <EFBFBD> ܴ <EFBFBD> \ r \ n <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̬ <EFBFBD> <EFBFBD> ˳ <EFBFBD> ֹ ص <EFBFBD> <EFBFBD> <EFBFBD> ǰ TCP <EFBFBD> <EFBFBD> <EFBFBD> ӣ <EFBFBD> ʧ <EFBFBD> ܺ <EFBFBD> <EFBFBD> ԣ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> esp_reset <EFBFBD> ᶵ <EFBFBD> ף <EFBFBD> */
int esp_exit_transparent ( void )
{
bg_delay ( 1100 ) ;
esp_send ( ( uint8_t * ) " +++ " , 3 ) ;
bg_delay ( 1100 ) ;
if ( esp_send_cmd ( " AT " , " OK " , 2000 ) ! = 0 ) {
log_warn ( " > WiFi: <20> ˳<EFBFBD> <EFBFBD> <CDB8> <EFBFBD> <EFBFBD> AT Ӧ<> <D3A6> " ) ;
return - 1 ;
}
esp_send_cmd ( " AT+CIPCLOSE " , " OK " , 2000 ) ;
log_info ( " > WiFi: <20> ˳<EFBFBD> <EFBFBD> <CDB8> <EFBFBD> ɹ<EFBFBD> " ) ;
return 0 ;
}
/*==== <20> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ã<EFBFBD> AT+RESTORE<52> <45> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ѱ<EFBFBD> <D1B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȵ㣨<C8B5> <E3A3A8> <EFBFBD> ڲ<EFBFBD> <DAB2> <EFBFBD> SmartConfig<69> <67> ====
* ע <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> RESTORE <EFBFBD> <EFBFBD> ģ <EFBFBD> <EFBFBD> <EFBFBD> Զ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҳ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʻ ص <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 115200 <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͺ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> UART4 <EFBFBD> л <EFBFBD> 115200 ̽ <EFBFBD> <EFBFBD> ȷ <EFBFBD> ϡ <EFBFBD>
* ע <EFBFBD> <EFBFBD> 2 <EFBFBD> <EFBFBD> WiFi <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ ģ <EFBFBD> 鴦 <EFBFBD> <EFBFBD> TCP <EFBFBD> <EFBFBD> ̬ <EFBFBD> <EFBFBD> ֱ <EFBFBD> ӷ <EFBFBD> AT <EFBFBD> ᱻ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> TCP <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> */
int esp_factory_restore ( void )
{
log_info ( " > WiFi: AT+RESTORE (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> ѱ<EFBFBD> <D1B1> <EFBFBD> <EFBFBD> ȵ<EFBFBD> ) " ) ;
esp_exit_transparent ( ) ; /* <> <CDB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˻<EFBFBD> <CBBB> <EFBFBD> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <CDB8> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
esp_rx_clear ( ) ;
ESP_printf ( " AT+RESTORE " ) ;
bg_delay ( 2500 ) ; /* <20> <> ģ<EFBFBD> <C4A3> ִ<EFBFBD> <D6B4> RESTORE <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
UART4_SetBaudRate ( WIFI_BAUD_DEFAULT ) ;
if ( esp_send_cmd ( " AT " , " OK " , 2000 ) ! = 0 ) {
log_warn ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ʸ<EFBFBD> λ<EFBFBD> <CEBB> RESTORE <20> <> Ӧ<EFBFBD> <D3A6> " ) ;
return - 1 ;
}
log_info ( " > WiFi: RESTORE <20> <> <EFBFBD> <EFBFBD> , <20> ѱ<EFBFBD> <D1B1> <EFBFBD> <EFBFBD> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
return 0 ;
}
/*==== <20> <> <EFBFBD> <EFBFBD> TCP <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <CDB8> ģʽ ====*/
int esp_enter_transparent ( const char * ip , uint16_t port )
{
char cmd [ 96 ] ;
log_info ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <CDB8> %s:%u " , ip , ( unsigned ) port ) ;
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> Σ<EFBFBD> CIPSEND <20> յ<EFBFBD> ERROR <20> <> Ϊ CIPMODE δ<> <CEB4> Ч<EFBFBD> <D0A7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> */
for ( int attempt = 0 ; attempt < 2 ; attempt + + ) {
if ( attempt > 0 ) {
log_warn ( " > WiFi: <> <CDB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
bg_delay ( 1000 ) ;
}
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ܲ<EFBFBD> <DCB2> <EFBFBD> <EFBFBD> ľ<EFBFBD> TCP <20> <> <EFBFBD> ӣ<EFBFBD> <D3A3> <EFBFBD> һ <EFBFBD> <D2BB> ʧ<EFBFBD> <CAA7> û<EFBFBD> ص<EFBFBD> <D8B5> <EFBFBD> <EFBFBD> ӻ<EFBFBD> <D3BB> <EFBFBD>
* CIPMODE / CIPMUX <EFBFBD> <EFBFBD> <EFBFBD> ñ <EFBFBD> " link is builded " ERROR <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ CIPCLOSE <EFBFBD> <EFBFBD> ERROR <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Խ <EFBFBD> <EFBFBD> <EFBFBD> */
esp_send_cmd ( " AT+CIPCLOSE " , " OK " , 1500 ) ;
/* CIPMUX=0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CIPMODE=1 ֮ǰ<D6AE> <C7B0> <EFBFBD> <CDB8> ģʽ ֻ<CABD> ڵ<EFBFBD> <DAB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <EFBFBD> <EFBFBD> */
if ( esp_send_cmd ( " AT+CIPMUX=0 " , " OK " , 2000 ) ! = 0 ) continue ;
if ( esp_send_cmd ( " AT+CIPMODE=1 " , " OK " , 2000 ) ! = 0 ) continue ;
snprintf ( cmd , sizeof ( cmd ) , " AT+CIPSTART= \" TCP \" , \" %s \" ,%u " , ip , ( unsigned ) port ) ;
ESP_printf ( " %s " , cmd ) ;
esp_rx_clear ( ) ;
if ( esp_wait ( " CONNECT " , WIFI_TCP_TIMEOUT_MS ) ! = 0 ) {
log_warn ( " > WiFi: TCP <20> <> <EFBFBD> <EFBFBD> ʧ<EFBFBD> <CAA7> " ) ;
esp_dump_rx ( " CIPSTART " ) ;
continue ;
}
log_info ( " > WiFi: TCP <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> : %.100s " , U2_CopyBuff ) ;
/* <20> <> CIPSTART <20> <> OK <20> <> β<EFBFBD> <CEB2> <EFBFBD> <EFBFBD> ƥ<EFBFBD> 䵽 CONNECT ʱ OK <20> <> <EFBFBD> ܻ<EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģ <EFBFBD> <EFBFBD> busy <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CIPSEND <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӧ */
esp_wait ( " OK " , 2000 ) ;
bg_delay ( 300 ) ;
/* <20> <> <EFBFBD> <CDB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ">" */
ESP_printf ( " AT+CIPSEND " ) ;
esp_rx_clear ( ) ;
if ( esp_wait ( " > " , 10000 ) = = 0 ) {
esp_rx_clear ( ) ;
log_info ( " > WiFi: <> <CDB8> ģʽ <C4A3> ɹ<EFBFBD> " ) ;
return 0 ;
}
log_warn ( " > WiFi: CIPSEND <20> <> '>' " ) ;
esp_dump_rx ( " CIPSEND " ) ;
/* <20> <> AT ̽<> ⣺<EFBFBD> <E2A3BA> OK=<3D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> Ӧ<EFBFBD> <D3A6> =<3D> ̼<EFBFBD> <CCBC> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> <EFBFBD> <CDB8> */
ESP_printf ( " AT " ) ;
esp_rx_clear ( ) ;
if ( esp_wait ( " OK " , 2000 ) ! = 0 ) {
log_warn ( " > WiFi: <20> <> AT Ӧ<> <D3A6> , <20> ٶ<EFBFBD> <D9B6> ѽ<EFBFBD> <D1BD> <EFBFBD> <EFBFBD> <CDB8> " ) ;
esp_rx_clear ( ) ;
return 0 ;
}
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> CIPMODE ʵ<> <CAB5> ֵ<EFBFBD> <D6B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
if ( esp_send_cmd ( " AT+CIPMODE? " , " +CIPMODE:1 " , 2000 ) = = 0 ) {
log_warn ( " > WiFi: CIPMODE <20> <> Ϊ 1, <20> <> <EFBFBD> ӿ<EFBFBD> <D3BF> ܱ<EFBFBD> <DCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ر<EFBFBD> " ) ;
} else {
log_warn ( " > WiFi: CIPMODE <20> ѻ<EFBFBD> ԭ<EFBFBD> <D4AD> <EFBFBD> <EFBFBD> δ<EFBFBD> <CEB4> <EFBFBD> óɹ<C3B3> " ) ;
}
}
log_warn ( " > WiFi: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <CDB8> ʧ<EFBFBD> <CAA7> " ) ;
return - 1 ;
}