完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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.eventFlag & EVT_STAT) //状态变化 { if(pDlg->m_ETA6103.m_link.stat == 0)//close { //用户断开代码处理 } else//connected { //用户连接代码处理 } } if(pDlg->m_ETA6103.m_link.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.eventFlag & EVT_ERR) //错误事件 { //错误事件代码处理 } pDlg->m_ETA6103.m_link.eventFlag = 0; } } }//while(!pDlg->m_bThreadStop) return 0; } 速度测试例程 例程TestSpeed用于测试文件接收速度。通过SetCurUart可以设置波特率(最大460800,建议默认115200),用户可以选定最适合自己应用的配置。 注意,在高速传输过程中,如果接收BUFFER收满来不及处理,将发生数据丢包。建议参考例程,在对应位置添加处理代码。 成都英创信息技术有限公司 http://www.emtronix.com |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 11:44 , Processed in 0.682892 second(s), Total 56, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号