20260106:移植了野火的ESP-01s驱动代码,初步实现功能。

This commit is contained in:
2026-01-06 01:22:02 +08:00
parent bd85b7395e
commit 2e6795f988
26 changed files with 1770 additions and 605 deletions

View File

@@ -0,0 +1,267 @@
#include "ESP8266.h"
/**
* @brief <20>ָ<EFBFBD>ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param None
* @retval None
*/
void vEsp8266Restore(NetFifoBuffer_t *pxEspBuffer)
{
vUsartPrintf(USART2, "AT+RESTORE\r\n");
// if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_READY)
// {
// /* code */
// ucEsp8266Log(pxEspBuffer);
// } else
// {
// ucEsp8266Log(pxEspBuffer);
// }
}
/**
* @brief <20><><EFBFBD><EFBFBD>ESP8266ģ<36><C4A3>
* @param None
* @retval None
*/
void vEsp8266Reset(void)
{
vUsartPrintf(USART2, "AT+RST\r\n");
// if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_READY)
// {
// /* code */
// ucEsp8266Log(pxEspBuffer);
// } else
// {
// ucEsp8266Log(pxEspBuffer);
// }
}
/**
* @brief <20><><EFBFBD><EFBFBD>ESP8266<36><36><EFBFBD><EFBFBD>ģʽ
* @param ucMode: <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>0<EFBFBD><30>SoftAPģʽ<C4A3><CABD>1<EFBFBD><31>Stationģʽ<C4A3><CABD>
* @retval <20><><EFBFBD>ú<EFBFBD><C3BA>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ
*/
eEsp8266Mode_t ucEsp8266SetMode(uint8_t ucMode)
{
vUsartPrintf(USART2, "AT+CWMODE=%d\r\n", ucMode);
if (ucMode == 1)
{
/* code */
return ESP8266_MODE_STATION;
} else if (ucMode == 0)
{
/* code */
return ESP8266_MODE_SOFTAP;
} else
{
return INVALID_MODE; // <20><>Чģʽ
}
}
/**
* @brief <20><><EFBFBD>ӵ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>WiFi<46>ȵ<EFBFBD>
* @param *pcSsid: WiFi<46><69><EFBFBD><EFBFBD>
* @param *pcPassword: WiFi<46><69><EFBFBD><EFBFBD>
* @retval None
*/
void vEsp8266JoinAp(const char *pcSsid, const char *pcPassword)
{
vUsartPrintf(USART2, "AT+CWJAP=\"%s\",\"%s\"\r\n", pcSsid, pcPassword);
}
/**
* @brief <20><><EFBFBD><EFBFBD>ESP8266<36><36>Ӧ
* @param *pxEspBuffer ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval 0: <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>, 1: <20>ɹ<EFBFBD>, 2: ʧ<><CAA7>
*/
eEsp8266Status_t ucEsp8266ResHandler(NetFifoBuffer_t *pxEspBuffer)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
if (strstr(pxEspBuffer->cNetFifoBuffer, "ready") != NULL)
{
vNetBufferClear(pxEspBuffer);
return ESP8266_RESPONSE_READY; // <20>ɹ<EFBFBD>
} else if (strstr(pxEspBuffer->cNetFifoBuffer, "OK") != NULL)
{
vNetBufferClear(pxEspBuffer);
return ESP8266_RESPONSE_OK; // <20>ɹ<EFBFBD>
} else if (strstr(pxEspBuffer->cNetFifoBuffer, "ERROR") != NULL ||
strstr(pxEspBuffer->cNetFifoBuffer, "FAIL") != NULL)
{
vNetBufferClear(pxEspBuffer);
return ESP8266_RESPONSE_ERROR; // ʧ<><CAA7>
} else
{
/* code */
vNetBufferClear(pxEspBuffer);
return ESP8266_RESPONSE_TIMEOUT; // <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>
}
}
// /**
// * @brief <20>ȴ<EFBFBD>ESP8266<36><36>Ӧ
// * @param *pxEspBuffer ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// * @param xTimeout <20><>ʱʱ<CAB1><EFBFBD><E4A3A8>TickType_tΪ<74><CEAA>λ<EFBFBD><CEBB>
// * @retval <20><>Ӧ״̬
// */
// eEsp8266Status_t xEsp8266WaitForResponse(NetFifoBuffer_t *pxEspBuffer, TickType_t xTimeout)
// {
// TickType_t startTime = xTaskGetTickCount();
// while ((xTaskGetTickCount() - startTime) < xTimeout)
// {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
// eEsp8266Status_t status = ucEsp8266ResHandler(pxEspBuffer);
// if (status != ESP8266_RESPONSE_READY)
// {
// return status; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ״̬
// }
// }
// return ESP8266_RESPONSE_TIMEOUT; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>
// }
/**
* @brief <20><>¼ESP8266<36><36>Ӧ<EFBFBD><D3A6>־
* @param *pxEspBuffer ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval None
*/
void ucEsp8266Log(NetFifoBuffer_t *pxEspBuffer)
{
if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_READY)
{
/* code */
vUsartSendString(USART3, "WiFi Reset Successfully!\r\n");
vUsartSendString(USART3, pxEspBuffer->cNetFifoBuffer);
vUsartSendString(USART3, "\r\n");
} else if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_OK)
{
/* code */
vUsartSendString(USART3, "Set WiFi Mode Successfully!\r\n");
vUsartSendString(USART3, pxEspBuffer->cNetFifoBuffer);
vUsartSendString(USART3, "\r\n");
} else if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_ERROR)
{
vUsartSendString(USART3, "Error!\r\n");
vUsartSendString(USART3, pxEspBuffer->cNetFifoBuffer);
vUsartSendString(USART3, "\r\n");
} else
{
vUsartSendString(USART3, "Other Error!\r\n");
vUsartSendString(USART3, pxEspBuffer->cNetFifoBuffer);
vUsartSendString(USART3, "\r\n");
}
}
/**
* @brief <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD><EFBFBD>
* @note <20><><EFBFBD><EFBFBD>FreeRTOS<4F>ж<EFBFBD><D0B6><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>л<EFBFBD><D0BB>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ESP8266<36><36><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ݴ浽<DDB4><E6B5BD><EFBFBD>õ<EFBFBD>FIFO<46><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>
* @note <20><><EFBFBD><EFBFBD><E2A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>һ<ECB5BD><D2BB><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
* @retval None
*/
void vTaskWifiConnection(void *pvParameters)
{
NetFifoBuffer_t espBuffer;
vNetBufferInit(&espBuffer);
uint8_t ucRetvalQueueWifiSta = 0;
uint8_t ucRetvalQueueByte = 0;
while (1)
{
/* code */
vEsp8266Reset();
TickType_t startTime = xTaskGetTickCount();
while ((xTaskGetTickCount() - startTime) < pdMS_TO_TICKS(3000))
{
ucRetvalQueueWifiSta = xQueueReceive(xQueueUsart2IrqHdlr,
&ucRetvalQueueByte,
pdMS_TO_TICKS(100));
if (ucRetvalQueueWifiSta == pdTRUE)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vNetBufferWrite(&espBuffer, (char)ucRetvalQueueByte);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
uint8_t ucResponseStatus = ucEsp8266ResHandler(&espBuffer);
if (strstr(espBuffer.cNetFifoBuffer, "ready") != NULL)
{
vUsartSendString(USART3, "WiFi Reset Successfully!\r\n");
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
vTaskDelay(1000);
break;
} else if (strstr(espBuffer.cNetFifoBuffer, "OK") != NULL)
{
/* code */
vUsartSendString(USART3, "Set WiFi Mode Successfully!\r\n");
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
} else if (strstr(espBuffer.cNetFifoBuffer, "ERROR") != NULL ||
strstr(espBuffer.cNetFifoBuffer, "FAIL") != NULL)
{
vUsartSendString(USART3, "Error!\r\n");
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
vUsartSendString(USART3, "\r\n");
break;
}
}
}
vTaskDelete(NULL);
}
}
void vTaskBufferRx(void *pvParameters)
{
NetFifoBuffer_t espBuffer;
vNetBufferInit(&espBuffer);
uint8_t ucRetvalQueueWifiSta = 0;
uint8_t ucRetvalQueueByte = 0;
while (1)
{
/* code */
TickType_t startTime = xTaskGetTickCount();
while ((xTaskGetTickCount() - startTime) < pdMS_TO_TICKS(3000))
{
ucRetvalQueueWifiSta = xQueueReceive(xQueueUsart2IrqHdlr,
&ucRetvalQueueByte,
pdMS_TO_TICKS(100));
if (ucRetvalQueueWifiSta == pdTRUE)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vNetBufferWrite(&espBuffer, (char)ucRetvalQueueByte);
}
}
vTaskDelay(100);
}
}
/**
* @brief <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD><EFBFBD>
* @note <20><><EFBFBD><EFBFBD>ESP8266ģ<36>
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
* @retval None
*/
void vTaskWifiConnection(void *pvParameters)
{
NetFifoBuffer_t espBuffer;
while (1)
{
/* code */
vEsp8266Reset();
if (strstr(espBuffer.cNetFifoBuffer, "ready") != NULL)
{
vUsartSendString(USART3, "WiFi Reset Successfully!\r\n");
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
vTaskDelay(1000);
break;
} else if (strstr(espBuffer.cNetFifoBuffer, "OK") != NULL)
{
/* code */
vUsartSendString(USART3, "Set WiFi Mode Successfully!\r\n");
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
} else if (strstr(espBuffer.cNetFifoBuffer, "ERROR") != NULL ||
strstr(espBuffer.cNetFifoBuffer, "FAIL") != NULL)
{
vUsartSendString(USART3, "Error!\r\n");
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
vUsartSendString(USART3, "\r\n");
break;
}
vTaskDelete(NULL);
}
}