ESP8266和STM32的程序代碼
ESP8266模塊在STM32上做Server時(shí),外部對(duì)其端口進(jìn)行收發(fā)數(shù)據(jù)的程序,大部分代碼都備注了說(shuō)明。
因?yàn)槭菑腸lient代碼改來(lái)的,所以函數(shù)名不去改它了。
#include"sta_tcpclent_test.h"
#include "SysTick.h"
#include "usart.h"
#include "esp8266_drive.h"
#include
#include
volatile u8 TcpClosedFlag = 0;//定義失去連接標(biāo)志
void ESP8266_STA_TCPClient_Test(void)
{
u8 res;
u32 ul=0;
char str[100]={0},*links,*UserCmd;//links為檢測(cè)連接字符串變量,usercmd為用戶命令字符串變量
printf ( "rn正在配置8266rn" );//向串口1發(fā)消息
links="STATUS:3";//STATUS=2表示無(wú)連接,=3為有連接
ESP8266_CH_PD_Pin_SetH;//設(shè)置CH_PD為高電平
ESP8266_AT_Test();//AT測(cè)試
ESP8266_Net_Mode_Choose(STA_AP);//選擇模式
while(!ESP8266_JoinAP(User_ESP8266_SSID,User_ESP8266_PWD));//連接外部wifi,
ESP8266_Enable_MultipleId (ENABLE );//設(shè)置多鏈接
while(!ESP8266_StartOrShutServer ( ENABLE, "8266", "2000" ));//開(kāi)啟服務(wù)器和端口
printf ( "rn配置ESP8266 OKrn" );
while (1)//無(wú)限循環(huán)
{
ESP8266_Send_AT_Cmd ( "AT+CIPSTATUS", "ok", 0, 1000 );//查看鏈接狀態(tài)
if(strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, links))//如果有鏈接
{
printf ( "rn有客戶端連接rn" );
UserCmd="mhmx";//客戶端發(fā)來(lái)的命令字符串,可以是中文“開(kāi)啟”,“關(guān)閉”等
if(ESP8266_QL(UserCmd))//如果命令字符串匹配執(zhí)行下列代碼
{
printf ( "rn接收到指令rn" );//
//這里可以添加自己需要的代碼,比如打開(kāi)LED,或某個(gè)引腳的電平
sprintf (str,"智能家居啟動(dòng)完成rn" );
ul = strlen ( str );
ESP8266_SendString ( DISABLE, str, ul, Multiple_ID_0 );//向客戶端發(fā)數(shù)據(jù)
delay_ms (1000);
}
else//接收到的字符串不匹配
{
printf ( "rn無(wú)有效命令rn" );
}
}
else//沒(méi)有鏈接
{
printf ( "rn無(wú)客戶端連接rn" );
}
//以下代碼為檢測(cè)是否和wifi失去連接,如果丟失連接,就重新連接。
if(TcpClosedFlag) //檢查標(biāo)志位
{
//ESP8266_ExitUnvarnishSend(); //退出透?jìng)髂J剑缬行枰サ?/
do
{
res = ESP8266_Get_LinkStatus(); //獲取鏈接狀態(tài)
}
while(!res);//如果為0,獲取狀態(tài)失敗,一直獲取
if(res == 4) //4表示失去連接
{
printf ( "rn正在重新連接rn" );
while(!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD ) );
while(!ESP8266_Enable_MultipleId (ENABLE ));
while(!ESP8266_StartOrShutServer ( ENABLE, "8266", "500" ));
//while (!ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0 ) );//如果8266是client模式,去掉//啟用此代碼
printf ( "rn重新連接成功rn" );
}
//while(!ESP8266_UnvarnishSend());//重新啟動(dòng)透?jìng)鳎绻枰サ?/
}
}
}