ETA6103工作時,對軟件來說,完全當作串口來操作,發送AT指令建立互聯網連接。配置信息、網絡數據傳輸均通過一個串口傳輸。為方便用戶編程,英創公司封裝了一個CUartWifi類,提供了配置無線網絡和建立TCP/UDP傳輸的公共函數,用戶不用關心具體的AT指令即可進行開發。
使用說明
參考例程uart_wifi,工程中添加Serial.h , Serial.cpp, ETA6103.h, ETA6103.cpp共4個文件。
添加引用#include "ETA6103.h"
即可創建類并使用CUartWifi myWifi;
WiFi連接管理
參考例程APConnect,該例程簡單展示如何進行AP連接的管理
調用Open,AutoCfg方法初始化模塊
調用GetAPList方法查詢附近的AP
調用ConnectAP方法連接AP
調用SetDefAP設置上電后默認連接的AP(不能在該AP無法連接時設置)
調用DisconnectAP方法斷開AP連接
調用GetCurIP查詢AP分配到的IP地址
UDP通信
參考例程Udp。
調用Open,AutoCfg方法初始化模塊
CUartWifi m_ETA6103;
m_ETA6103.Open();
m_ETA6103.AutoCfg();
調用ConnectUdp打開UDP連接,并創建線程用來等待消息接收
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);
向遠端發送數據
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);
//讀數據
while(dwLen>0)
{
//處理代碼
pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen);
//循環讀直到讀完buffer
}
}
}//while(!pDlg->m_bThreadStop)
return 0;
};
TCP客戶端通信
參考例程TcpClient。
調用Open,AutoCfg方法初始化模塊
CUartWifi m_ETA6103;
m_ETA6103.Open();
m_ETA6103.AutoCfg();
調用ConnectUdp打開UDP連接,并創建線程用來等待消息接收
ip = “192.168.201.248”;
port = 6000;
bRet = m_ETA6103. ConnectTcpServer (0, ip, port);
m_hRecvThread = CreateThread(0, 0, RecvTread, this, 0, NULL);
向遠端發送數據
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);
//讀數據
while(dwLen>0)
{
//處理代碼
pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen);
//循環讀直到讀完buffer
}
}
}//while(!pDlg->m_bThreadStop)
return 0;
};
可以看到,TCP客戶端的使用和UDP幾乎一樣,只是連接時調用的函數不一樣
TCP服務端通信
參考例程TcpClient。
調用Open,AutoCfg方法初始化模塊
CUartWifi m_ETA6103;
m_ETA6103.Open();
m_ETA6103.AutoCfg();
調用CreateTcpServer打開服務端連接,并創建線程用來偵聽客戶端連接和數據接收
port = 6000;
bRet = m_ETA6103. CreateTcpServer(port);
m_hRecvThread = CreateThread(0, 0, RecvTread, this, 0, NULL);
向對應的客戶端發送數據
char str[32] = “test tcpserver”;
int id = 1; //向鏈接號為1的客戶端發送信息
len = strlen(str);
bRet = m_ETA6103.SendMsg(id, str, len);
接收線程處理
在例程中,將客戶端連接和消息接收,封裝到同一個事件中,然后通過標記位判斷事件的類型,客戶可以根據需要,修改封裝代碼,改為各自事件分別處理,或者修改為多個線程來處理連接事件,和消息接收事件。
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) //狀態變化
{
if(pDlg->m_ETA6103.m_link[i].stat == 0)//close
{
//用戶斷開代碼處理
}
else//connected
{
//用戶連接代碼處理
}
}
if(pDlg->m_ETA6103.m_link[i].eventFlag & EVT_RECV) //數據接收
{
pDlg->m_ETA6103.ReadMsg(i, recvBuf, 1020, &dwLen);
while(dwLen>0)
{
//數據接收代碼處理
pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen);
}
}
if(pDlg->m_ETA6103.m_link[i].eventFlag & EVT_ERR) //錯誤事件
{
//錯誤事件代碼處理
}
pDlg->m_ETA6103.m_link[i].eventFlag = 0;
}
}
}//while(!pDlg->m_bThreadStop)
return 0;
}
速度測試例程
例程TestSpeed用于測試文件接收速度。通過SetCurUart可以設置波特率(最大460800,建議默認115200),用戶可以選定最適合自己應用的配置。
注意,在高速傳輸過程中,如果接收BUFFER收滿來不及處理,將發生數據丟包。建議參考例程,在對應位置添加處理代碼。
成都英創信息技術有限公司 028-8618 0660