ITKeyword,专注技术干货聚合推荐

注册 | 登录

OK6410与GPRS连接实现与PC机通信,Qt移植

u010780613 分享于 2015-10-02

推荐:OK6410之Qt移植全过程记录

       使用OK6410开发板移植过Qt程序很多次了,也碰到了非常多问题,其中大部分在网上都能找到解决办法,剩下的一部分在自己的摸索下也能够解决,还有个别问题

2020腾讯云8月秒杀活动,优惠非常大!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1040

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

我用到的GPRS模块是SIM300A,采用的是TCP连接,UDP只支持一对一通信。

工具:网络调试助手http://download.csdn.net/detail/u010780613/9153089点击打开链接

需要做一个项目,实现OK6410充当网关,然后通过GPRS将数据发送到PC机中。用GPRS的话PC机的IP必须是公网IP,不然找不到。

公网IP的查看方式:192.168或者172.21等开头的肯定不是公网ip,电信的110、移动183开头的就是公网ip。可以打开浏览器,在百度中输入ip,如果查看到的ip和本机的ip一致,那么PC的ip就是公网ip。途径:电信的无线ChinaNet,移动的CMCC-EDU(移动不一定),因为电信掌握的IP资源比较多,早年3G上网卡什么都是公网IP,但是随着ip资源的枯竭,3G上网卡等都不能用了,只剩下ChinaNet。据说电信拨号上网,宽带上网可以找客服改,不过比较麻烦。

有公网IP是实现GPRS通信的前提,接下来必须懂得AT指令。详细的AT指令可以网上看看,我只说跟GPRS有关的部分。 AT+CGCLASS="B",设置移动台类别为 B AT+CGDCONT=1,"IP","CMNET",设置 PDP 上下文标志为 1,采用互联网协议( IP),接入点为"CMNET" AT+CGATT=1,附着 GPRS 业务 AT+CIPCSGP=1,"CMNET",设置为GPRS 连接,接入点为” CMNET” AT+CLPORT="TCP","2001",即设置 TCP 连接本地端口号为 2001 AT+CIPSTART="TCP","110.11.52.222","8800",模块将建立一个 TCP 连接,连接目标地址为:110.11.52.222,连接端口为 8800,连接成功会返回: CONNECT OK 在连接成功以后发送: AT+CIPSEND,模块返回: >,此时可以输入要发送的数据,最大可以一次发送 1352 字节,数据输入完后,同发短信一样,输入十六进制的: 1A( 0X1A),启动发送数据。在数据发送完成后,模块返回: SENDOK,表示发送成功 AT+CIPSTATUS,模块即返回当前连接状态 AT+CIPCLOSE=1,即可快速关闭当前 TCP/UDP 连接 AT+CIPSHUT,则可以关闭移动场景,关闭场景后连接状态为: IPINITIAL,可以通过发送: AT+CIPSTATUS,查询 如果是还没测试的GPRS模块,就自己让GPRS通过串口与PC机通信,进行检测。打开网络调试助手,设置协议类型为: TCPServer,本地 IP 地址直接用默认的即可(我没有连接公网ip),设置本地端口为: 8080,注意,这里的端口号可以随便设置,范围为 0~65535,只要该端口没有被其他程序占用即可。设置好之后,点击“连接”按钮(点击后变为“断开”,此时电脑端的) TCPServer 已经开始工作,等待连接接入,如下图所示。 <img src="http://img.blog.csdn.net/20151005212358467?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

推荐:ALSA语音库移植到OK6410

ALSA语音库移植到OK6410 环境简介: 系

ubuntu12.04.1 LTS 单

板:OK6410-A

linux-3.0.1 编译器:gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)

其次,在OK6410开发板上应该将GPRS模块与串口2相连,可以在Qt程序中加入以下代码,完成GPRS的准备工作:

QString CGCLASS="AT+CGCLASS=\"B\"\r";

QString CGDCONT="AT+CGDCONT=1,\"IP\",\"CMNET\"\r";

QString CGATT="AT+CGATT=1\r";

QString CIPCSGP="AT+CIPCSGP=1,\"CMNET\"\r";

QString CLPORT="AT+CLPORT=\"TCP\",\"2001\"\r";

QString CIPSTART="AT+CIPSTART=\"TCP\",\"110.11.52.22\",\"8800\"\r"";

this->msgSend(CGCLASS);

sleep(1);

qDebug()<<recvmsg();

this->msgSend(CGDCONT);

sleep(1);

qDebug()<<recvmsg();

this->msgSend(CGATT);

sleep(1);

qDebug()<<recvmsg();

this->msgSend(CIPCSGP);

sleep(1);

qDebug()<<recvmsg();

this->msgSend(CLPORT);

sleep(1);

qDebug()<<recvmsg();

this->msgSend(CIPSTART);

sleep(1);

qDebug()<<recvmsg(); 发送代码: void Index::sendGPRS(){

sendData=QString("#%1#%2#%3$%4").arg(num1).arg(num2).arg(num3).arg("\x1a");

if(sendfd == 1)

{

CIPSEND = ~CIPSEND;

if(CIPSEND == 0)

{

myGPRS->msgSend("AT+CIPSEND\r");

}

else

myGPRS->msgSend(sendData);

}}接收代码: void Index::recvGPRS(){

GPRS_str = myGPRS->recvmsg();

if(GPRS_str=="null")

return;

if(GPRS_str.contains("!",Qt::CaseInsensitive))

{

qDebug()<<GPRS_str;

}

else if(GPRS_str.contains("get",Qt::CaseInsensitive))

{

qDebug()<<"Please return Message";

}}

其中,发送和接收都是针对与GPRS连接的那个串口,这个代码之前都有说过。另外,我自己写了个java的接收程序,通过socket进行通信。测试的时候可以通过网络测试工具。

推荐:在OK6410上实现NFS启动内核

一、使Uboot支持网络。(非必要)   1. 在OK主页上有支持tftp的uboot驱动下载。(我直接下载,估计飞凌没提供是想用户自己学习一下移植。)   2.在主机上装tftp

       我用到的GPRS模块是SIM300A,采用的是TCP连接,UDP只支持一对一通信。               工具:网络调试助手http://download.csdn.net/detail/u010780613/9153089点击打开链接        需要

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。