atk_8266_wifista_test函数
作用:ATK-ESP8266 WIFI STA 测试函数
/***********************************************************/
//ATK-ESP8266 WIFI STA 测试
//用于测试TCP/UDP 连接
//返回值:0,正常
// 其他,错误代码
u8 netpro=0; //网络模式
u8 atk_8266_wifista_test(void)
{
//u8 netpro=0; //网络模式
u8 key;
u8 timex=0;
u8 ipbuf[16]; //IP 缓存
u8 *p;
u16 t=999; //加速第一次获取链接状态
u8 res=0;
u16 rlen=0;
u8 constate=0; //连接状态
p=mymalloc(SRAMIN,32); //申请 32字节内存
atk_8266_send_cmd("AT+CWMODE=1","OK",50); //设置 WIFI STA 模式
delay_ms(1000); //设置连接到的WIFI网络名称/加密方式/密码,这几个参数需要根据您自己的路由
//器设置进行修改!!
sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);
//设置无线参数:ssid,密码
atk_8266_send_cmd(p,"WIFI GOT IP",1000);
//连接目标路由器
PRESTA:
netpro|=atk_8266_netpro_sel(50,30,(u8*)ATK_ESP8266_CWMODE_TBL[0]);
//选择网络模式
if(netpro&0X02) //UDP
{
LCD_Clear(WHITE);
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-ESP WIFI-STA 测试",16,240);
Show_Str(30,50,200,16,"正在配置 ATK-ESP 模块,请稍等...",12,0);
if(atk_8266_ip_set("WIFI-STA 远端UDP IP设置",(u8*)ATK_ESP8266
_WORKMODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA;
//IP 输入
sprintf((char*)p,"AT+CIPSTART=\"UDP\",\"%s\",%s",ipbuf,(u8*)portnu
m);
//配置目标UDP 服务器
delay_ms(200);
atk_8266_send_cmd("AT+CIPMUX=0","OK",20); //单链接模式
delay_ms(200);
LCD_Clear(WHITE);
while(atk_8266_send_cmd(p,"OK",500));
}
else //TCP
{
if(netpro&0X01) //TCP Client 透传模式测试
{
LCD_Clear(WHITE);
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-ESP WIFI-STA 测试",16,240);
Show_Str(30,50,200,16,"正在配置ATK-ESP 模块,请稍等...",12,0);
if(atk_8266_ip_set("WIFI-STA 远端 IP 设置",(u8*)ATK_ESP8266_WORK
MODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA;
//IP 输入
atk_8266_send_cmd("AT+CIPMUX=0","OK",20); //0:单连接,1:多连接
sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum);
//配置目标TCP 服务器
while(atk_8266_send_cmd(p,"OK",200))
{
LCD_Clear(WHITE); POINT_COLOR=RED;
Show_Str_Mid(0,40,"WK_UP:返回重选",16,240);
Show_Str(30,80,200,12,"ATK-ESP 连接TCP 失败",12,0);
//连接失败
key=KEY_Scan(0);
if(key==4)goto PRESTA;
}
atk_8266_send_cmd("AT+CIPMODE=1","OK",200);
//传输模式为:透传
}
else //TCP Server
{
LCD_Clear(WHITE);
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-ESP WIFI-STA 测试",16,240);
Show_Str(30,50,200,16,"正在配置 ATK-ESP 模块,请稍等...",12,0);
atk_8266_send_cmd("AT+CIPMUX=1","OK",20);
//0:单连接,1:多连接
sprintf((char*)p,"AT+CIPSERVER=1,%s",(u8*)portnum);
//开启 Server模式(0,关闭;1,打开),端口号为portnum
atk_8266_send_cmd(p,"OK",50);
}
}
LCD_Clear(WHITE);
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-ESP WIFI-STA 测试",16,240);
Show_Str(30,50,200,16,"正在配置ATK-ESP 模块,请稍等...",12,0);
LCD_Fill(30,50,239,50+12,WHITE); //清除之前的显示
Show_Str(30,50,200,16,"WK_UP:退出测试 KEY0:发送数据",12,0);
LCD_Fill(30,80,239,80+12,WHITE);
atk_8266_get_wanip(ipbuf); //获取当前模块的 IP
sprintf((char*)p,"IP 地址:%s 端口:%s",ipbuf,(u8*)portnum);
Show_Str(30,65,200,12,p,12,0); //显示 IP 地址和端口
Show_Str(30,80,200,12,"状态:",12,0); //连接状态
Show_Str(120,80,200,12,"模式:",12,0); //连接状态
Show_Str(30,100,200,12,"发送数据:",12,0); //发送数据
Show_Str(30,115,200,12,"接收数据:",12,0); //接收数据
atk_8266_wificonf_show(30,180,"请设置路由器无线参数
为:",(u8*)wifista_ssid,(u8*)wifista_encryption,(u8*)wifista_password);
POINT_COLOR=BLUE;
Show_Str(120+30,80,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpr
o],12,0); //连接状态
USART3_RX_STA=0; while(1)
{
key=KEY_Scan(0);
if(key==4) //WK_UP 退出测试
{
res=0;
atk_8266_quit_trans(); //退出透传
atk_8266_send_cmd("AT+CIPMODE=0","OK",20);
//关闭透传模式
break;
}
else if(key==1) //KEY0 发送数据
{
if((netpro==3)||(netpro==2)) //UDP
{
sprintf((char*)p,"ATK-8266%s测
试%02d\r\n",ATK_ESP8266_WORKMODE_TBL[netpro],t/10
);//测试数据
Show_Str(30+54,100,200,12,p,12,0);
atk_8266_send_cmd("AT+CIPSEND=25","OK",200);
//发送指定长度的数据
delay_ms(200);
atk_8266_send_data(p,"OK",100); //发送指定长度的数据
timex=100;
}
else if((netpro==1)) //TCP Client
{
atk_8266_quit_trans();
atk_8266_send_cmd("AT+CIPSEND","OK",20);
//开始透传
sprintf((char*)p,"ATK-8266%s测试%d\r\n",ATK_ESP8266_
WORKMODE_TBL[netpro],t/10);//测试数据
Show_Str(30+54,100,200,12,p,12,0);
u3_printf("%s",p);
timex=100;
}
else //TCP Server
{
sprintf((char*)p,"ATK-8266%s测试%02d\r\n",ATK_ESP8266
_WORKMODE_TBL[netpro],t/10);//测试数据
Show_Str(30+54,100,200,12,p,12,0);
atk_8266_send_cmd("AT+CIPSEND=0,25","OK",200); //发送指定长度的数据
delay_ms(200);
atk_8266_send_data(p,"OK",100); //发送指定长度的数据
timex=100;
}
}else;
if(timex)timex--;
if(timex==1)LCD_Fill(30+54,100,239,112,WHITE);
t++;
delay_ms(10);
if(USART3_RX_STA&0X8000) //接收到一次数据了
{
rlen=USART3_RX_STA&0X7FFF;
//得到本次接收到的数据长度
USART3_RX_BUF[rlen]=0; //添加结束符
printf("%s",USART3_RX_BUF); //发送到串口
sprintf((char*)p,"收到%d 字节,内容如下",rlen);//接收到的字节数
LCD_Fill(30+54,115,239,130,WHITE);
POINT_COLOR=BRED;
Show_Str(30+54,115,156,12,p,12,0);
//显示接收到的数据长度
POINT_COLOR=BLUE;
LCD_Fill(30,130,239,319,WHITE);
Show_Str(30,130,180,190,USART3_RX_BUF,12,0);
//显示接收到的数据
USART3_RX_STA=0;
if(constate!=3)t=1000;
//状态为还未连接,立即更新连接状态
else t=0;
//状态为已经连接了,10秒后再检查
}
if(t==1000)//连续10秒钟没有收到任何数据,检查连接是不是还存在.
{
constate=atk_8266_consta_check();//得到连接状态
if(constate=='+')Show_Str(30+30,80,200,12,"连接成功",12,0);
//连接状态
else Show_Str(30+30,80,200,12,"连接失败",12,0);
t=0;
}
if((t%20)==0)LED0=!LED0;
atk_8266_at_response(1);
} myfree(SRAMIN,p); //释放内存
return res;
}
/***********************************************************/
此部分代码比 apsta.c 少了很多,主要少了 AP 模式的配置,其他部分操作与 apsta.c 操作差不多。在此模式下只有 3种子模式(TCP 服务器,TCP 客户端和UDP),该模式下模块需连接到指定 WIFI 热点,代码里面我们是连接到我们的路由器,如需连接到客户自己的WIFI热点只需修改如下代码即可
/***********************************************************/
//WIFI STA 模式,设置要去连接的路由器无线参数,请根据你的路由器设置,自行修改.
const u8* wifista_ssid="ALIENTEK"; //路由器 SSID 号
const u8* wifista_encryption="wpawpa2_aes"; //wpa/wpa2 aes加密方式
const u8* wifista_password="15902020353"; //连接密码
/***********************************************************/
这里的配置,告诉模块,我们要连接的 WIFI 热点,SSID 为:ALIENTEK;加密方式为:WPA/WPA2_AES;密码为:15902020353。这几个红色的参数,得根据您的路由器设置正确才行
【立创商城】ESP8266EX 编带 https://item.szlcsc.com/79101.html |