common.c.bak 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. #include "common.h"
  2. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  3. //本程序只供学习使用,未经作者许可,不得用于其它任何用途
  4. //ALIENTEK STM32开发板
  5. //ATK-ESP8266 WIFI模块 公用驱动代码
  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. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  15. //用户配置区
  16. //连接端口号:8086,可自行修改为其他端口.
  17. const u8* portnum="8086";
  18. //WIFI STA模式,设置要去连接的路由器无线参数,请根据你自己的路由器设置,自行修改.
  19. const u8* wifista_ssid="ALIENTEK"; //路由器SSID号
  20. const u8* wifista_encryption="wpawpa2_aes"; //wpa/wpa2 aes加密方式
  21. const u8* wifista_password="15902020353"; //连接密码
  22. //WIFI AP模式,模块对外的无线参数,可自行修改.
  23. const u8* wifiap_ssid="ATK-ESP8266"; //对外SSID号
  24. const u8* wifiap_encryption="wpawpa2_aes"; //wpa/wpa2 aes加密方式
  25. const u8* wifiap_password="12345678"; //连接密码
  26. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  27. //4个网络模式
  28. const u8 *ATK_ESP8266_CWMODE_TBL[3]={"STA模式 ","AP模式 ","AP&STA模式 "}; //ATK-ESP8266,3种网络模式,默认为路由器(ROUTER)模式
  29. //4种工作模式
  30. const u8 *ATK_ESP8266_WORKMODE_TBL[3]={"TCP服务器","TCP客户端"," UDP 模式"}; //ATK-ESP8266,4种工作模式
  31. //5种加密方式
  32. const u8 *ATK_ESP8266_ECN_TBL[5]={"OPEN","WEP","WPA_PSK","WPA2_PSK","WPA_WAP2_PSK"};
  33. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  34. //usmart支持部分
  35. //将收到的AT指令应答数据返回给电脑串口
  36. //mode:0,不清零USART3_RX_STA;
  37. // 1,清零USART3_RX_STA;
  38. void atk_8266_at_response(u8 mode)
  39. {
  40. if(USART3_RX_STA&0X8000) //接收到一次数据了
  41. {
  42. USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
  43. printf("%s",USART3_RX_BUF); //发送到串口
  44. if(mode)USART3_RX_STA=0;
  45. }
  46. }
  47. //ATK-ESP8266发送命令后,检测接收到的应答
  48. //str:期待的应答结果
  49. //返回值:0,没有得到期待的应答结果
  50. // 其他,期待应答结果的位置(str的位置)
  51. u8* atk_8266_check_cmd(u8 *str)
  52. {
  53. char *strx=0;
  54. if(USART3_RX_STA&0X8000) //接收到一次数据了
  55. {
  56. USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
  57. strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
  58. }
  59. return (u8*)strx;
  60. }
  61. //向ATK-ESP8266发送命令
  62. //cmd:发送的命令字符串
  63. //ack:期待的应答结果,如果为空,则表示不需要等待应答
  64. //waittime:等待时间(单位:10ms)
  65. //返回值:0,发送成功(得到了期待的应答结果)
  66. // 1,发送失败
  67. u8 atk_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
  68. {
  69. u8 res=0;
  70. USART3_RX_STA=0;
  71. u3_printf("%s\r\n",cmd); //发送命令
  72. if(ack&&waittime) //需要等待应答
  73. {
  74. while(--waittime) //等待倒计时
  75. {
  76. delay_ms(10);
  77. if(USART3_RX_STA&0X8000)//接收到期待的应答结果
  78. {
  79. if(atk_8266_check_cmd(ack))
  80. {
  81. printf("ack:%s\r\n",(u8*)ack);
  82. break;//得到有效数据
  83. }
  84. USART3_RX_STA=0;
  85. }
  86. }
  87. if(waittime==0)res=1;
  88. }
  89. return res;
  90. }
  91. //向ATK-ESP8266发送指定数据
  92. //data:发送的数据(不需要添加回车了)
  93. //ack:期待的应答结果,如果为空,则表示不需要等待应答
  94. //waittime:等待时间(单位:10ms)
  95. //返回值:0,发送成功(得到了期待的应答结果)luojian
  96. u8 atk_8266_send_data(u8 *data,u8 *ack,u16 waittime)
  97. {
  98. u8 res=0;
  99. USART3_RX_STA=0;
  100. u3_printf("%s",data); //发送命令
  101. if(ack&&waittime) //需要等待应答
  102. {
  103. while(--waittime) //等待倒计时
  104. {
  105. delay_ms(10);
  106. if(USART3_RX_STA&0X8000)//接收到期待的应答结果
  107. {
  108. if(atk_8266_check_cmd(ack))break;//得到有效数据
  109. USART3_RX_STA=0;
  110. }
  111. }
  112. if(waittime==0)res=1;
  113. }
  114. return res;
  115. }
  116. //ATK-ESP8266退出透传模式
  117. //返回值:0,退出成功;
  118. // 1,退出失败
  119. u8 atk_8266_quit_trans(void)
  120. {
  121. while((USART3->SR&0X40)==0); //等待发送空
  122. USART3->DR='+';
  123. delay_ms(15); //大于串口组帧时间(10ms)
  124. while((USART3->SR&0X40)==0); //等待发送空
  125. USART3->DR='+';
  126. delay_ms(15); //大于串口组帧时间(10ms)
  127. while((USART3->SR&0X40)==0); //等待发送空
  128. USART3->DR='+';
  129. delay_ms(500); //等待500ms
  130. return atk_8266_send_cmd("AT","OK",20);//退出透传判断.
  131. }
  132. //获取ATK-ESP8266模块的AP+STA连接状态
  133. //返回值:0,未连接;1,连接成功
  134. u8 atk_8266_apsta_check(void)
  135. {
  136. if(atk_8266_quit_trans())return 0; //退出透传
  137. atk_8266_send_cmd("AT+CIPSTATUS",":",50); //发送AT+CIPSTATUS指令,查询连接状态
  138. if(atk_8266_check_cmd("+CIPSTATUS:0")&&
  139. atk_8266_check_cmd("+CIPSTATUS:1")&&
  140. atk_8266_check_cmd("+CIPSTATUS:2")&&
  141. atk_8266_check_cmd("+CIPSTATUS:4"))
  142. return 0;
  143. else return 1;
  144. }
  145. //获取ATK-ESP8266模块的连接状态
  146. //返回值:0,未连接;1,连接成功.
  147. u8 atk_8266_consta_check(void)
  148. {
  149. u8 *p;
  150. u8 res;
  151. if(atk_8266_quit_trans())return 0; //退出透传
  152. atk_8266_send_cmd("AT+CIPSTATUS",":",50); //发送AT+CIPSTATUS指令,查询连接状态
  153. p=atk_8266_check_cmd("+CIPSTATUS:");
  154. res=*p; //得到连接状态
  155. return res;
  156. }
  157. //键盘码表
  158. const u8* kbd_tbl[13]={"1","2","3","4","5","6","7","8","9",".","0","#","DEL"};
  159. u8* kbd_fn_tbl[2];
  160. //加载键盘界面(尺寸为240*140)
  161. //x,y:界面起始坐标(320*240分辨率的时候,x必须为0)
  162. void atk_8266_load_keyboard(u16 x,u16 y)
  163. {
  164. u16 i;
  165. POINT_COLOR=RED;
  166. LCD_Fill(x,y,x+240,y+140,WHITE);
  167. LCD_DrawRectangle(x,y,x+240,y+140);
  168. LCD_DrawRectangle(x+80,y,x+160,y+140);
  169. LCD_DrawRectangle(x,y+28,x+240,y+56);
  170. LCD_DrawRectangle(x,y+84,x+240,y+112);
  171. POINT_COLOR=BLUE;
  172. for(i=0;i<15;i++)
  173. {
  174. if(i<13)Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),(u8*)kbd_tbl[i],16,80);
  175. else Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),kbd_fn_tbl[i-13],16,80);
  176. }
  177. }
  178. //按键状态设置
  179. //x,y:键盘坐标
  180. //key:键值(0~8)
  181. //sta:状态,0,松开;1,按下;
  182. void atk_8266_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
  183. {
  184. u16 i=keyx/3,j=keyx%3;
  185. if(keyx>15)return;
  186. if(sta)LCD_Fill(x+j*80+1,y+i*28+1,x+j*80+78,y+i*28+26,GREEN);
  187. else LCD_Fill(x+j*80+1,y+i*28+1,x+j*80+78,y+i*28+26,WHITE);
  188. if(j&&(i>3))Show_Str_Mid(x+j*80,y+6+28*i,(u8*)kbd_fn_tbl[keyx-13],16,80);
  189. else Show_Str_Mid(x+j*80,y+6+28*i,(u8*)kbd_tbl[keyx],16,80);
  190. }
  191. //获取Client ip地址
  192. //ipbuf:ip地址输出缓存区
  193. void atk_8266_get_wanip(u8* ipbuf)
  194. {
  195. u8 *p,*p1;
  196. if(atk_8266_send_cmd("AT+CIFSR","OK",50))//获取WAN IP地址失败
  197. {
  198. ipbuf[0]=0;
  199. return;
  200. }
  201. p=atk_8266_check_cmd("\"");
  202. p1=(u8*)strstr((const char*)(p+1),"\"");
  203. *p1=0;
  204. sprintf((char*)ipbuf,"%s",p+1);
  205. }
  206. //获取AP+STA ip地址并在指定位置显示
  207. //ipbuf:ip地址输出缓存区
  208. void atk_8266_get_ip(u8 x,u8 y)
  209. {
  210. u8 *p;
  211. u8 *p1;
  212. u8 *p2;
  213. u8 *ipbuf;
  214. u8 *buf;
  215. if(atk_8266_send_cmd("AT+CIFSR","OK",50))//获取WAN IP地址失败
  216. {
  217. *ipbuf=0;
  218. }
  219. else
  220. {
  221. p=atk_8266_check_cmd("APIP,\"");
  222. p1=(u8*)strstr((const char*)(p+6),"\"");
  223. p2=p1;
  224. *p1=0;
  225. ipbuf=p+6;
  226. sprintf((char*)buf,"AP IP:%s 端口:%s",ipbuf,(u8*)portnum);
  227. Show_Str(x,y,200,12,buf,12,0); //显示AP模式的IP地址和端口
  228. p=(u8*)strstr((const char*)(p2+1),"STAIP,\"");
  229. p1=(u8*)strstr((const char*)(p+7),"\"");
  230. *p1=0;
  231. ipbuf=p+7;
  232. sprintf((char*)buf,"STA IP:%s 端口:%s",ipbuf,(u8*)portnum);
  233. Show_Str(x,y+15,200,12,buf,12,0); //显示STA模式的IP地址和端口
  234. }
  235. }
  236. //ATK-ESP8266模块信息显示
  237. //x,y:显示信息的起始坐标.
  238. //wanip:0,全部更新显示;1,仅更新wanip.
  239. void atk_8266_msg_show(u16 x,u16 y,u8 wanip)
  240. {
  241. u8 *p,*p1,*p2;
  242. atk_8266_send_cmd("AT+CWMODE=2","OK",20);
  243. atk_8266_send_cmd("AT+RST","OK",20);
  244. delay_ms(1000);//延时2s等待模块重启
  245. delay_ms(1000);//
  246. delay_ms(1000);
  247. delay_ms(1000);
  248. sprintf((char*)p,"AT+CWSAP=\"%s\",\"%s\",1,4",wifiap_ssid,wifiap_password); //配置模块AP模式无线参数
  249. atk_8266_send_cmd(p,"OK",1000);
  250. if(wanip==0)//全更新
  251. {
  252. atk_8266_send_cmd("AT+GMR","OK",20); //获取固件版本号
  253. p=atk_8266_check_cmd("SDK version:");
  254. p1=(u8*)strstr((const char*)(p+12),"(");
  255. *p1=0;
  256. Show_Str(x,y,240,16,"固件版本:",16,0);
  257. Show_Str(x+72,y,240,16,p+12,16,0);
  258. atk_8266_send_cmd("AT+CWMODE?","+CWMODE:",20); //获取网络模式
  259. p=atk_8266_check_cmd(":");
  260. Show_Str(x,y+16,240,16,"网络模式:",16,0);
  261. Show_Str(x+72,y+16,240,16,(u8*)ATK_ESP8266_CWMODE_TBL[*(p+1)-'1'],16,0);
  262. atk_8266_send_cmd("AT+CWSAP?","+CWSAP:",20); //获取wifi配置
  263. p=atk_8266_check_cmd("\"");
  264. p1=(u8*)strstr((const char*)(p+1),"\"");
  265. p2=p1;
  266. *p1=0;
  267. Show_Str(x,y+32,240,16,"SSID号:",16,0);Show_Str(x+56,y+32,240,16,p+1,16,0);
  268. p=(u8*)strstr((const char*)(p2+1),"\"");
  269. p1=(u8*)strstr((const char*)(p+1),"\"");
  270. p2=p1;
  271. *p1=0;
  272. Show_Str(x,y+48,240,16,"密码:",16,0);Show_Str(x+40,y+48,240,16,p+1,16,0);
  273. p=(u8*)strstr((const char*)(p2+1),",");
  274. p1=(u8*)strstr((const char*)(p+1),",");
  275. *p1=0;
  276. Show_Str(x,y+64,240,16,"通道号:",16,0);Show_Str(x+56,y+64,240,16,p+1,16,0);
  277. Show_Str(x,y+80,240,16,"加密方式:",16,0);Show_Str(x+72,y+80,240,16,(u8*)ATK_ESP8266_ECN_TBL[*(p1+1)-'0'],16,0);
  278. }
  279. }
  280. //ATK-ESP8266模块WIFI配置参数显示(仅WIFI STA/WIFI AP模式测试时使用)
  281. //x,y:显示信息的起始坐标.
  282. //rmd:提示信息
  283. //ssid,encryption,password:无线网络的SSID,加密方式,密码
  284. void atk_8266_wificonf_show(u16 x,u16 y,u8* rmd,u8* ssid,u8* encryption,u8* password)
  285. {
  286. Show_Str(x,y,240,12,rmd,12,0);//显示提示信息
  287. Show_Str(x,y+20,240,12,"SSID:",12,0);
  288. Show_Str(x,y+36,240,12,"加密方式:",12,0);
  289. Show_Str(x,y+52,240,12,"密码:",12,0);
  290. Show_Str(x+30,y+20,240,12,ssid,12,0);
  291. Show_Str(x+54,y+36,240,12,encryption,12,0);
  292. Show_Str(x+30,y+52,240,12,password,12,0);
  293. }
  294. //工作模式选择
  295. //返回值:
  296. //0,TCP服务器
  297. //1,TCP客户端
  298. //2,UDP模式
  299. u8 atk_8266_netpro_sel(u16 x,u16 y,u8* name)
  300. {
  301. u8 key=0,t=0,*p;
  302. u8 netpro=0;
  303. p=mymalloc(SRAMIN,50);//申请50个字节的内存
  304. sprintf((char*)p,"%s 工作模式选择",name);
  305. Show_Str_Mid(0,y,p,16,240);
  306. Show_Str(x,y+30,200,16,"KEY0:下一个",16,0);
  307. Show_Str(x,y+50,200,16,"KEY1:上一个",16,0);
  308. Show_Str(x,y+70,200,16,"WK_UP:确定",16,0);
  309. Show_Str(x,y+100,200,16,"请选择:",16,0);
  310. POINT_COLOR=BLUE;
  311. Show_Str(x+16,y+120,200,16,"TCP服务器",16,0);
  312. Show_Str(x+16,y+140,200,16,"TCP客户端",16,0);
  313. Show_Str(x+16,y+160,200,16,"UDP模式",16,0);
  314. POINT_COLOR=RED;
  315. Show_Str(x,y+120,200,16,"→",16,0);
  316. while(1)
  317. {
  318. key=KEY_Scan(0);
  319. if(key)
  320. {
  321. if(key==WKUP_PRES)break; //WK_UP按下
  322. Show_Str(x,y+120+netpro*20,200,16," ",16,0);//清空之前的显示
  323. if(key==KEY0_PRES)//KEY0按下
  324. {
  325. if(netpro<2)netpro++;
  326. else netpro=0;
  327. }else if(key==KEY1_PRES)//KEY1按下
  328. {
  329. if(netpro>0)netpro--;
  330. else netpro=2;
  331. }
  332. Show_Str(x,y+120+netpro*20,200,16,"→",16,0);//指向新条目
  333. }
  334. delay_ms(10);
  335. atk_8266_at_response(1);
  336. }
  337. return netpro;//返回网络模式选择值
  338. }
  339. //STA模式下的AP的TCP、UDP工作模式配置
  340. u8 atk_8266_mode_cofig(u8 netpro)
  341. {
  342. //u8 netpro;
  343. u8 ipbuf[16]; //IP缓存
  344. u8 *p;
  345. u8 key;
  346. PRESTA:
  347. netpro|=(atk_8266_netpro_sel(50,30,(u8*)ATK_ESP8266_CWMODE_TBL[1]))<<4; //网络模式选择
  348. if(netpro&0X20)
  349. {
  350. if(atk_8266_ip_set("WIFI-AP远端UDP IP设置","UDP模式",(u8*)portnum,ipbuf))goto PRESTA; //IP输入
  351. if(netpro&0X03)sprintf((char*)p,"AT+CIPSTART=1,\"UDP\",\"%s\",%s",ipbuf,(u8*)portnum); //配置目标UDP服务器,及ID号,STA模式下为0
  352. else sprintf((char*)p,"AT+CIPSTART=0,\"UDP\",\"%s\",%s",ipbuf,(u8*)portnum); //配置目标UDP服务器,及ID号,STA模式下为0
  353. delay_ms(200);
  354. atk_8266_send_cmd(p,"OK",200);
  355. }
  356. else if(netpro&0X10) //AP TCP Client 透传模式测试
  357. {
  358. Show_Str_Mid(0,30,"ATK-ESP WIFI-STA 测试",16,240);
  359. Show_Str(30,50,200,16,"正在配置ATK-ESP模块,请稍等...",12,0);
  360. if(atk_8266_ip_set("WIFI-AP 远端IP设置","TCP Client",(u8*)portnum,ipbuf))goto PRESTA; //IP输入
  361. if(netpro&0X03)sprintf((char*)p,"AT+CIPSTART=1,\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum); //配置目标TCP服务器,及ID号,STA模式为client时,为1
  362. else sprintf((char*)p,"AT+CIPSTART=0,\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum); //配置目标TCP服务器,及ID号,STA模式为server时,为0
  363. while(atk_8266_send_cmd(p,"OK",200))
  364. {
  365. Show_Str_Mid(0,40,"WK_UP:返回重选",16,240);
  366. Show_Str(30,80,200,12,"ATK-ESP 连接TCP SERVER失败",12,0); //连接失败
  367. key=KEY_Scan(0);
  368. if(key==WKUP_PRES)goto PRESTA;
  369. }
  370. }
  371. else; //服务器模式不用配置
  372. return netpro;
  373. }
  374. //IP设置
  375. //title:ip设置标题
  376. //mode:工作模式
  377. //port:端口号
  378. //*ip:ip缓存区(返回IP给上层函数)
  379. //返回值:0,确认连接;1,取消连接.
  380. u8 atk_8266_ip_set(u8* title,u8* mode,u8* port,u8* ip)
  381. {
  382. u8 res=0;
  383. u8 key;
  384. u8 timex=0;
  385. u8 iplen=0; //IP长度
  386. Show_Str_Mid(0,30,title,16,240); //显示标题
  387. Show_Str(30,90,200,16,"工作模式:",16,0); //工作模式显示
  388. Show_Str(30,110,200,16,"IP地址:",16,0); //IP地址可以键盘设置
  389. Show_Str(30,130,200,16,"端口:",16,0); //端口号
  390. kbd_fn_tbl[0]="连接";
  391. kbd_fn_tbl[1]="返回";
  392. atk_8266_load_keyboard(0,180); //显示键盘
  393. Show_Str(30+72,90,200,16,mode,16,0); //显示工作模式
  394. Show_Str(30+40,130,200,16,port,16,0); //显示端口
  395. ip[0]=0;
  396. while(1)
  397. {
  398. key=atk_8266_get_keynum(0,180);
  399. if(key)
  400. {
  401. if(key<12)
  402. {
  403. if(iplen<15)
  404. {
  405. ip[iplen++]=kbd_tbl[key-1][0];
  406. }
  407. }else
  408. {
  409. if(key==13)if(iplen)iplen--; //删除
  410. if(key==14&&iplen)break; //确认连接
  411. if(key==15){res=1;break;} //取消连接
  412. }
  413. ip[iplen]=0;
  414. LCD_Fill(30+56,110,239,110+16,WHITE);
  415. Show_Str(30+56,110,200,16,ip,16,0); //显示IP地址
  416. }
  417. timex++;
  418. if(timex==20)
  419. {
  420. timex=0;
  421. LED0=!LED0;
  422. }
  423. delay_ms(10);
  424. atk_8266_at_response(1);//WIFI模块发过来的数据,及时上传给电脑
  425. }
  426. return res;
  427. }
  428. //测试界面主UI
  429. void atk_8266_mtest_ui(u16 x,u16 y)
  430. {
  431. Show_Str_Mid(0,y,"ATK_ESP8266 WIFI模块测试",16,240);
  432. Show_Str(x,y+25,200,16,"请选择:",16,0);
  433. Show_Str(x,y+45,200,16,"KEY0:WIFI STA+AP",16,0);
  434. Show_Str(x,y+65,200,16,"KEY1:WIFI STA",16,0);
  435. Show_Str(x,y+85,200,16,"WK_UP:WIFI AP",16,0);
  436. atk_8266_msg_show(x,y+125,0);
  437. }
  438. //ATK-ESP8266模块测试主函数
  439. void atk_8266_test(void)
  440. {
  441. // u16 rlen=0;
  442. u8 key;
  443. u8 timex;
  444. Show_Str_Mid(0,30,"ATK-ESP8266 WIFI模块测试",16,240);
  445. while(atk_8266_send_cmd("AT","OK",20))//检查WIFI模块是否在线
  446. {
  447. atk_8266_quit_trans();//退出透传
  448. atk_8266_send_cmd("AT+CIPMODE=0","OK",200); //关闭透传模式
  449. Show_Str(40,55,200,16,"未检测到模块!!!",16,0);
  450. delay_ms(800);
  451. Show_Str(40,55,200,16,"尝试连接模块...",16,0);
  452. }
  453. while(atk_8266_send_cmd("ATE0","OK",20));//关闭回显
  454. atk_8266_mtest_ui(32,30);
  455. while(1)
  456. {
  457. delay_ms(10);
  458. atk_8266_at_response(1);//检查ATK-ESP8266模块发送过来的数据,及时上传给电脑
  459. key=KEY_Scan(0);
  460. if(key)
  461. {
  462. LCD_Clear(WHITE);
  463. POINT_COLOR=RED;
  464. switch(key)
  465. {
  466. case 1://KEY0
  467. Show_Str_Mid(0,30,"ATK-ESP WIFI-AP+STA 测试",16,240);
  468. Show_Str_Mid(0,50,"正在配置ATK-ESP8266模块,请稍等...",12,240);
  469. atk_8266_apsta_test(); //串口以太网测试
  470. break;
  471. case 2://KEY1
  472. Show_Str_Mid(0,30,"ATK-ESP WIFI-STA 测试",16,240);
  473. Show_Str_Mid(0,50,"正在配置ATK-ESP8266模块,请稍等...",12,240);
  474. atk_8266_wifista_test();//WIFI STA测试
  475. break;
  476. case 4://WK_UP
  477. atk_8266_wifiap_test(); //WIFI AP测试
  478. break;
  479. }
  480. atk_8266_mtest_ui(32,30);
  481. timex=0;
  482. }
  483. if((timex%20)==0)LED0=!LED0;//200ms闪烁
  484. timex++;
  485. }
  486. }