<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 串口WiFi在WinCE工控主板上的編程方法

     2017-4-5     作者:楊陽         
    文章標(biāo)簽:C/C++WiFi

      ETA6103工作時(shí),對(duì)軟件來說,完全當(dāng)作串口來操作,發(fā)送AT指令建立互聯(lián)網(wǎng)連接。配置信息、網(wǎng)絡(luò)數(shù)據(jù)傳輸均通過一個(gè)串口傳輸。為方便用戶編程,英創(chuàng)公司封裝了一個(gè)CUartWifi類,提供了配置無線網(wǎng)絡(luò)和建立TCP/UDP傳輸?shù)墓埠瘮?shù),用戶不用關(guān)心具體的AT指令即可進(jìn)行開發(fā)。


    使用說明


      參考例程uart_wifi,工程中添加Serial.h , Serial.cpp, ETA6103.h, ETA6103.cpp共4個(gè)文件。


      添加引用#include "ETA6103.h"

      即可創(chuàng)建類并使用CUartWifi myWifi;


    WiFi連接管理


      參考例程APConnect,該例程簡(jiǎn)單展示如何進(jìn)行AP連接的管理


      調(diào)用Open,AutoCfg方法初始化模塊

      調(diào)用GetAPList方法查詢附近的AP

      調(diào)用ConnectAP方法連接AP

      調(diào)用SetDefAP設(shè)置上電后默認(rèn)連接的AP(不能在該AP無法連接時(shí)設(shè)置)

      調(diào)用DisconnectAP方法斷開AP連接

      調(diào)用GetCurIP查詢AP分配到的IP地址


    UDP通信


      參考例程Udp。


      調(diào)用Open,AutoCfg方法初始化模塊

      CUartWifi  m_ETA6103;

      m_ETA6103.Open();

      m_ETA6103.AutoCfg();


      調(diào)用ConnectUdp打開UDP連接,并創(chuàng)建線程用來等待消息接收

      ip = “192.168.201.248”;

      rport = 6000;

      lport = 5000;

      bRet = m_ETA6103.ConnectUdp(0, ip, rport, lport);

      m_hRecvThread = CreateThread(0, 0, RecvTread, this, 0, NULL);


      向遠(yuǎn)端發(fā)送數(shù)據(jù)

      char str[32] = “test udp”;

      len = strlen(str);

      bRet = m_ETA6103.SendMsg(0, str, len);


      接收線程處理

      DWORD CUdpDlg::RecvTread(LPVOID lparam)

      {

            CUdpDlg *pDlg = (CUdpDlg*)lparam;

            DWORD dwLen;

            char recvBuf[1024];

            while(!pDlg->m_bThreadStop)

            {      

                pDlg->m_ETA6103.WaitMsg();      //等待消息

                if (dwRet == WAIT_OBJECT_0)

                {

                    pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1023, &dwLen); 

      //讀數(shù)據(jù)

                    while(dwLen>0)

                    {

                        //處理代碼

                        pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen);

                        //循環(huán)讀直到讀完buffer

                    }  

                }

            }//while(!pDlg->m_bThreadStop)

            return 0;

      };


    TCP客戶端通信


      參考例程TcpClient。


      調(diào)用Open,AutoCfg方法初始化模塊

      CUartWifi  m_ETA6103;

      m_ETA6103.Open();

      m_ETA6103.AutoCfg();


      調(diào)用ConnectUdp打開UDP連接,并創(chuàng)建線程用來等待消息接收

      ip = “192.168.201.248”;

      port = 6000;

      bRet = m_ETA6103. ConnectTcpServer (0, ip, port);

      m_hRecvThread = CreateThread(0, 0, RecvTread, this, 0, NULL);


      向遠(yuǎn)端發(fā)送數(shù)據(jù)

      char str[32] = “test tcpclient”;

      len = strlen(str);

      bRet = m_ETA6103.SendMsg(0, str, len);


      接收線程處理

      DWORD CUdpDlg::RecvTread(LPVOID lparam)

      {

            CUdpDlg *pDlg = (CUdpDlg*)lparam;

            DWORD dwLen;

            char recvBuf[1024];

            while(!pDlg->m_bThreadStop)

            {      

                pDlg->m_ETA6103.WaitMsg();      //等待消息

                if (dwRet == WAIT_OBJECT_0)

                {

                    pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1023, &dwLen); 

      //讀數(shù)據(jù)

                    while(dwLen>0)

                    {

                        //處理代碼

                        pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen);

                        //循環(huán)讀直到讀完buffer

                    }  

                }

            }//while(!pDlg->m_bThreadStop)

            return 0;

      };


      可以看到,TCP客戶端的使用和UDP幾乎一樣,只是連接時(shí)調(diào)用的函數(shù)不一樣


    TCP服務(wù)端通信


      參考例程TcpClient。


      調(diào)用Open,AutoCfg方法初始化模塊

      CUartWifi  m_ETA6103;

      m_ETA6103.Open();

      m_ETA6103.AutoCfg();


      調(diào)用CreateTcpServer打開服務(wù)端連接,并創(chuàng)建線程用來偵聽客戶端連接和數(shù)據(jù)接收

      port = 6000;

      bRet = m_ETA6103. CreateTcpServer(port);

      m_hRecvThread = CreateThread(0, 0, RecvTread, this, 0, NULL);


      向?qū)?yīng)的客戶端發(fā)送數(shù)據(jù)

      char str[32] = “test tcpserver”;

      int id = 1;     //向鏈接號(hào)為1的客戶端發(fā)送信息

      len = strlen(str);

      bRet = m_ETA6103.SendMsg(id, str, len);


      接收線程處理


      在例程中,將客戶端連接和消息接收,封裝到同一個(gè)事件中,然后通過標(biāo)記位判斷事件的類型,客戶可以根據(jù)需要,修改封裝代碼,改為各自事件分別處理,或者修改為多個(gè)線程來處理連接事件,和消息接收事件。


      DWORD CTcpServerDlg::RecvTread(LPVOID lparam)

      {

          CTcpServerDlg *pDlg = (CTcpServerDlg*)lparam;

          DWORD dwLen;

          char recvBuf[1024];

          DWORD dwRet;

          int len;

          int i;

          int n;

          while(!pDlg->m_bThreadStop)

          {      

              dwRet = pDlg->m_ETA6103.WaitMsg();

              if (dwRet == WAIT_OBJECT_0)

              {

                  for(i=0; i<5; i++)

                  {

                      if(pDlg->m_ETA6103.m_link[i].eventFlag & EVT_STAT)  //狀態(tài)變化

                      {

                          if(pDlg->m_ETA6103.m_link[i].stat == 0)//close

                          {

                              //用戶斷開代碼處理

                          }

                          else//connected

                          {

                              //用戶連接代碼處理

                          }

                      }

                      if(pDlg->m_ETA6103.m_link[i].eventFlag & EVT_RECV)  //數(shù)據(jù)接收

                      {

                          pDlg->m_ETA6103.ReadMsg(i, recvBuf, 1020, &dwLen);

                          while(dwLen>0)

                          {

                              //數(shù)據(jù)接收代碼處理

                              pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen); 

                          }

                      }

                      if(pDlg->m_ETA6103.m_link[i].eventFlag & EVT_ERR)   //錯(cuò)誤事件

                      {

                          //錯(cuò)誤事件代碼處理

                      }

                      pDlg->m_ETA6103.m_link[i].eventFlag = 0;

                  }      

              }

          }//while(!pDlg->m_bThreadStop)

          return 0;

      }


    速度測(cè)試?yán)?/strong>


      例程TestSpeed用于測(cè)試文件接收速度。通過SetCurUart可以設(shè)置波特率(最大460800,建議默認(rèn)115200),用戶可以選定最適合自己應(yīng)用的配置。


      注意,在高速傳輸過程中,如果接收BUFFER收滿來不及處理,將發(fā)生數(shù)據(jù)丟包。建議參考例程,在對(duì)應(yīng)位置添加處理代碼。

    文章標(biāo)簽:C/C++WiFi
    亚洲AV无码久久精品成人 | 国产麻豆精品原创| 国产精品美女一级在线观看| 正在播放酒店精品少妇约| 12345国产精品高清在线| 国产成人亚洲精品无码AV大片| 亚洲乱码国产乱码精品精| 国产精品大全国产精品| 精品视频免费在线| 99国产精品99久久久久久| 欧洲精品一卡2卡三卡4卡乱码| 国产精品偷伦视频观看免费| 欧美日韩精品SUV| 亚洲AV无码成人精品区天堂 | 无码精品久久久久久人妻中字| 国产日韩精品一区二区在线观看| 青青草原精品99久久精品66| 亚洲精品偷拍视频免费观看 | 国产精品久久久久久久久鸭| 精品国产一区二区三区久久蜜臀| 午夜精品在线视频| 精品一区二区三区无码视频| 国产精品真实对白精彩久久| 国产麻豆精品久久一二三| 国内精品久久久久影视| 99国产精品国产精品九九| 亚洲国产精品自在在线观看| 国产午夜精品久久久久九九电影 | 国产香蕉国产精品偷在线观看| 国产精品亚洲综合天堂夜夜| 人妖在线精品一区二区三区| 久久免费视频精品| 亚洲精品无码久久一线| 日韩视频中文字幕精品偷拍| 精品久久久中文字幕一区| 国内精品免费麻豆网站91麻豆| 国产精品丝袜一区二区三区| 热久久这里是精品6免费观看| 午夜精品久久久内射近拍高清| 国产精品亚洲一区二区无码| 九九九精品成人免费视频|