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

@@ -1,58 +1,395 @@
#include "ESP8266.h"
#include "esp8266.h"
void vEsp8266Restore(void)
volatile uint8_t ucTcpClosedFlag = 0;
char cStr [ 1500 ] = { 0 };
struct STRUCT_USARTx_Fram strEsp8266_Fram_Record = { 0 };
/**
* @brief vEsp8266GpioConfig
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>vEsp8266Init<69><74><EFBFBD>á<EFBFBD>
* @param <20><>
* @retval <20><>
*/
static void vEsp8266GpioConfig ( void )
{
vUsartPrintf(USART2, "AT+RESTORE\r\n");
/*<2A><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>GPIO_InitTypeDef<65><66><EFBFBD>͵Ľṹ<C4BD><E1B9B9>*/
GPIO_InitTypeDef GPIO_InitStructure;
/* <20><><EFBFBD><EFBFBD> CH_PD <20><><EFBFBD><EFBFBD>*/
RCC_APB2PeriphClockCmd ( macESP8266_CH_PD_CLK, ENABLE );
GPIO_InitStructure.GPIO_Pin = macESP8266_CH_PD_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( macESP8266_CH_PD_PORT, & GPIO_InitStructure );
/* <20><><EFBFBD><EFBFBD> RST <20><><EFBFBD><EFBFBD>*/
RCC_APB2PeriphClockCmd ( macESP8266_RST_CLK, ENABLE );
GPIO_InitStructure.GPIO_Pin = macESP8266_RST_PIN;
GPIO_Init ( macESP8266_RST_PORT, & GPIO_InitStructure );
}
void vEsp8266Reset(void)
{
vUsartPrintf(USART2, "AT+RST\r\n");
}
uint8_t ucEsp8266SetMode(uint8_t ucMode)
/**
* @brief vEsp8266Init
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param <20><>
* @retval <20><>
*/
void vEsp8266Init ( void )
{
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 0xFF; // <20><>Чģʽ
}
}
void vEsp8266JoinAp(const char *pcSsid, const char *pcPassword)
{
vUsartPrintf(USART2, "AT+CWJAP=\"%s\",\"%s\"\r\n", pcSsid, pcPassword);
vEsp8266GpioConfig ();
macESP8266_RST_HIGH_LEVEL();
macESP8266_CH_DISABLE();
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ESP8266<EFBFBD><EFBFBD>Ӧ
* @param *pxEspBuffer ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @retval 0: <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>, 1: <20>ɹ<EFBFBD>, 2: ʧ<EFBFBD><EFBFBD>
* @brief vEsp8266Rst
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ESP8266ģ<36><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>vEsp8266AtTest<73><74><EFBFBD>á<EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval <20><>
*/
uint8_t ucEsp8266ResponseHandler(NetFifoBuffer_t *pxEspBuffer)
void vEsp8266Rst ( void )
{
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
if (strstr(pxEspBuffer->cResponseBuffer, "ready") != NULL)
{
return 1; // <20>ɹ<EFBFBD>
}
else if (strstr(pxEspBuffer->cResponseBuffer, "OK") != NULL)
{
return 1; // <20>ɹ<EFBFBD>
}
else if (strstr(pxEspBuffer->cResponseBuffer, "ERROR") != NULL ||
strstr(pxEspBuffer->cResponseBuffer, "FAIL") != NULL)
{
return 2; // ʧ<EFBFBD><EFBFBD>
}
return 0; // <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>
#if 0
bEsp8266Command ( "AT+RST", "OK", "ready", 2500 );
#else
macESP8266_RST_LOW_LEVEL();
vDelayMs ( 500 );
macESP8266_RST_HIGH_LEVEL();
#endif
}
/**
* @brief bEsp8266Command
* @note <20><>ESP8266ģ<36><EFBFBD><E9B7A2>ATָ<54><D6B8>,<2C><><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param cCmd<6D><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD><EFBFBD>
* @param cReply1<79><31>cReply2<79><32><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ΪNULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>ϵ<EFBFBD><CFB5>
* @param ulWaittime<6D><65><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ<EFBFBD><D3A6>ʱ<EFBFBD><CAB1>
* @retval true<75><65>ָ<EFBFBD><EFBFBD>ͳɹ<EFBFBD>
* @retval false<73><65>ָ<EFBFBD><EFBFBD><EEB7A2>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266Command ( char * cCmd, char * cReply1, char * cReply2, uint32_t ulWaittime )
{
strEsp8266_Fram_Record .InfBit .FramLength = 0; //<2F><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
vUsartPrintf ( USART2, "%s\r\n", cCmd );
if ( ( cReply1 == 0 ) && ( cReply2 == 0 ) ) //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return true;
vDelayMs( ulWaittime ); //<2F><>ʱ
strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
// macPC_Usart ( "%s", strEsp8266_Fram_Record .Data_RX_BUF );
if ( ( cReply1 != 0 ) && ( cReply2 != 0 ) )
return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, cReply1 ) ||
( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, cReply2 ) );
else if ( cReply1 != 0 )
return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, cReply1 ) );
else
return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, cReply2 ) );
}
/**
* @brief vEsp8266AtTest
* @note <20><>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AT<41><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param <20><>
* @retval <20><>
*/
void vEsp8266AtTest ( void )
{
char count=0;
macESP8266_RST_HIGH_LEVEL();
vDelayMs( 1000 );
while ( count < 10 )
{
if( bEsp8266Command ( "AT", "OK", NULL, 500 ) ) return;
vEsp8266Rst();
++ count;
}
}
/**
* @brief bEsp8266NetModeChoose
* @note ѡ<><D1A1>ESP8266ģ<36><C4A3><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ,<2C>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param enumMode<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @retval 1<><31>ѡ<EFBFBD><D1A1><EFBFBD>ɹ<EFBFBD>
* @retval 0<><30>ѡ<EFBFBD><D1A1>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266NetModeChoose ( ENUM_Net_ModeTypeDef enumMode )
{
switch ( enumMode )
{
case STA:
return bEsp8266Command ( "AT+CWMODE=1", "OK", "no change", 2500 );
case AP:
return bEsp8266Command ( "AT+CWMODE=2", "OK", "no change", 2500 );
case STA_AP:
return bEsp8266Command ( "AT+CWMODE=3", "OK", "no change", 2500 );
default:
return false;
}
}
/**
* @brief bEsp8266JoinAp
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿWiFi<46><69><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param pSSID<49><44>WiFi<46><69><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param pPassWord<72><64>WiFi<46><69><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>ӳɹ<D3B3>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266JoinAp ( char * pSSID, char * pPassWord )
{
char cCmd [120];
sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord );
return bEsp8266Command ( cCmd, "OK", NULL, 5000 );
}
/**
* @brief bEsp8266BuildAp
* @note ESP8266ģ<36><EFBFBD><E9B4B4>AP<41>ȵ㣬<C8B5>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param pSSID<49><44>AP<41><50><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param pPassWord<72><64>AP<41><50><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param enunPsdMode<64><65>AP<41><50><EFBFBD>ܷ<EFBFBD>ʽ
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266BuildAp ( char * pSSID, char * pPassWord, ENUM_AP_PsdMode_TypeDef enunPsdMode )
{
char cCmd [120];
sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pSSID, pPassWord, enunPsdMode );
return bEsp8266Command ( cCmd, "OK", 0, 1000 );
}
/**
* @brief bEsp8266EnableMultipleId
* @note ESP8266ģ<36><C4A3>ʹ<EFBFBD><CAB9>/<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param enumEnUnvarnishTx<54><78>ENABLE<4C><45>ʹ<EFBFBD>ܶ<EFBFBD><DCB6><EFBFBD><EFBFBD>ӣ<EFBFBD>DISABLE<4C><45><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266EnableMultipleId ( FunctionalState enumEnUnvarnishTx )
{
return bEsp8266Command ( "AT+CIPMUX=%d", "OK", 0, 500 );
}
/**
* @brief bEsp8266LinkServer
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param enumE<6D><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param ip<69><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param ComNum<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>ַ<EFBFBD><D6B7><EFBFBD>
* @param id<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44>
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>ӳɹ<D3B3>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266LinkServer ( ENUM_NetPro_TypeDef enumE, char * ip, char * ComNum, ENUM_ID_NO_TypeDef id)
{
char cStr [100] = { 0 }, cCmd [120];
switch ( enumE )
{
case enumTCP:
sprintf ( cStr, "\"%s\",\"%s\",%s", "TCP", ip, ComNum );
break;
case enumUDP:
sprintf ( cStr, "\"%s\",\"%s\",%s", "UDP", ip, ComNum );
break;
default:
break;
}
if ( id < 5 )
sprintf ( cCmd, "AT+CIPSTART=%d,%s", id, cStr);
else
sprintf ( cCmd, "AT+CIPSTART=%s", cStr );
return bEsp8266Command ( cCmd, "OK", "ALREAY CONNECT", 4000 );
}
/**
* @brief bEsp8266StartOrShutServer
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>رշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param enumMode<64><65>ENABLE<4C><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DISABLE<4C><45><EFBFBD>رշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD>
* @param pPortNum<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>ַ<EFBFBD><D6B7><EFBFBD>
* @param pTimeOver<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266StartOrShutServer ( FunctionalState enumMode, char * pPortNum, char * pTimeOver )
{
char cCmd1 [120], cCmd2 [120];
if ( enumMode )
{
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pPortNum );
sprintf ( cCmd2, "AT+CIPSTO=%s", pTimeOver );
return ( bEsp8266Command ( cCmd1, "OK", 0, 500 ) &&
bEsp8266Command ( cCmd2, "OK", 0, 500 ) );
}
else
{
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 0, pPortNum );
return bEsp8266Command ( cCmd1, "OK", 0, 500 );
}
}
/**
* @brief ucEsp8266GetLinkStatus
* @note <20><>ȡESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param <20><>
* @retval 0<><30>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
* @retval 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AP<41><50>δ<EFBFBD><CEB4><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
* @retval 3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
* @retval 4<><34><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>
*/
uint8_t ucEsp8266GetLinkStatus ( void )
{
if ( bEsp8266Command ( "AT+CIPSTATUS", "OK", 0, 500 ) )
{
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:2\r\n" ) )
return 2;
else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:3\r\n" ) )
return 3;
else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:4\r\n" ) )
return 4;
}
return 0;
}
/**
* @brief ucEsp8266GetIdLinkStatus
* @note <20><>ȡESP8266<36>ĸ<EFBFBD>ID<49><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param <20><>
* @retval <20><>ID<49><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC>λ0~4<>ֱ<EFBFBD><D6B1><EFBFBD>ʾID0~ID4<44><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>0<EFBFBD><30>ʾδ<CABE><CEB4><EFBFBD><EFBFBD>
*/
uint8_t ucEsp8266GetIdLinkStatus ( void )
{
uint8_t ucIdLinkStatus = 0x00;
if ( bEsp8266Command ( "AT+CIPSTATUS", "OK", 0, 500 ) )
{
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:0," ) )
ucIdLinkStatus |= 0x01;
else
ucIdLinkStatus &= ~ 0x01;
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:1," ) )
ucIdLinkStatus |= 0x02;
else
ucIdLinkStatus &= ~ 0x02;
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:2," ) )
ucIdLinkStatus |= 0x04;
else
ucIdLinkStatus &= ~ 0x04;
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:3," ) )
ucIdLinkStatus |= 0x08;
else
ucIdLinkStatus &= ~ 0x08;
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:4," ) )
ucIdLinkStatus |= 0x10;
else
ucIdLinkStatus &= ~ 0x10;
}
return ucIdLinkStatus;
}
/**
* @brief ucEsp8266InquireApIp
* @note <20><>ȡESP8266<36><36>AP IP<49><50><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param pApIp<49><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AP IP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
* @param ucArrayLength<74><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AP IP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
* @retval 0<><30><EFBFBD><EFBFBD>ȡʧ<C8A1><CAA7>
* @retval 1<><31><EFBFBD><EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD>
*/
uint8_t ucEsp8266InquireApIp ( char * pApIp, uint8_t ucArrayLength )
{
char uc;
char * pCh;
bEsp8266Command ( "AT+CIFSR", "OK", 0, 500 );
pCh = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "APIP,\"" );
if ( pCh )
pCh += 6;
else
return 0;
for ( uc = 0; uc < ucArrayLength; uc ++ )
{
pApIp [ uc ] = * ( pCh + uc);
if ( pApIp [ uc ] == '\"' )
{
pApIp [ uc ] = '\0';
break;
}
}
return 1;
}
/**
* @brief bEsp8266UnvarnishSend
* @note <20><><EFBFBD><EFBFBD>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ<C4A3><CABD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param <20><>
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>óɹ<C3B3>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266UnvarnishSend ( void )
{
bEsp8266Command ( "AT+CIPMODE=1", "OK", 0, 500 );
}
/**
* @brief vEsp8266ExitUnvarnishSend
* @note ʹESP8266ģ<36><C4A3><EFBFBD>˳<EFBFBD>͸<EFBFBD><CDB8>ģʽ<C4A3><CABD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param <20><>
* @retval <20><>
*/
void vEsp8266ExitUnvarnishSend ( void )
{
vDelayMs( 1000 );
vUsartPrintf ( USART2, "+++" );
vDelayMs( 500 );
}
/**
* @brief bEsp8266SendString
* @note ESP8266ģ<36><EFBFBD><E9B7A2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param enumEnUnvarnishTx<54><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ
* @param pStr<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>׵<EFBFBD>ַ
* @param ulStrLength<74><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param ucId<49><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44>
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>ͳɹ<CDB3>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266SendString ( FunctionalState enumEnUnvarnishTx, char * pStr, uint32_t ulStrLength, ENUM_ID_NO_TypeDef ucId )
{
char cStr [20];
bool bRet = false;
if ( enumEnUnvarnishTx )
{
vUsartPrintf ( USART2, "%s", pStr );
bRet = true;
}
else
{
if ( ucId < 5 )
sprintf ( cStr, "AT+CIPSEND=%d,%d", ucId, ulStrLength + 2 );
else
sprintf ( cStr, "AT+CIPSEND=%d", ulStrLength + 2 );
bEsp8266Command ( cStr, "> ", 0, 1000 );
bRet = bEsp8266Command ( pStr, "SEND OK", 0, 1000 );
}
return bRet;
}
/**
* @brief pcEsp8266ReceiveString
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param enumEnUnvarnishTx<54><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ
* @retval <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>׵<EFBFBD>ַ<EFBFBD><D6B7>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>0
*/
char * pcEsp8266ReceiveString ( FunctionalState enumEnUnvarnishTx )
{
char * pRecStr = 0;
strEsp8266_Fram_Record .InfBit .FramLength = 0;
strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;
while ( ! strEsp8266_Fram_Record .InfBit .FramFinishFlag );
strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
if ( enumEnUnvarnishTx )
pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
else
{
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
}
return pRecStr;
}

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);
}
}

