478 lines
16 KiB
C
478 lines
16 KiB
C
|
|
/* 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>4G 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> 4G <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 "24c02.h"
|
|||
|
|
#include "air780e.h" /* U2_CopyBuff / bg_delay */
|
|||
|
|
#include "network.h"
|
|||
|
|
#include "uart.h"
|
|||
|
|
#include "log.h"
|
|||
|
|
#include "led.h"
|
|||
|
|
#include "system.h"
|
|||
|
|
#include "stdio.h"
|
|||
|
|
#include "string.h"
|
|||
|
|
#include <stdarg.h>
|
|||
|
|
#include <stdlib.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) {
|
|||
|
|
g_net_ui_countdown = sec; /* OLED <20><>ʾ<EFBFBD><CABE> */
|
|||
|
|
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> 500ms <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><> ESP_EN <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ϵ磺ϵͳ<CFB5>쳣<EFBFBD><ECB3A3>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD> RST <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ȵûأ<EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
NET_esp_power(0);
|
|||
|
|
bg_delay(500);
|
|||
|
|
NET_esp_power(1);
|
|||
|
|
bg_delay(1000);
|
|||
|
|
|
|||
|
|
/* <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~3s <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>ع̶<D8B9><CCB6>ȵ<EFBFBD>ƾ<EFBFBD>ݣ<EFBFBD>EEPROM <20><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SETWIFI <20><><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>Ĭ<EFBFBD><C4AC> */
|
|||
|
|
static void wifi_creds_load(char *ssid, char *pass)
|
|||
|
|
{
|
|||
|
|
uint8_t magic = 0;
|
|||
|
|
eepromReadData(WIFI_CFG_MAGIC_ADDR, &magic, 1);
|
|||
|
|
if (magic == WIFI_CFG_MAGIC) {
|
|||
|
|
eepromReadData(WIFI_CFG_SSID_ADDR, ssid, WIFI_CFG_STR_LEN);
|
|||
|
|
eepromReadData(WIFI_CFG_PASS_ADDR, pass, WIFI_CFG_STR_LEN);
|
|||
|
|
ssid[WIFI_CFG_STR_LEN - 1] = 0;
|
|||
|
|
pass[WIFI_CFG_STR_LEN - 1] = 0;
|
|||
|
|
}
|
|||
|
|
if (magic != WIFI_CFG_MAGIC || ssid[0] == 0) {
|
|||
|
|
strcpy(ssid, WIFI_SSID);
|
|||
|
|
strcpy(pass, WIFI_PASS);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*==== <20><>ӡ<EFBFBD><D3A1>ǰ<EFBFBD>ȵ<EFBFBD><C8B5>ź<EFBFBD>ǿ<EFBFBD>ȣ<EFBFBD>AT+CWJAP? Ӧ<><D3A6>ĩ<EFBFBD>ֶ<EFBFBD>Ϊ RSSI(dBm) ====*/
|
|||
|
|
void esp_log_rssi(void)
|
|||
|
|
{
|
|||
|
|
char *p = NULL;
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD>ʱģ<CAB1><C4A3><EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>һ<EFBFBD><D2BB> CWJAP<41><50><EFBFBD><EFBFBD> busy p...<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> */
|
|||
|
|
for (int attempt = 0; attempt < 3 && p == NULL; attempt++) {
|
|||
|
|
if (attempt > 0) bg_delay(800);
|
|||
|
|
ESP_printf("AT+CWJAP?");
|
|||
|
|
esp_rx_clear();
|
|||
|
|
if (esp_wait("+CWJAP:", 2000) == 0) {
|
|||
|
|
p = (char *)esp_memfind(U2_CopyBuff, U2_CopyIndex, "+CWJAP:");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (p == NULL) {
|
|||
|
|
esp_dump_rx("CWJAP?"); /* <20><>ģ<EFBFBD><C4A3>ʵ<EFBFBD>ʻ<EFBFBD><CABB><EFBFBD>ʲô<CAB2><C3B4><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
|
|||
|
|
log_warn("> WiFi: <20>ź<EFBFBD>ǿ<EFBFBD>Ȳ<EFBFBD>ѯʧ<D1AF><CAA7>");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
/* <20><>ʽ +CWJAP:"ssid","bssid",ch,rssi<73><69>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
char *last = NULL;
|
|||
|
|
{
|
|||
|
|
for (char *q = p; *q && q < (char *)U2_CopyBuff + U2_CopyIndex; q++) {
|
|||
|
|
if (*q == ',') last = q;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (last) {
|
|||
|
|
/* dBm ת<>ٷֱȣ<D6B1>-50dBm=100%<25><><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>-100dBm=0%<25><><EFBFBD><EFBFBD><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3> */
|
|||
|
|
int rssi = atoi(last + 1);
|
|||
|
|
int pct = 2 * (rssi + 100);
|
|||
|
|
if (pct < 0) pct = 0;
|
|||
|
|
if (pct > 100) pct = 100;
|
|||
|
|
log_info("> WiFi: <20>ź<EFBFBD>ǿ<EFBFBD><C7BF> %d%% (%ddBm)", pct, rssi);
|
|||
|
|
} else {
|
|||
|
|
log_warn("> WiFi: <20>ź<EFBFBD>ǿ<EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>ʧ<EFBFBD><CAA7>");
|
|||
|
|
esp_dump_rx("CWJAP?");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*==== <20><><EFBFBD>ӹ̶<D3B9> WiFi<46><69>EEPROM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<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];
|
|||
|
|
char ssid[WIFI_CFG_STR_LEN], pass[WIFI_CFG_STR_LEN];
|
|||
|
|
|
|||
|
|
g_net_ui_phase = NET_UI_WIFI_FIXED;
|
|||
|
|
|
|||
|
|
wifi_creds_load(ssid, pass);
|
|||
|
|
log_info("> WiFi: <20><><EFBFBD>ӹ̶<D3B9><CCB6>ȵ<EFBFBD> '%s' (%ds)", 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><EFBFBD><EFBFBD>
|
|||
|
|
* ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD> CWJAP <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>費<EFBFBD><EFBFBD> AP <EFBFBD><EFBFBD> +CWJAP:3<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> */
|
|||
|
|
for (int attempt = 0; attempt < 2; attempt++) {
|
|||
|
|
if (attempt > 0) {
|
|||
|
|
log_warn("> WiFi: <20>״<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>ϣ<EFBFBD>2s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
bg_delay(2000);
|
|||
|
|
}
|
|||
|
|
snprintf(cmd, sizeof(cmd), "AT+CWJAP=\"%s\",\"%s\"", ssid, pass);
|
|||
|
|
ESP_printf("%s", cmd);
|
|||
|
|
esp_rx_clear();
|
|||
|
|
if (esp_wait_countdown("WIFI GOT IP", WIFI_JOIN_TIMEOUT_S) == 0) {
|
|||
|
|
log_info("> WiFi: <20>̶<EFBFBD><CCB6>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
return 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> */
|
|||
|
|
esp_dump_rx("CWJAP");
|
|||
|
|
}
|
|||
|
|
log_warn("> WiFi: <20>̶<EFBFBD><CCB6>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD>ʱ");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*==== 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);
|
|||
|
|
g_net_ui_phase = NET_UI_WIFI_SMART;
|
|||
|
|
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> 1s <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;
|
|||
|
|
}
|