admin管理员组

文章数量:1620378

ESP8266串口型WIFI,主要用于传开关量、温度等

 

连线:

VCC     ----3.3V

RST      ----PE6  低电平复位

CH_PD ----PG7  使能脚,高电平正常工作

UTXD   ----USART2  RX

URXD   ----USART2  TX

GND     ----GND


 

 

此次试验选STA模式的TCP Client透传,让WIFI模块连接路由器,然后在网络调试助手上设置好连接的IP地址和端口

 

STA模式,8266为客户端,PC是服务端

 

USART2发送的数据经过8266传输到网络调试助手上显示

 

8266默认波特率115200,8N1

所以USART2配置一样

 

 

修改WiFi名称、密码和IP

在下载程序前,修改sta_tcpclent_test.h

#define User_ESP8266_SSID "......" //要连接的热点的名称

#define User_ESP8266_PWD "......" //要连接的热点的密码

#define User_ESP8266_TCPServer_IP "......" //要连接的服务

器的IP,也就是电脑

#define User_ESP8266_TCPServer_PORT "......" //要连接的服务器的

 

端口

程序使用例程,注意一下几个函数就好

下面的函数,放入main.c的while(1)中

void ESP8266_STA_TCPClient_Test(void)

{

u8 res;

char str[100]={0};

printf ( "\r\n正在配置ESP8266请耐心等待...\r\n" );

 

ESP8266_CH_PD_Pin_SetH;//PG7 = 1

 

ESP8266_AT_Test();

ESP8266_Net_Mode_Choose(STA);

 

while(!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD));//连接外部wifi

ESP8266_Enable_MultipleId ( DISABLE );

while(!ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0));

//开启服务器和端口

while(!ESP8266_UnvarnishSend());

printf ( "\r\n配置ESP8266 OK!\r\n" );

while ( 1 )

{

sprintf (str,"GET IT!\r\n" );//这是发到PC的数据

ESP8266_SendString ( ENABLE, str, 0, Single_ID_0 );//发送给PC,在PC上显示

delay_ms(1000);

if(TcpClosedFlag) //检测是否失去连接

{

ESP8266_ExitUnvarnishSend(); //退出透传模式

do

{

res = ESP8266_Get_LinkStatus();     //获取连接状态

}

while(!res);

if(res == 4)                     //确认失去连接后重连

{

printf ( "\r\n请稍等,正在重连热点和服务器...\r\n" );

while (!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD ) );

while (!ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0 ) );

printf ( "\r\n重连热点和服务器成功\r\n" );

while(!ESP8266_UnvarnishSend());

}

}

}

 

 

//对ESP8266模块发送AT指令,重要函数

// cmd:待发送的指令

// ack1,ack2:期待的响应,为NULL表不需响应,两者为或逻辑关系

// time:等待响应的时间

//返回1:发送成功 0:失败

//if(ESP8266_Send_AT_Cmd("AT","OK",NULL,500)) 

bool ESP8266_Send_AT_Cmd(char *cmd,char *ack1,char *ack2,u32 time)

{

ESP8266_Fram_Record_Struct .InfBit .FramLength = 0; //从新开始接收新的数据包

ESP8266_USART("%s\r\n", cmd);//发送AT  

if(ack1==0&&ack2==0) //不需要接收数据

{

return true;

}

delay_ms(time);   //延时time时间

 

ESP8266_Fram_Record_Struct.Data_RX_BUF[ESP8266_Fram_Record_Struct.InfBit.FramLength ] = '\0';

//增加一个结束符。结合USART2中断看

PC_USART("%s", ESP8266_Fram_Record_Struct .Data_RX_BUF);//利用USART1打印

 

if(ack1!=0&&ack2!=0)

{

return ( ( bool ) strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, ack1 ) || 

( bool ) strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, ack2 ) );

}

else if( ack1 != 0 )//strstr(s1,s2);检测s2是否为s1的一部分,是返回该位置,否则返回false,它强制转换为bool类型了

return ( ( bool ) strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, ack1 ) );

else

return ( ( bool ) strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, ack2 ) );

}

 

AT指令:8266和单片机的交流语言

参考:ESP8266AT指令集安信可

 

下载完程序后运行如下:

USART1打印到PC


 

 

USART2传到8266,8266传到PC的网络调试助手

 

本文标签: 数据wifi