com o portal ja a funcionar em modo basico
This commit is contained in:
parent
fef33c70ba
commit
d892c5fba9
@ -48,7 +48,6 @@ void ESP_ClearBuffer(void)
|
||||
}
|
||||
|
||||
/*************************************************/
|
||||
|
||||
static bool ESP_WaitFor(const char *expect, uint32_t timeout)
|
||||
{
|
||||
uint32_t start = HAL_GetTick();
|
||||
@ -63,10 +62,12 @@ static bool ESP_WaitFor(const char *expect, uint32_t timeout)
|
||||
|
||||
if (strstr(esp_rx_buf, "busy"))
|
||||
{
|
||||
HAL_Delay(100); // 🔥 ESP ocupado → espera
|
||||
HAL_Delay(100);
|
||||
ESP_ClearBuffer();
|
||||
start = HAL_GetTick();
|
||||
}
|
||||
|
||||
HAL_Delay(1);
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -167,31 +168,45 @@ bool ESP_CloseLink(int link_id)
|
||||
}
|
||||
|
||||
/*************************************************/
|
||||
|
||||
void ESP_Init(void)
|
||||
{
|
||||
HAL_Delay(1000);
|
||||
ESP_SendCmd("AT", "OK", 2000);
|
||||
ESP_SendCmd("ATE0", "OK", 2000);
|
||||
ESP_SendCmd("AT+CIPDINFO=1", "OK", 2000);
|
||||
ESP_SendCmd("AT+CWMODE=2", "OK", 2000);
|
||||
ESP_SendCmd("AT+CWSAP=\"STM32\",\"12345678\",1,3,4", "OK", 5000);
|
||||
// 🔥 manda reset à bruta
|
||||
ESP_SendData("AT+RST\r\n");
|
||||
|
||||
HAL_Delay(3000); // 🔥 importante
|
||||
dbg("RESET ESP...\r\n");
|
||||
|
||||
ESP_SendCmd("AT+CIPSERVER=0", "OK", 2000); // mata server se existir
|
||||
// ESP_SendCmd("AT+CIPCLOSE=5", "OK", 2000); // fecha tudo (modo multi)
|
||||
HAL_Delay(500);
|
||||
// 🔥 espera real (não confies no WaitFor)
|
||||
HAL_Delay(6000);
|
||||
|
||||
ESP_ClearBuffer();
|
||||
|
||||
dbg("ESP PRONTO\r\n");
|
||||
|
||||
// 🔥 agora sim começa
|
||||
if (!ESP_SendCmd("AT", "OK", 3000))
|
||||
dbg("AT FAIL\r\n");
|
||||
|
||||
if (!ESP_SendCmd("ATE0", "OK", 3000))
|
||||
dbg("ATE0 FAIL\r\n");
|
||||
|
||||
if (!ESP_SendCmd("AT+CIPDINFO=1", "OK", 3000))
|
||||
dbg("CIPDINFO FAIL\r\n");
|
||||
|
||||
if (!ESP_SendCmd("AT+CWMODE=2", "OK", 3000))
|
||||
dbg("CWMODE FAIL\r\n");
|
||||
|
||||
if (!ESP_SendCmd("AT+CWSAP=\"STM32\",\"12345678\",1,3,4", "OK", 8000))
|
||||
dbg("CWSAP FAIL\r\n");
|
||||
|
||||
HAL_Delay(3000);
|
||||
|
||||
if (!ESP_SendCmd("AT+CIPMUX=1", "OK", 3000))
|
||||
dbg("CIPMUX FAIL\r\n");
|
||||
|
||||
if (!ESP_SendCmd("AT+CIPSERVER=1,80", "OK", 3000))
|
||||
if (!ESP_SendCmd("AT+CIPSERVER=1,80", "OK", 5000))
|
||||
dbg("CIPSERVER FAIL\r\n");
|
||||
}
|
||||
|
||||
|
||||
/*************************************************/
|
||||
__attribute__((unused))
|
||||
static int parse_ipd_link(const char *p)
|
||||
@ -204,19 +219,17 @@ static int parse_ipd_link(const char *p)
|
||||
/*************************************************/
|
||||
void ESP_Task(void)
|
||||
{
|
||||
char *p = strstr(ESP_GetBuffer(), "+IPD,");
|
||||
if (p)
|
||||
{
|
||||
int link_id = -1;
|
||||
int len = 0;
|
||||
char *buf = ESP_GetBuffer();
|
||||
|
||||
// extrair link_id e tamanho
|
||||
sscanf(p, "+IPD,%d,%d:", &link_id, &len);
|
||||
if (!strstr(buf, "GET "))
|
||||
return;
|
||||
|
||||
dbg("IPD DETECTADO\r\n");
|
||||
dbg("HTTP DETECTADO\r\n");
|
||||
|
||||
// 🔥 esperar fim do pacote
|
||||
HAL_Delay(50);
|
||||
// 🔥 ESPERAR O RESTO DO HTTP CHEGAR
|
||||
HAL_Delay(200);
|
||||
|
||||
int link_id = 0;
|
||||
|
||||
const char *resp =
|
||||
"HTTP/1.1 200 OK\r\n"
|
||||
@ -227,17 +240,17 @@ void ESP_Task(void)
|
||||
|
||||
char cmd[64];
|
||||
|
||||
snprintf(cmd, sizeof(cmd), "AT+CIPSEND=%d,%d", link_id, strlen(resp));
|
||||
snprintf(cmd, sizeof(cmd), "AT+CIPSEND=%d,%u",
|
||||
link_id, (unsigned)strlen(resp));
|
||||
|
||||
if (ESP_SendCmd(cmd, ">", 2000))
|
||||
if (ESP_SendCmd(cmd, ">", 3000))
|
||||
{
|
||||
ESP_SendData(resp);
|
||||
ESP_WaitFor("SEND OK", 3000);
|
||||
ESP_WaitFor("SEND OK", 5000);
|
||||
}
|
||||
|
||||
snprintf(cmd, sizeof(cmd), "AT+CIPCLOSE=%d", link_id);
|
||||
ESP_SendCmd(cmd, "OK", 2000);
|
||||
ESP_SendCmd(cmd, "OK", 3000);
|
||||
|
||||
ESP_ClearBuffer(); // 🔥 só aqui
|
||||
}
|
||||
ESP_ClearBuffer();
|
||||
}
|
||||
|
||||
111
Core/Src/main.c
111
Core/Src/main.c
@ -37,7 +37,7 @@
|
||||
UART_HandleTypeDef huart1; // ESP
|
||||
UART_HandleTypeDef huart3; // debug
|
||||
|
||||
static uint8_t esp_rx_byte;
|
||||
uint8_t esp_rx_byte;
|
||||
|
||||
void SystemClock_Config(void);
|
||||
static void MX_GPIO_Init(void);
|
||||
@ -91,32 +91,34 @@ volatile int esp_rx_idx = 0;
|
||||
volatile uint8_t http_request_flag = 0;
|
||||
volatile int http_link_id = -1;
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
|
||||
|
||||
// 👇 METE AQUI
|
||||
static int parse_link_id(const char *buf)
|
||||
{
|
||||
char *p = strstr(buf, "+IPD,");
|
||||
if (!p) return -1;
|
||||
|
||||
int id = -1;
|
||||
sscanf(p, "+IPD,%d,", &id);
|
||||
return id;
|
||||
}
|
||||
|
||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
if (huart->Instance == USART1)
|
||||
{
|
||||
// guarda TUDO (sem filtros marados)
|
||||
if (esp_rx_idx < ESP_RX_BUF_SIZE - 1)
|
||||
{
|
||||
esp_rx_buf[esp_rx_idx++] = esp_rx_byte;
|
||||
esp_rx_buf[esp_rx_idx] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// buffer cheio → reset suave
|
||||
esp_rx_idx = 0;
|
||||
}
|
||||
ESP_RxByte(esp_rx_byte);
|
||||
|
||||
HAL_UART_Receive_IT(&huart1, &esp_rx_byte, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void Portal_SendHello(int link_id)
|
||||
{
|
||||
char cmd[32];
|
||||
char cmd[64];
|
||||
|
||||
const char *resp =
|
||||
"HTTP/1.1 200 OK\r\n"
|
||||
@ -137,53 +139,44 @@ static void Portal_SendHello(int link_id)
|
||||
|
||||
int len = strlen(resp);
|
||||
|
||||
// 🔥 limpar buffer ANTES
|
||||
ESP_ClearBuffer();
|
||||
esp_rx_idx = 0;
|
||||
|
||||
// 🔥 pedir envio
|
||||
snprintf(cmd, sizeof(cmd), "AT+CIPSEND=%d,%d\r\n", link_id, len);
|
||||
ESP_SendData(cmd);
|
||||
|
||||
// 🔥 esperar pelo '>'
|
||||
uint32_t t0 = HAL_GetTick();
|
||||
while (1)
|
||||
while ((HAL_GetTick() - t0) < 3000)
|
||||
{
|
||||
if (strstr(esp_rx_buf, ">"))
|
||||
break;
|
||||
|
||||
if (strstr(esp_rx_buf, "ERROR"))
|
||||
return;
|
||||
|
||||
if (HAL_GetTick() - t0 > 2000)
|
||||
return;
|
||||
}
|
||||
|
||||
// 🔥 enviar HTML
|
||||
ESP_ClearBuffer();
|
||||
esp_rx_idx = 0;
|
||||
|
||||
ESP_SendData(resp);
|
||||
|
||||
// 🔥 esperar SEND OK (opcional mas bom)
|
||||
t0 = HAL_GetTick();
|
||||
while (1)
|
||||
while ((HAL_GetTick() - t0) < 5000)
|
||||
{
|
||||
if (strstr(esp_rx_buf, "SEND OK"))
|
||||
break;
|
||||
|
||||
if (strstr(esp_rx_buf, "ERROR"))
|
||||
break;
|
||||
|
||||
if (HAL_GetTick() - t0 > 2000)
|
||||
break;
|
||||
}
|
||||
|
||||
// 🔥 fechar ligação
|
||||
snprintf(cmd, sizeof(cmd), "AT+CIPCLOSE=%d\r\n", link_id);
|
||||
ESP_SendData(cmd);
|
||||
|
||||
// 🔥 limpar para próxima
|
||||
HAL_Delay(100);
|
||||
|
||||
ESP_ClearBuffer();
|
||||
esp_rx_idx = 0;
|
||||
http_link_id = -1;
|
||||
}
|
||||
|
||||
/* USER CODE END 0 */
|
||||
@ -240,62 +233,10 @@ int main(void)
|
||||
|
||||
while (1)
|
||||
{
|
||||
static uint16_t last_idx = 0;
|
||||
|
||||
// 🔍 DETECTAR HTTP
|
||||
if (!http_request_flag)
|
||||
{
|
||||
if (strstr(esp_rx_buf, "GET /"))
|
||||
{
|
||||
http_link_id = 0;
|
||||
http_request_flag = 1;
|
||||
|
||||
HAL_UART_Transmit(&huart3,
|
||||
(uint8_t*)"HTTP DETECTADO\r\n",
|
||||
17,
|
||||
100);
|
||||
|
||||
// 🔥 limpa logo
|
||||
esp_rx_idx = 0;
|
||||
memset(esp_rx_buf, 0, ESP_RX_BUF_SIZE);
|
||||
last_idx = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 🖥 DEBUG (só quando muda)
|
||||
if (esp_rx_idx != last_idx)
|
||||
{
|
||||
HAL_UART_Transmit(&huart3,
|
||||
(uint8_t*)esp_rx_buf,
|
||||
esp_rx_idx,
|
||||
1000);
|
||||
|
||||
HAL_UART_Transmit(&huart3, (uint8_t*)"\r\n", 2, 100);
|
||||
|
||||
last_idx = esp_rx_idx;
|
||||
}
|
||||
|
||||
// 🌐 RESPONDER
|
||||
if (http_request_flag)
|
||||
{
|
||||
http_request_flag = 0;
|
||||
|
||||
HAL_Delay(50); // 🔥 importantíssimo
|
||||
|
||||
Portal_SendHello(http_link_id);
|
||||
|
||||
// 🔥 limpa depois
|
||||
esp_rx_idx = 0;
|
||||
memset(esp_rx_buf, 0, ESP_RX_BUF_SIZE);
|
||||
last_idx = 0;
|
||||
}
|
||||
ESP_Task(); // só tratar RX + parser HTTP
|
||||
|
||||
HAL_Delay(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user