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);
向远端发送数据
charstr[32] = “test udp”;
len = strlen(str);
bRet = m_ETA6103.SendMsg(0, str, len);
接收线程处理
DWORD CUdpDlg::RecvTread(LPVOID lparam)
{
CUdpDlg *pDlg = (CUdpDlg*)lparam;
DWORD dwLen;
charrecvBuf[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)
return0;
};
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);
向远端发送数据
charstr[32] = “test tcpclient”;
len = strlen(str);
bRet = m_ETA6103.SendMsg(0, str, len);
接收线程处理
DWORD CUdpDlg::RecvTread(LPVOID lparam)
{
CUdpDlg *pDlg = (CUdpDlg*)lparam;
DWORD dwLen;
charrecvBuf[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)
return0;
};
可以看到,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);
向对应的客户端发送数据
charstr[32] = “test tcpserver”;
intid = 1; //向链接号为1的客户端发送信息
len = strlen(str);
bRet = m_ETA6103.SendMsg(id, str, len);
接收线程处理
在例程中,将客户端连接和消息接收,封装到同一个事件中,然后通过标记位判断事件的类型,客户可以根据需要,修改封装代码,改为各自事件分别处理,或者修改为多个线程来处理连接事件,和消息接收事件。
DWORD CTcpServerDlg::RecvTread(LPVOID lparam)
{
CTcpServerDlg *pDlg = (CTcpServerDlg*)lparam;
DWORD dwLen;
charrecvBuf[1024];
DWORD dwRet;
intlen;
inti;
intn;
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)
return0;
}
速度测试例程
例程TestSpeed用于测试文件接收速度。通过SetCurUart可以设置波特率(最大460800,建议默认115200),用户可以选定最适合自己应用的配置。
注意,在高速传输过程中,如果接收BUFFER收满来不及处理,将发生数据丢包。建议参考例程,在对应位置添加处理代码。
-
嵌入式主板
+关注
关注
7文章
6085浏览量
35331
发布评论请先 登录
相关推荐
评论