找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12526|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

分享一波ESP8266純透傳模式源碼(無顯示屏)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:207685 發(fā)表于 2017-8-21 16:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
源碼分享,適用于正點原子MINI板和正點原子esp8266,無顯示屏,直接接收
(庫函數(shù)版本,適合MiniSTM32開發(fā)板)擴(kuò)展實驗13 ATK-ESP8266WIFI模塊實驗

所有資料51hei提供下載:
ESP8266純透傳模式(無顯示屏).rar (1013.21 KB, 下載次數(shù): 250)


單片機(jī)源程序如下:
  1. #include "common.h"
  2. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  3. //本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
  4. //ALIENTEK STM32開發(fā)板
  5. //ATK-ESP8266 AP+STA模式驅(qū)動代碼           
  6. ///////////////////////////////////////////////////////////////////////////////////////////////////////////


  7. //ATK-ESP8266 AP+STA模式測試
  8. //用于測試TCP/UDP連接
  9. //返回值:0,正常
  10. //    其他,錯誤代碼
  11. u8 atk_8266_apsta_test(void)
  12. {
  13.         u8 netpro;
  14.         u8 key=0;
  15.         u8 timex=0;
  16.         u8 ipbuf[16];         //IP緩存
  17.         u8 *p;
  18.         u16 t=999;                //加速第一次獲取鏈接狀態(tài)
  19.         u8 res=0;
  20.         u16 rlen=0;
  21.         u8 constate=0;        //連接狀態(tài)
  22.         p=mymalloc(32);                                                        //申請32字節(jié)內(nèi)存
  23.         atk_8266_send_cmd("AT+CWMODE=3","OK",50);                //設(shè)置WIFI AP+STA模式
  24. //        atk_8266_send_cmd("AT+RST","OK",20);                //重啟模塊
  25. //        delay_ms(1000);         //延時2S等待重啟成功
  26. //        delay_ms(1000);
  27. //        delay_ms(1000);
  28.         //設(shè)置模塊AP模式的WIFI網(wǎng)絡(luò)名稱/加密方式/密碼,這幾個參數(shù)看自己喜好設(shè)置
  29.         sprintf((char*)p,"AT+CWSAP=\"%s\",\"%s\",1,4",wifiap_ssid,wifiap_password);//設(shè)置無線參數(shù):ssid,密碼
  30.         atk_8266_send_cmd(p,"OK",1000);                                        //設(shè)置AP模式參數(shù)
  31.         //設(shè)置連接到的WIFI網(wǎng)絡(luò)名稱/加密方式/密碼,這幾個參數(shù)需要根據(jù)您自己的路由器設(shè)置進(jìn)行修改!!
  32.         sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);//設(shè)置無線參數(shù):ssid,密碼
  33.         atk_8266_send_cmd(p,"WIFI GOT IP",1000);                                                //連接目標(biāo)路由器,并獲得IP
  34.         while(atk_8266_send_cmd("AT+CIFSR","STAIP",20));   //檢測是否獲得STA IP
  35.         while(atk_8266_send_cmd("AT+CIFSR","APIP",20));   //檢測是否獲得AP IP
  36. //        while((atk_8266_consta_check()-'2'));   //獲得IP
  37.         LCD_Clear(WHITE);
  38.         POINT_COLOR=RED;
  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);     //設(shè)置服務(wù)器超時時間
  46.         
  47. PRESTA:
  48.         netpro=atk_8266_netpro_sel(50,30,(u8*)ATK_ESP8266_CWMODE_TBL[0]);        //AP+STA模式網(wǎng)絡(luò)模式選擇
  49.         if(netpro&0X02)   //STA UDP
  50.         {
  51.                                 LCD_Clear(WHITE);
  52.                                 POINT_COLOR=RED;
  53.                                 Show_Str_Mid(0,30,"ATK-ESP WIFI-STA測試",16,240);
  54.                                 Show_Str(30,50,200,16,"正在配置ATK-ESP模塊,請稍等...",12,0);
  55.                                 if(atk_8266_ip_set("WIFI-STA遠(yuǎn)端UDP IP設(shè)置","UDP模式",(u8*)portnum,ipbuf))goto PRESTA;        //IP輸入
  56.                                 sprintf((char*)p,"AT+CIPSTART=0,\"UDP\",\"%s\",%s",ipbuf,(u8*)portnum);    //配置目標(biāo)UDP服務(wù)器,及ID號,STA模式下為0
  57.                                 LCD_Clear(WHITE);
  58.                                 Show_Str_Mid(0,30,"ATK-ESP WIFI-STA測試",16,240);
  59.                                 Show_Str(30,50,200,16,"正在配置ATK-ESP模塊,請稍等...",12,0);
  60.                                 atk_8266_send_cmd(p,"OK",200);
  61.                                 netpro=atk_8266_mode_cofig(netpro);     //AP模式網(wǎng)絡(luò)模式配置                        
  62.         }
  63.         else     //TCP
  64.         {
  65.                 if(netpro&0X01)     //STA TCP Client  
  66.                 {
  67.                         LCD_Clear(WHITE);
  68.                         POINT_COLOR=RED;
  69.                         Show_Str_Mid(0,30,"ATK-ESP WIFI-STA 測試",16,240);
  70.                         Show_Str(30,50,200,16,"正在配置ATK-ESP模塊,請稍等...",12,0);
  71.                         if(atk_8266_ip_set("WIFI-STA 遠(yuǎn)端IP設(shè)置",(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA;        //IP輸入
  72.                         sprintf((char*)p,"AT+CIPSTART=0,\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum);    //配置目標(biāo)TCP服務(wù)器,及ID號,STA模式下為0
  73.                         while(atk_8266_send_cmd(p,"OK",200))
  74.                         {
  75.                                 LCD_Clear(WHITE);
  76.                                 POINT_COLOR=RED;
  77.                                 Show_Str_Mid(0,40,"WK_UP:返回重選",16,240);
  78.                                 Show_Str(30,80,200,12,"ATK-ESP 連接UDP失敗",12,0); //連接失敗         
  79.                                 key=KEY_Scan(0);
  80.                                 if(key==WKUP_PRES)goto PRESTA;
  81.                         }        
  82.                         netpro=atk_8266_mode_cofig(netpro);     //AP模式網(wǎng)絡(luò)模式配置        
  83.                 }
  84.                 else netpro=atk_8266_mode_cofig(netpro);     //TCP SERVER不用配置
  85.         }
  86.         
  87.         
  88.         
  89.         LCD_Clear(WHITE);
  90.         POINT_COLOR=RED;
  91.         Show_Str_Mid(0,30,"ATK-ESP WIFI-STA+AP 測試",16,240);
  92.         Show_Str(15,50,200,16,"正在配置ATK-ESP模塊,請稍等...",12,0);                        
  93.         LCD_Fill(15,50,239,50+12,WHITE);                        //清除之前的顯示
  94.         Show_Str_Mid(0,50,"WK_UP:退出 KEY0:ID0發(fā)送 KEY1:ID1發(fā)送",12,240);
  95.         LCD_Fill(15,80,239,80+12,WHITE);
  96.         atk_8266_get_ip(15,65);//STA+AP模式,獲取 IP,并顯示        
  97.         
  98.         
  99.         Show_Str(15,95,200,12,"連接狀態(tài):",12,0);                 //連接狀態(tài)
  100.         Show_Str(15,110,200,12,"STA模式:",12,0);                 //STA連接狀態(tài)
  101.         Show_Str(120+15,110,200,12,"AP模式:",12,0);                 //AP連接狀態(tài)
  102.         Show_Str(15,125,200,12,"發(fā)送數(shù)據(jù):",12,0);         //發(fā)送數(shù)據(jù)
  103.         Show_Str(15,140,200,12,"接收數(shù)據(jù):",12,0);        //接收數(shù)據(jù)
  104.         atk_8266_wificonf_show(15,195,"請設(shè)置路由器無線參數(shù)為:",(u8*)wifista_ssid,(u8*)wifista_encryption,(u8*)wifista_password);
  105.         POINT_COLOR=BLUE;               
  106.         Show_Str(48+15,110,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpro&0X03],12,0);                 //STA連接狀態(tài)
  107.         Show_Str(162+15,110,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpro>>4],12,0);                 //AP連接狀態(tài)
  108.         USART2_RX_STA=0;
  109.         while(1)
  110.         {
  111.                 key=KEY_Scan(0);
  112.                 if(key==WKUP_PRES)                        //WK_UP 退出測試                 
  113.                 {
  114.                         res=0;        
  115.                         break;                                                                                                
  116.                 }
  117.                 else if(key==KEY0_PRES)        //KEY0 向ID0發(fā)送數(shù)據(jù)
  118.                 {
  119.                           sprintf((char*)p,"ATK-8266模塊ID0發(fā)數(shù)據(jù)%02d\r\n",t/10);//測試數(shù)據(jù)
  120.                                 Show_Str(15+54,125,200,12,p,12,0);
  121.                                 atk_8266_send_cmd("AT+CIPSEND=0,25","OK",200);  //發(fā)送指定長度的數(shù)據(jù)
  122.                                 delay_ms(200);
  123.                                 atk_8266_send_data(p,"OK",100);  //發(fā)送指定長度的數(shù)據(jù)
  124.                                 timex=100;
  125.                 }
  126.                 else if(key==KEY1_PRES)        //KEY1 向ID1發(fā)送數(shù)據(jù)
  127.                 {
  128.                           sprintf((char*)p,"ATK-8266模塊ID1發(fā)數(shù)據(jù)%02d\r\n",t/10);//測試數(shù)據(jù)
  129.                                 Show_Str(15+54,125,200,12,p,12,0);
  130.                                 atk_8266_send_cmd("AT+CIPSEND=1,25","OK",200);  //發(fā)送指定長度的數(shù)據(jù)
  131.                                 delay_ms(200);
  132.                                 atk_8266_send_data(p,"OK",100);  //發(fā)送指定長度的數(shù)據(jù)
  133.                                 timex=100;
  134.                 }
  135.                         
  136.          if(timex)timex--;
  137.           if(timex==1)LCD_Fill(30+54,125,239,122,WHITE);
  138.          t++;
  139.          delay_ms(10);
  140.          if(USART2_RX_STA&0X8000)                //接收到一次數(shù)據(jù)了
  141.         {
  142.                 rlen=USART2_RX_STA&0X7FFF;        //得到本次接收到的數(shù)據(jù)長度
  143.                 USART2_RX_BUF[rlen]=0;                //添加結(jié)束符
  144.                 printf("%s",USART2_RX_BUF);        //發(fā)送到串口   
  145.                 sprintf((char*)p,"收到%d字節(jié),內(nèi)容如下",rlen);//接收到的字節(jié)數(shù)
  146.                 LCD_Fill(15+54,140,239,130,WHITE);
  147.                 POINT_COLOR=BRED;
  148.                 Show_Str(15+54,140,156,12,p,12,0);                         //顯示接收到的數(shù)據(jù)長度
  149.                 POINT_COLOR=BLUE;
  150.                 LCD_Fill(15,155,239,319,WHITE);
  151.                 Show_Str(15,155,180,190,USART2_RX_BUF,12,0);//顯示接收到的數(shù)據(jù)  
  152.                 USART2_RX_STA=0;
  153.                 if(constate!='+')t=1000;                //狀態(tài)為還未連接,立即更新連接狀態(tài)
  154.                 else t=0;                   //狀態(tài)為已經(jīng)連接了,10秒后再檢查
  155.         }  
  156.         if(t==1000)//連續(xù)10秒鐘沒有收到任何數(shù)據(jù),檢查連接是不是還存在.
  157.         {
  158.                 LCD_Fill(15+54,125,239,138,WHITE);
  159. //                LCD_Fill(15+54,95,120,110,WHITE);
  160.                 constate=atk_8266_consta_check();//得到連接狀態(tài)
  161.                 if(constate=='+')Show_Str(15+54,95,200,12,"連接成功",12,0);  //連接狀態(tài)
  162.                 else Show_Str(15+54,95,200,12,"連接失敗",12,0);         
  163.                 t=0;
  164.         }
  165.         if((t%20)==0)LED0=!LED0;
  166.         atk_8266_at_response(1);
  167. }
  168.         myfree(p);                //釋放內(nèi)存
  169.         return res;               
  170. }

復(fù)制代碼




評分

參與人數(shù) 1黑幣 +5 收起 理由
lch62221 + 5

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:230913 發(fā)表于 2017-9-4 16:22 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報

板凳
ID:232690 發(fā)表于 2017-9-12 17:10 | 只看該作者
好啊紅啊紅啊
回復(fù)

使用道具 舉報

地板
ID:254733 發(fā)表于 2017-11-28 16:04 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報

5#
ID:254733 發(fā)表于 2017-11-28 17:47 | 只看該作者
程序改的一般我試了沒啥反映,我也改過只剩ap模式帶顯示,可以持續(xù)發(fā)送數(shù)據(jù),就是會多幾個字符很煩人。
回復(fù)

使用道具 舉報

6#
ID:396560 發(fā)表于 2018-10-26 11:45 | 只看該作者
好人一生平安
回復(fù)

使用道具 舉報

7#
ID:484044 發(fā)表于 2019-3-4 09:39 | 只看該作者
十分感謝,正好需要!
回復(fù)

使用道具 舉報

8#
ID:147427 發(fā)表于 2019-3-4 16:09 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

9#
ID:531037 發(fā)表于 2019-7-13 14:16 | 只看該作者
我想問在AP模式,開啟服務(wù)器模式已經(jīng)就無法開透傳模式,那怎么傳送數(shù)據(jù)?通過串口?
回復(fù)

使用道具 舉報

10#
ID:583318 發(fā)表于 2019-7-15 08:32 | 只看該作者
問一下傳的是什么數(shù)據(jù),電腦上數(shù)據(jù)傳到哪了
回復(fù)

使用道具 舉報

11#
ID:583318 發(fā)表于 2019-7-15 08:34 | 只看該作者
還有為什么用到了串口??
回復(fù)

使用道具 舉報

12#
ID:592667 發(fā)表于 2019-7-30 17:09 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報

13#
ID:458314 發(fā)表于 2020-4-12 22:50 | 只看該作者
十分感謝
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表