View File

@@ -1,18 +1,114 @@
#ifndef __ESP8266_H__
#define __ESP8266_H__
#ifndef __ESP8266_SAMPLE_H__
#define __ESP8266_SAMPLE_H__
#include "string.h"
#include "stdbool.h"
#include "stm32f10x.h"
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include "Delay.h"
#include "USART.h"
#include "NetFIFO.h"
#define ESP8266_MODE_STATION 0
#define ESP8266_MODE_SOFTAP 1
void vEsp8266Restore(void);
void vEsp8266Reset(void);
uint8_t ucEsp8266SetMode(uint8_t ucMode);
void vEsp8266JoinAp(const char *pcSsid, const char *pcPassword);
uint8_t ucEsp8266ResponseHandler(NetFifoBuffer_t *pxEspBuffer);
#if defined ( __CC_ARM )
#pragma anon_unions
#endif
/******************************* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> ***************************/
typedef enum{
STA,
AP,
STA_AP
} ENUM_Net_ModeTypeDef;
typedef enum{
enumTCP,
enumUDP,
} ENUM_NetPro_TypeDef;
typedef enum{
Multiple_ID_0 = 0,
Multiple_ID_1,
Multiple_ID_2,
Multiple_ID_3,
Multiple_ID_4,
Single_ID_0,
} ENUM_ID_NO_TypeDef;
typedef enum{
OPEN = 0,
WEP,
WPA_PSK,
WPA2_PSK,
WPA_WPA2_PSK,
} ENUM_AP_PsdMode_TypeDef;
/* ESP8266 <20>ⲿȫ<E2B2BF>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RX_BUF_MAX_LEN 1024 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
extern struct STRUCT_USARTx_Fram // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
{
char Data_RX_BUF [ RX_BUF_MAX_LEN ];
union {
__IO uint16_t InfAll;
struct {
__IO uint16_t FramLength :15; // 14:0
__IO uint16_t FramFinishFlag :1; // 15
} InfBit;
};
} strEsp8266_Fram_Record;
extern volatile uint8_t ucTcpClosedFlag;
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD> */
#define macESP8266_CH_PD_CLK RCC_APB2Periph_GPIOA
#define macESP8266_CH_PD_PORT GPIOA
#define macESP8266_CH_PD_PIN GPIO_Pin_5
#define macESP8266_RST_CLK RCC_APB2Periph_GPIOA
#define macESP8266_RST_PORT GPIOA
#define macESP8266_RST_PIN GPIO_Pin_6
#define macESP8266_USART_BAUD_RATE 115200
#define macESP8266_USART USART2
#define macESP8266_USART_CLK RCC_APB1Periph_USART2
#define macESP8266_USART_GPIO_CLK RCC_APB2Periph_GPIOA
#define macESP8266_USART_TX_PORT GPIOA
#define macESP8266_USART_TX_PIN GPIO_Pin_2
#define macESP8266_USART_RX_PORT GPIOA
#define macESP8266_USART_RX_PIN GPIO_Pin_3
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8> */
// #define vEsp8266Printf(*format, ...) vUsartPrintf(macESP8266_USART, *format, ...)
#define macESP8266_CH_ENABLE() GPIO_SetBits ( macESP8266_CH_PD_PORT, macESP8266_CH_PD_PIN )
#define macESP8266_CH_DISABLE() GPIO_ResetBits ( macESP8266_CH_PD_PORT, macESP8266_CH_PD_PIN )
#define macESP8266_RST_HIGH_LEVEL() GPIO_SetBits ( macESP8266_RST_PORT, macESP8266_RST_PIN )
#define macESP8266_RST_LOW_LEVEL() GPIO_ResetBits ( macESP8266_RST_PORT, macESP8266_RST_PIN )
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
static void vEsp8266GpioConfig ( void );
void vEsp8266Init ( void );
void vEsp8266Rst ( void );
bool bEsp8266Command ( char * cCmd, char * cReply1, char * cReply2, uint32_t ulWaittime );
void vEsp8266AtTest ( void );
bool bEsp8266NetModeChoose ( ENUM_Net_ModeTypeDef enumMode );
bool bEsp8266JoinAp ( char * pSSID, char * pPassWord );
bool bEsp8266BuildAp ( char * pSSID, char * pPassWord, ENUM_AP_PsdMode_TypeDef enunPsdMode );
bool bEsp8266EnableMultipleId ( FunctionalState enumEnUnvarnishTx );
bool bEsp8266LinkServer ( ENUM_NetPro_TypeDef enumE, char * ip, char * ComNum, ENUM_ID_NO_TypeDef id);
bool bEsp8266StartOrShutServer ( FunctionalState enumMode, char * pPortNum, char * pTimeOver );
uint8_t ucEsp8266GetLinkStatus ( void );
uint8_t ucEsp8266GetIdLinkStatus ( void );
uint8_t ucEsp8266InquireApIp ( char * pApIp, uint8_t ucArrayLength );
bool bEsp8266UnvarnishSend ( void );
void vEsp8266ExitUnvarnishSend ( void );
bool bEsp8266SendString ( FunctionalState enumEnUnvarnishTx, char * pStr, uint32_t ulStrLength, ENUM_ID_NO_TypeDef ucId );
char * pcEsp8266ReceiveString ( FunctionalState enumEnUnvarnishTx );
/* <20>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õIJ<C3B5><C4B2><EFBFBD> */
#define macUser_ESP8266_ApSsid "TESTAP666" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define macUser_ESP8266_ApPwd "123345567" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>Կ
/* <20>ⲿȫ<E2B2BF>ֱ<EFBFBD><D6B1><EFBFBD> */
#endif /* __ESP8266_H */

View File

@@ -0,0 +1,30 @@
#ifndef __ESP8266_H__
#define __ESP8266_H__
#include "string.h"
#include "stdbool.h"
#include "USART.h"
#include "NetFIFO.h"
typedef enum {
ESP8266_MODE_STATION = 0,
ESP8266_MODE_SOFTAP,
INVALID_MODE
} eEsp8266Mode_t;
typedef enum {
ESP8266_RESPONSE_READY = 0,
ESP8266_RESPONSE_OK,
ESP8266_RESPONSE_ERROR,
ESP8266_RESPONSE_BUSY,
ESP8266_RESPONSE_TIMEOUT
} eEsp8266Status_t;
void vEsp8266Restore(NetFifoBuffer_t *pxEspBuffer);
void vEsp8266Reset(void);
eEsp8266Mode_t ucEsp8266SetMode(uint8_t ucMode);
void vEsp8266JoinAp(const char *pcSsid, const char *pcPassword);
eEsp8266Status_t ucEsp8266ResHandler(NetFifoBuffer_t *pxEspBuffer);
void ucEsp8266Log(NetFifoBuffer_t *pxEspBuffer);
#endif