新闻中心

EEPW首页>手机与无线通信>设计应用> 基于SIM800C的GPRS数据传输系统设计*

基于SIM800C的GPRS数据传输系统设计*

作者:韩进 马双 时间:2016-10-27 来源:电子产品世界 收藏
编者按:本文设计了一种以GPRS为传输方式的无线数据传输系统。该系统以STM32F207VC为主控芯片,采用最新的SIM800C模块,以串口通讯方式实现与主控芯片的通讯,将采集到的数据传输至服务器端,软件方面包括异常处理、心跳包机制的设计,大幅提高了GPRS的传输稳定性。经过长时间测试发现,客户端以TCP/IP协议与服务端保持良好连接状态。该设计可广泛应用于各类单片机控制系统中,为无线数据传输提供了一种新的稳定的解决方案。

  2.1 模块AT命令

本文引用地址://m.amcfsurvey.com/article/201610/311927.htm

  SIM800系列通讯模块的主要AT指令同SIMCom公司其他型号的物联网通讯模块的指令大部分相同,可用以兼容各个不同的硬件版本,用来建立TCP连接的相关命令及其作用如表1。

  利用STM32的标准库函数可以快速对芯片的USART进行初始化,在STM32的main函数中,上电后主要完成相应的时钟以及GPIO,使能芯片的USART接口、初始化波特率等。并配置中断向量,编写相关的串口中断处理程序,作为返回值接收处理函数的基础。为测试系统传输数据的准确性,通过STM32的485接口,应用Modbus协议每隔1秒采集一款485型温湿度传感器及其他传感器的数据进行传输,每隔30秒进行一次传输,并将数据保存在DeviceRunStatus_Struct结构体中。

  针对操作需要初始化STM32的串口,配置运行模式,其中,网络域名的参数保存在DNSPara_Struct结构体中,例如,域名地址、DNS服务器地址1和DNS服务器地址2。ProtocolPara_Struct结构体中主要存放与IP相关的参数,例如本地TCP端口m_LocalTcpPort、服务器Tcp地址m_ServerTcpPort和服务器地址m_ServerIPAddr。在利用进行TCP连接的AT命令时,直接调用这两个结构体内的参数进行连接即可。根据AT命令执行后的返回值判断连接是否成功,此时令m_RunPara.m_DeviceRunStatus.m_nGprs = 1,置位连接状态标志。

  2.2 异常处理

  在日常测试中发现,可能会由于信号或环境的影响导致SIM800C模块出现异常,模块串口报错TCP CLOSED导致连接中断。软件设计中,在处理此类型问题时,利用_Check_Periodic_Handle()函数每隔30秒检查一次连接状态,若内存中的变量m_RunPara.m_DeviceRunStatus.m_nGprs值为0,即连接失败时,对SIM800C模块进行重新上电操作,将模块远程自动重启,重新执行开机、配置、连接TCP等一系列动作以恢复模块的正常运行。并在程序中设定域名最大连接次数为3次,即在3次域名连接仍未成功则使用IP地址方式进行连接,保证域名及IP连接均可正常使用。

  2.2 心跳包机制

  在模块与服务器建立TCP连接后,由于网络运营商的设置,若在某一时间段内客户端与服务端没有任何数据交换,会将网络断开,导致连接中断,数据无法正常传输,为解决这一问题,在TCP通讯协议内加入心跳包机制,用于长连接的保持和断线处理。CMD_HeartTime命令号,在第一次建立连接后,客户端发送当前设备时钟,服务端开启Timer定时器每隔30秒钟根据命令号进入心跳包处理的case语句中执行,进行双向对时操作,这样既可以保持双向稳定连接,又可以对物联网设备进行RTC更新时间操作,保证了设备运行的稳定性。下位机软件代码如下:

  case CMD_HeartTime:

  if(pNetComm->m_Header.m_nOperation == 0)

  {

  UpdateTimer(pNetComm->unoin.m_TimerPara.m_TimestampL);

  pNetComm->m_Header.m_nOperation = 1;

  chRet = 1;

  }

  break;

  在下位机收到CMD_HeartTime命令号时,进入该case语句内,UpdateTimer函数用于更新设备的RTC时钟,并置TCP数据包的头部m_Header中的.m_nOperation为1,在最后打包结构体数据通过TCP协议发送给服务器端。

  将未加入异常处理与心跳包机制的1号设备与经过优化的2号设备运行一上午的时间进行对比,具体连接情况对比如表2与表3所示。

  测试发现,1号设备会因网络问题超时而断开连接,只能靠人工手动进行复位重连;2号设备在上线后仅因服务器原因断开连接,随后便立即自动重连并保持连接至测试结束。说明异常处理、心跳包机制与断线重连起到了提高设备传输稳定性的作用。将2号设备接入独立IP的云服务器,通过网页查看观测24小时,发现无异常掉线问题,数据正确稳定传输。服务器端部分接收情况如图6所示。

3 结论

  论文以STM32F207VCT6为主控芯片,以最新的GPRS模块SIM800C为物联网通讯模块进行无线数据传输,长时间设备运行测试未发现掉线及传输错误情况,传输情况稳定,基于C语言编写的嵌入式程序代码可方便地移植到其他类型的单片机中,方便进行二次开发,为物联网设备数据的传输提供了一种新的稳定的解决方案。

参考文献:

  [1]刘火良.STM32库开发实战指南[M].北京:机械工业出版社,2013.

  [2]李涛,马殷元,杨东. 基于STM32的GPRS远程检测终端设计[J]. 电子世界,2012.

  [3]张逢雪,王香婷,王通生. 基于STM32单片机的无线智能家居控制系统[J]. 自动化技术与应用,2011.

  [4]Simcom. SIMCOM800C硬件设计手册.pdf[EB/OL]. http://simcomm2m.com/UploadFile/TechnicalFile/SIM800C_硬件设计手册_V1.01.pdf.

  [5]Simcom. SIM800Series AT Command ManualV1.09.pdf[EB/OL].

  http://simcomm2m.com/UploadFile/TechnicalFile/SIM800Series_ATCommandManual_V1.09.pdf.

  [6]Simcom. SIM80系列TCPIP应用文档V1.01.pdf[EB/OL].http://simcomm2m.com/UploadFile/TechnicalFile/SIM800系列_TCPIP_应用文档_V1.01.pdf.


本文来源于中国科技期刊《电子产品世界》2016年第10期第39页,欢迎您写论文时引用,并注明出处。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