20260106:移植了野火的ESP-01s驱动代码,初步实现功能。
This commit is contained in:
267
STM32/Gateway_Node/Drivers/ESP8266.c.bkp
Normal file
267
STM32/Gateway_Node/Drivers/ESP8266.c.bkp
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user