20260107:实现简单的MQTT协议。

This commit is contained in:
2026-01-07 03:22:21 +08:00
parent 408af68973
commit 3fc72c66be
7 changed files with 395 additions and 374 deletions

View File

@@ -1,9 +1,8 @@
#include "esp8266.h"
volatile uint8_t ucTcpClosedFlag = 0;
char cStr [ 1500 ] = { 0 };
struct STRUCT_USARTx_Fram strEsp8266_Fram_Record = { 0 };
struct SerialFrame_t xSerialFrameRecord = { 0 };
/**
* @brief vEsp8266GpioConfig
@@ -61,28 +60,28 @@ void vEsp8266Rst ( void )
/**
* @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><D6B8>
* @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 pcCmd<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD><EFBFBD>
* @param pcReply1<EFBFBD><EFBFBD>pcReply2<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ΪNULL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>
* @param ulWaittime<6D><65><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ<EFBFBD><D3A6>ʱ<EFBFBD><CAB1>
* @retval true<75><65>ָ<EFBFBD><EFBFBD>ͳɹ<CDB3>
* @retval false<73><65>ָ<EFBFBD><EFBFBD><EEB7A2>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266Command ( char * cCmd, char * cReply1, char * cReply2, uint32_t ulWaittime )
bool bEsp8266Command ( char * pcCmd, char * pcAck1, char * pcAck2, 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>
xSerialFrameRecord .Bits_t .usFrameLength = 0; //<2F><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
vUsartPrintf ( USART2, "%s\r\n", pcCmd );
if ( ( pcAck1 == 0 ) && ( pcAck2 == 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 ) );
xSerialFrameRecord .cSerialReceivedBuffer [ xSerialFrameRecord .Bits_t .usFrameLength ] = '\0';
// macPC_Usart ( "%s", xSerialFrameRecord .cSerialReceivedBuffer );
if ( ( pcAck1 != 0 ) && ( pcAck2 != 0 ) )
return ( ( bool ) strstr ( xSerialFrameRecord .cSerialReceivedBuffer, pcAck1 ) ||
( bool ) strstr ( xSerialFrameRecord .cSerialReceivedBuffer, pcAck2 ) );
else if ( pcAck1 != 0 )
return ( ( bool ) strstr ( xSerialFrameRecord .cSerialReceivedBuffer, pcAck1 ) );
else
return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, cReply2 ) );
return ( ( bool ) strstr ( xSerialFrameRecord .cSerialReceivedBuffer, pcAck2 ) );
}
/**
@@ -107,13 +106,13 @@ void vEsp8266AtTest ( void )
/**
* @brief bEsp8266NetModeChoose
* @note ѡ<><D1A1>ESP8266ģ<36><C4A3><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ,<2C>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param enumMode<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param xMode<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @retval 1<><31>ѡ<EFBFBD><D1A1><EFBFBD>ɹ<EFBFBD>
* @retval 0<><30>ѡ<EFBFBD><D1A1>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266NetModeChoose ( ENUM_Net_ModeTypeDef enumMode )
bool bEsp8266NetModeChoose ( eNetMode_t xMode )
{
switch ( enumMode )
switch ( xMode )
{
case STA:
return bEsp8266Command ( "AT+CWMODE=1", "OK", "no change", 2500 );
@@ -129,42 +128,68 @@ bool bEsp8266NetModeChoose ( ENUM_Net_ModeTypeDef enumMode )
/**
* @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<EFBFBD><EFBFBD>WiFi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param pPassWord<72><64>WiFi<46><69><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param pcSsid<EFBFBD><EFBFBD>WiFi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param pcPassWord<EFBFBD><EFBFBD>WiFi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>ӳɹ<D3B3>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266JoinAp ( char * pSSID, char * pPassWord )
bool bEsp8266JoinAp ( char * pcSsid, char * pcPassWord )
{
char cCmd [120];
sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord );
sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pcSsid, pcPassWord );
return bEsp8266Command ( cCmd, "OK", NULL, 5000 );
}
/**
* @brief bEsp8266MqttInit
* @note ESP8266ģ<36><C4A3>MQTT<54><54>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param pcMqttUser<65><72>MQTT<54>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param pcMqttPwd<77><64>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param pcMqttCliId<49><64>MQTT<54>ͻ<EFBFBD><CDBB><EFBFBD>ID<49>ַ<EFBFBD><D6B7><EFBFBD>
* @param pcMqttServerIp<49><70>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param usMqttServerPort<72><74>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
* @retval 1<><31><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
* @retval 0<><30><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266MqttInit ( char * pcMqttUser, char * pcMqttPwd, char * pcMqttCliId, char * pcMqttServerIp, char * usMqttServerPort )
{
char cCmd [200];
sprintf ( cCmd, "AT+MQTTUSERCFG=0,1,\"NULL\",\"%s\",\"%s\",0,0,\"\"", pcMqttUser, pcMqttPwd );
if ( ! bEsp8266Command ( cCmd, "OK", NULL, 1500 ) )
return false;
sprintf ( cCmd, "AT+MQTTCLIENTID=0,\"%s\"", pcMqttCliId );
if ( ! bEsp8266Command ( cCmd, "OK", NULL, 1500 ) )
return false;
sprintf ( cCmd, "AT+MQTTCONN=0,\"%s\",%s,1", pcMqttServerIp, usMqttServerPort );
if ( ! bEsp8266Command ( cCmd, "OK", NULL, 2000 ) )
return false;
return true;
}
/**
* @brief bEsp8266BuildAp
* @note ESP8266ģ<36><EFBFBD><E9B4B4>AP<41>ȵ㣬<C8B5>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param pSSID<EFBFBD><EFBFBD>AP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param pPassWord<72><64>AP<41><50><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param enunPsdMode<EFBFBD><EFBFBD>AP<EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD>ʽ
* @param pcSsid<EFBFBD><EFBFBD>AP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param pcPassWord<EFBFBD><EFBFBD>AP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param xPsdMode<EFBFBD><EFBFBD>AP<EFBFBD><EFBFBD><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 )
bool bEsp8266BuildAp ( char * pcSsid, char * pcPassWord, eApPsdMode_t xPsdMode )
{
char cCmd [120];
sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pSSID, pPassWord, enunPsdMode );
sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pcSsid, pcPassWord, xPsdMode );
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<EFBFBD><EFBFBD>ENABLE<EFBFBD><EFBFBD>ʹ<EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>DISABLE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param xEnumEnUnvarnishTx<EFBFBD><EFBFBD>ENABLE<EFBFBD><EFBFBD>ʹ<EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>DISABLE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><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 )
bool bEsp8266EnableMultipleId ( FunctionalState xEnumEnUnvarnishTx )
{
return bEsp8266Command ( "AT+CIPMUX=%d", "OK", 0, 500 );
}
@@ -173,28 +198,28 @@ bool bEsp8266EnableMultipleId ( FunctionalState enumEnUnvarnishTx )
* @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<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param ComNum<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>ַ<EFBFBD><D6B7><EFBFBD>
* @param id<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD>
* @param pcIp<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param pcComNum<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param xId<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD>
* @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)
bool bEsp8266LinkServer ( eNetPro_t enumE, char * pcIp, char * pcComNum, eIdNo_t xId)
{
char cStr [100] = { 0 }, cCmd [120];
switch ( enumE )
{
case enumTCP:
sprintf ( cStr, "\"%s\",\"%s\",%s", "TCP", ip, ComNum );
sprintf ( cStr, "\"%s\",\"%s\",%s", "TCP", pcIp, pcComNum );
break;
case enumUDP:
sprintf ( cStr, "\"%s\",\"%s\",%s", "UDP", ip, ComNum );
sprintf ( cStr, "\"%s\",\"%s\",%s", "UDP", pcIp, pcComNum );
break;
default:
break;
}
if ( id < 5 )
sprintf ( cCmd, "AT+CIPSTART=%d,%s", id, cStr);
if ( xId < 5 )
sprintf ( cCmd, "AT+CIPSTART=%d,%s", xId, cStr);
else
sprintf ( cCmd, "AT+CIPSTART=%s", cStr );
return bEsp8266Command ( cCmd, "OK", "ALREAY CONNECT", 4000 );
@@ -203,25 +228,25 @@ bool bEsp8266LinkServer ( ENUM_NetPro_TypeDef enumE, char * ip, char * ComNum, E
/**
* @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<EFBFBD><EFBFBD>ENABLE<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DISABLE<EFBFBD><EFBFBD><EFBFBD>رշ<EFBFBD><EFBFBD><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>
* @param xMode<EFBFBD><EFBFBD>ENABLE<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DISABLE<EFBFBD><EFBFBD><EFBFBD>رշ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param pcPortNum<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param pcTimeOver<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><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 )
bool bEsp8266StartOrShutServer ( FunctionalState xMode, char * pcPortNum, char * pcTimeOver )
{
char cCmd1 [120], cCmd2 [120];
if ( enumMode )
if ( xMode )
{
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pPortNum );
sprintf ( cCmd2, "AT+CIPSTO=%s", pTimeOver );
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pcPortNum );
sprintf ( cCmd2, "AT+CIPSTO=%s", pcTimeOver );
return ( bEsp8266Command ( cCmd1, "OK", 0, 500 ) &&
bEsp8266Command ( cCmd2, "OK", 0, 500 ) );
}
else
{
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 0, pPortNum );
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 0, pcPortNum );
return bEsp8266Command ( cCmd1, "OK", 0, 500 );
}
}
@@ -239,12 +264,12 @@ uint8_t ucEsp8266GetLinkStatus ( void )
{
if ( bEsp8266Command ( "AT+CIPSTATUS", "OK", 0, 500 ) )
{
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:2\r\n" ) )
if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "STATUS:2\r\n" ) )
return 2;
else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:3\r\n" ) )
else if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "STATUS:3\r\n" ) )
return 3;
else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:4\r\n" ) )
else if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "STATUS:4\r\n" ) )
return 4;
}
return 0;
@@ -261,23 +286,23 @@ 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," ) )
if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "+CIPSTATUS:0," ) )
ucIdLinkStatus |= 0x01;
else
ucIdLinkStatus &= ~ 0x01;
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:1," ) )
if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "+CIPSTATUS:1," ) )
ucIdLinkStatus |= 0x02;
else
ucIdLinkStatus &= ~ 0x02;
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:2," ) )
if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "+CIPSTATUS:2," ) )
ucIdLinkStatus |= 0x04;
else
ucIdLinkStatus &= ~ 0x04;
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:3," ) )
if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "+CIPSTATUS:3," ) )
ucIdLinkStatus |= 0x08;
else
ucIdLinkStatus &= ~ 0x08;
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:4," ) )
if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "+CIPSTATUS:4," ) )
ucIdLinkStatus |= 0x10;
else
ucIdLinkStatus &= ~ 0x10;
@@ -288,27 +313,27 @@ uint8_t ucEsp8266GetIdLinkStatus ( void )
/**
* @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 pcApIp<EFBFBD><EFBFBD><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 )
uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength )
{
char uc;
char * pCh;
bEsp8266Command ( "AT+CIFSR", "OK", 0, 500 );
pCh = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "APIP,\"" );
pCh = strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "APIP,\"" );
if ( pCh )
pCh += 6;
else
return 0;
for ( uc = 0; uc < ucArrayLength; uc ++ )
{
pApIp [ uc ] = * ( pCh + uc);
if ( pApIp [ uc ] == '\"' )
pcApIp [ uc ] = * ( pCh + uc);
if ( pcApIp [ uc ] == '\"' )
{
pApIp [ uc ] = '\0';
pcApIp [ uc ] = '\0';
break;
}
}
@@ -343,30 +368,30 @@ void vEsp8266ExitUnvarnishSend ( void )
/**
* @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<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>ģʽ
* @param pStr<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>׵<EFBFBD>ַ
* @param xEnumEnUnvarnishTx<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>ģʽ
* @param pcStr<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><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 )
bool bEsp8266SendString ( FunctionalState xEnumEnUnvarnishTx, char * pcStr, uint32_t ulStrLength, eIdNo_t xId )
{
char cStr [20];
bool bRet = false;
if ( enumEnUnvarnishTx )
if ( xEnumEnUnvarnishTx )
{
vUsartPrintf ( USART2, "%s", pStr );
vUsartPrintf ( USART2, "%s", pcStr );
bRet = true;
}
else
{
if ( ucId < 5 )
sprintf ( cStr, "AT+CIPSEND=%d,%d", ucId, ulStrLength + 2 );
if ( xId < 5 )
sprintf ( cStr, "AT+CIPSEND=%d,%d", xId, ulStrLength + 2 );
else
sprintf ( cStr, "AT+CIPSEND=%d", ulStrLength + 2 );
bEsp8266Command ( cStr, "> ", 0, 1000 );
bRet = bEsp8266Command ( pStr, "SEND OK", 0, 1000 );
bRet = bEsp8266Command ( pcStr, "SEND OK", 0, 1000 );
}
return bRet;
}
@@ -374,22 +399,22 @@ bool bEsp8266SendString ( FunctionalState enumEnUnvarnishTx, char * pStr, uint32
/**
* @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<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>ģʽ
* @param xEnumEnUnvarnishTx<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>ģʽ
* @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 * pcEsp8266ReceiveString ( FunctionalState xEnumEnUnvarnishTx )
{
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;
xSerialFrameRecord .Bits_t .usFrameLength = 0;
xSerialFrameRecord .Bits_t .usFrameFinishFlag = 0;
while ( ! xSerialFrameRecord .Bits_t .usFrameFinishFlag );
xSerialFrameRecord .cSerialReceivedBuffer [ xSerialFrameRecord .Bits_t .usFrameLength ] = '\0';
if ( xEnumEnUnvarnishTx )
pRecStr = xSerialFrameRecord .cSerialReceivedBuffer;
else
{
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
if ( strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "+IPD" ) )
pRecStr = xSerialFrameRecord .cSerialReceivedBuffer;
}
return pRecStr;
}