历史上的今天
今天是:2024年10月07日(星期一)
2018年10月07日 | 基于STM32F103的wifi数据透传
2018-10-07 来源:eefocus
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的网络调试助手

史海拾趣
|
WinCE在已连接到GPRS网络下,怎么判断收到来电和短信? WinCE在已连接到GPRS网络下, 这个时候有新来电和新短信,怎么能判断呢? 有新来电时能听见Wince\"叮\"的响了一声,但不知道是哪个程序响 如果自己控制走串口通过AT指令的话,实现GPRS拨号又很麻烦,希望有更好的方法解决!… 查看全部问答> |
|
IMPORT |Image$$RO$$Base| ; Base of ROM code IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data) & ...… 查看全部问答> |
|
感觉新手发布的帖子很少被关注,新手的求助很少有人提供帮助。知道大家都很忙,但是还是请高手们挤出点时间,多帮助帮助我们这些新手。在这个充满爱心的论坛,让不管是新手还是高手,都感觉到家一样的温暖!谢谢大家!… 查看全部问答> |
|
请教达人: 我设计的设备采用总线插槽的方式,除电源板、DSP板卡外还有5个扩展板卡,其中2个输出3个输入,每个板卡上均有cpld,cpld实现简单的译码功能。DSP读输入板卡时发现: 1、3块输入cpld板卡都插上时,dsp循环读各输入板卡数据,从ccs窗口 ...… 查看全部问答> |
|
32位周期触发模式编译通过但是LED就是没有反应,纠结中... 各位路过的TX,我是一个入门者,前段时间拿到了TI LM3S 811评估板, 在练习32位周期触发模式,但是LED就是没有反应,纠结中...其实也是参考黄智伟先生编写的32位ARM微控制器系统设计与实践第四章的例程.请帮忙看看程序哪儿有问题,编译通过,就是LED无反应 ...… 查看全部问答> |




