apsta.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #include "common.h"
  2. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  3. //本程序只供学习使用,未经作者许可,不得用于其它任何用途
  4. //ALIENTEK STM32开发板
  5. //ATK-ESP8266 AP+STA模式驱动代码
  6. //正点原子@ALIENTEK
  7. //技术论坛:www.openedv.com
  8. //修改日期:2014/4/3
  9. //版本:V1.0
  10. //版权所有,盗版必究。
  11. //Copyright(C) 广州市星翼电子科技有限公司 2009-2019
  12. //All rights reserved
  13. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  14. //ATK-ESP8266 AP+STA模式测试
  15. //用于测试TCP/UDP连接
  16. //返回值:0,正常
  17. // 其他,错误代码
  18. u8 atk_8266_apsta_test(void)
  19. {
  20. u8 netpro;
  21. u8 key=0;
  22. u8 timex=0;
  23. u8 ipbuf[16]; //IP缓存
  24. u8 *p;
  25. u16 t=999; //加速第一次获取链接状态
  26. u8 res=0;
  27. u16 rlen=0;
  28. u8 constate=0; //连接状态
  29. atk_8266_send_cmd("AT+CWMODE=3","OK",50); //设置WIFI AP+STA模式
  30. //设置模块AP模式的WIFI网络名称/加密方式/密码,这几个参数看自己喜好设置
  31. sprintf((char*)p,"AT+CWSAP=\"%s\",\"%s\",1,4",wifiap_ssid,wifiap_password);//设置无线参数:ssid,密码
  32. atk_8266_send_cmd(p,"OK",1000); //设置AP模式参数
  33. //设置连接到的WIFI网络名称/加密方式/密码,这几个参数需要根据您自己的路由器设置进行修改!!
  34. sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);//设置无线参数:ssid,密码
  35. atk_8266_send_cmd(p,"WIFI GOT IP",1000); //连接目标路由器,并获得IP
  36. while(atk_8266_send_cmd("AT+CIFSR","STAIP",20)); //检测是否获得STA IP
  37. while(atk_8266_send_cmd("AT+CIFSR","APIP",20)); //检测是否获得AP IP
  38. // while((atk_8266_consta_check()-'2')); //获得IP
  39. Show_Str(30,30,200,16,"ATK-ESP AP+STA模式测试",16,0);
  40. atk_8266_send_cmd("AT+CIPMUX=1","OK",50); //0:单连接,1:多连接
  41. delay_ms(500);
  42. sprintf((char*)p,"AT+CIPSERVER=1,%s",(u8*)portnum);
  43. atk_8266_send_cmd(p,"OK",50); //开启Server模式,端口号为8086
  44. delay_ms(500);
  45. atk_8266_send_cmd("AT+CIPSTO=1200","OK",50); //设置服务器超时时间
  46. PRESTA:
  47. netpro=atk_8266_netpro_sel(50,30,(u8*)ATK_ESP8266_CWMODE_TBL[0]); //AP+STA模式网络模式选择
  48. if(netpro&0X02) //STA UDP
  49. {
  50. Show_Str_Mid(0,30,"ATK-ESP WIFI-STA测试",16,240);
  51. Show_Str(30,50,200,16,"正在配置ATK-ESP模块,请稍等...",12,0);
  52. if(atk_8266_ip_set("WIFI-STA远端UDP IP设置","UDP模式",(u8*)portnum,ipbuf))goto PRESTA; //IP输入
  53. sprintf((char*)p,"AT+CIPSTART=0,\"UDP\",\"%s\",%s",ipbuf,(u8*)portnum); //配置目标UDP服务器,及ID号,STA模式下为0
  54. Show_Str_Mid(0,30,"ATK-ESP WIFI-STA测试",16,240);
  55. Show_Str(30,50,200,16,"正在配置ATK-ESP模块,请稍等...",12,0);
  56. atk_8266_send_cmd(p,"OK",200);
  57. netpro=atk_8266_mode_cofig(netpro); //AP模式网络模式配置
  58. }
  59. else //TCP
  60. {
  61. if(netpro&0X01) //STA TCP Client
  62. {
  63. Show_Str_Mid(0,30,"ATK-ESP WIFI-STA 测试",16,240);
  64. Show_Str(30,50,200,16,"正在配置ATK-ESP模块,请稍等...",12,0);
  65. if(atk_8266_ip_set("WIFI-STA 远端IP设置",(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA; //IP输入
  66. sprintf((char*)p,"AT+CIPSTART=0,\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum); //配置目标TCP服务器,及ID号,STA模式下为0
  67. while(atk_8266_send_cmd(p,"OK",200))
  68. {
  69. Show_Str_Mid(0,40,"WK_UP:返回重选",16,240);
  70. Show_Str(30,80,200,12,"ATK-ESP 连接UDP失败",12,0); //连接失败
  71. key=KEY_Scan(0);
  72. if(key==WKUP_PRES)goto PRESTA;
  73. }
  74. netpro=atk_8266_mode_cofig(netpro); //AP模式网络模式配置
  75. }
  76. else netpro=atk_8266_mode_cofig(netpro); //TCP SERVER不用配置
  77. }
  78. Show_Str_Mid(0,30,"ATK-ESP WIFI-STA+AP 测试",16,240);
  79. Show_Str(15,50,200,16,"正在配置ATK-ESP模块,请稍等...",12,0);
  80. Show_Str_Mid(0,50,"WK_UP:退出 KEY0:ID0发送 KEY1:ID1发送",12,240);
  81. atk_8266_get_ip(15,65);//STA+AP模式,获取 IP,并显示
  82. Show_Str(15,95,200,12,"连接状态:",12,0); //连接状态
  83. Show_Str(15,110,200,12,"STA模式:",12,0); //STA连接状态
  84. Show_Str(120+15,110,200,12,"AP模式:",12,0); //AP连接状态
  85. Show_Str(15,125,200,12,"发送数据:",12,0); //发送数据
  86. Show_Str(15,140,200,12,"接收数据:",12,0); //接收数据
  87. atk_8266_wificonf_show(15,195,"请设置路由器无线参数为:",(u8*)wifista_ssid,(u8*)wifista_encryption,(u8*)wifista_password);
  88. Show_Str(48+15,110,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpro&0X03],12,0); //STA连接状态
  89. Show_Str(162+15,110,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpro>>4],12,0); //AP连接状态
  90. USART3_RX_STA=0;
  91. while(1)
  92. {
  93. key=KEY_Scan(0);
  94. if(key==WKUP_PRES) //WK_UP 退出测试
  95. {
  96. res=0;
  97. break;
  98. }
  99. else if(key==KEY0_PRES) //KEY0 向ID0发送数据
  100. {
  101. sprintf((char*)p,"ATK-8266模块ID0发数据%02d\r\n",t/10);//测试数据
  102. Show_Str(15+54,125,200,12,p,12,0);
  103. atk_8266_send_cmd("AT+CIPSEND=0,25","OK",200); //发送指定长度的数据
  104. delay_ms(200);
  105. atk_8266_send_data(p,"OK",100); //发送指定长度的数据
  106. timex=100;
  107. }
  108. else if(key==KEY1_PRES) //KEY1 向ID1发送数据
  109. {
  110. sprintf((char*)p,"ATK-8266模块ID1发数据%02d\r\n",t/10);//测试数据
  111. Show_Str(15+54,125,200,12,p,12,0);
  112. atk_8266_send_cmd("AT+CIPSEND=1,25","OK",200); //发送指定长度的数据
  113. delay_ms(200);
  114. atk_8266_send_data(p,"OK",100); //发送指定长度的数据
  115. timex=100;
  116. }
  117. if(timex)timex--;
  118. if(timex==1)LCD_Fill(30+54,125,239,122,WHITE);
  119. t++;
  120. delay_ms(10);
  121. if(USART3_RX_STA&0X8000) //接收到一次数据了
  122. {
  123. rlen=USART3_RX_STA&0X7FFF; //得到本次接收到的数据长度
  124. USART3_RX_BUF[rlen]=0; //添加结束符
  125. printf("%s",USART3_RX_BUF); //发送到串口
  126. sprintf((char*)p,"收到%d字节,内容如下",rlen);//接收到的字节数
  127. Show_Str(15+54,140,156,12,p,12,0); //显示接收到的数据长度
  128. Show_Str(15,155,180,190,USART3_RX_BUF,12,0);//显示接收到的数据
  129. USART3_RX_STA=0;
  130. if(constate!='+')t=1000; //状态为还未连接,立即更新连接状态
  131. else t=0; //状态为已经连接了,10秒后再检查
  132. }
  133. if(t==1000)//连续10秒钟没有收到任何数据,检查连接是不是还存在.
  134. {
  135. constate=atk_8266_consta_check();//得到连接状态
  136. if(constate=='+')Show_Str(15+54,95,200,12,"连接成功",12,0); //连接状态
  137. else Show_Str(15+54,95,200,12,"连接失败",12,0);
  138. t=0;
  139. }
  140. atk_8266_at_response(1);
  141. }
  142. return res;
  143. }