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

2018年03月09日 2.25k 次阅读 0 条评论 0 人点赞

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

引言 作为目前广泛应用的2G网络,稳定性高,网络覆盖范围广,将其与物联网结合起来,可作为一种通讯方式,用于远程查看设备状态,控制设备运行,开发出的物联网产品。 本文设计的数据传输系统以STM32F207VCT6为主控芯片,通过串口通讯方式与AT指令集控制支持TCP/IP协议的GPRS模块,该模块支持域名解析与IP地址直接连接两种方式连接服务器,并结合通讯异常处理与心跳包机制,大幅提高GPRS与服务器端的传输稳定性。作为测试,模拟已经采集到设备周围环境温度及其他传感器状态作为传输数据,不间断地传输至远程服务器端。 1 硬件系统设计 本系统的硬件设计框图如图1所示。 本设计以STM32F207VCT6为主控芯片,采用5V变压器供电方式,可以通过JTAG接口对芯片进行开发调试。主控芯片通过串口方式与进行通讯,SIM800C则提供TCP/IP协议,与远程服务器进行数据交互,上位机软件通过DMZ转发将本地计算机暴露于互联网下,结合动态DNS域名与端口号,用于对该系统的查看与控制,同时,STM32驱动LED发光二极管以告知用户系统连接与运行状态。 1.1 相关芯片及SIM800C介绍 STM32F207VCT6为 ST (意法半导体)公司研发的一款入门级低功耗32位ARM芯片,拥有64Kb片内Flash,以及包括UART、USB、CAN、SPI、I2C等在内的丰富的硬件接口,结合Keil或IAR开发环境及其标准固件库可方便地进行产品开发。 本设计采用GPRS无线通信方式,采用SIMCom公司2015年下旬最新生产的SIM800C模块,该模块用于替代之前的SIM800E模块,价格低廉,主要工作在850/900/1800/1900MHz频率,满足GSM 2/2+标准,支持GSM/GPRS与AT指令控制,其性能稳定,外观小巧,性价比高,多样化的硬件接口可方便地与单片机或PLC进行通讯,支持双SIM卡,可低功耗实现SMS和数据信息的传输。SIM800C尺寸为17.6mm×15.7mm×2.3mm,能适用于各种紧凑型产品设计需求。 1.2 原理图设计 考虑到各芯片电源供电电压与系统设备的使用场景,设置系统的输入电压为5V直流,经过F110贴片式自恢复保险丝以及L1117-3.3稳压芯片输出3.3V直流电压供电,为使直流电源波形噪声减小,可在5V输入端和3.3V输出端并联2个100µF钽电容进行滤波,如图2所示。同样的,可在每个电源管脚附近布一个100nF电容用作退耦电容,从而稳定输入电源,主芯片JTAG接口加10K上拉电阻进行连接,方便使用Ulink等调试器进行在线调试及仿真。将主控芯片与SIM800C模块按照串口接口连接。 根据SIM800C模块硬件设计手册,模块供电电压范围为3.4V~4.4V,本设计采用AOZ1016稳压芯片,参照AOZ1016芯片数据手册搭建降压稳压电路,将5V直流输入稳压为4V供给SIM800C使用,后端两个100µF电容作为直流电压的滤波电容。如图3所示。 SIM800C模块与单片机直接为串口接口,根据硬件设计手册需进行3.3V电平匹配,将模块与单片机串口之间接1KΩ电阻,模块RX脚接5.6KΩ电阻到地,以实现简单的电平匹配,以符合串口传输要求。 1.3 GPRS模块与SIM卡接口设计 GPRS的使用需要依托手机SIM卡作为物理介质进行信号传输,目前SIM卡接口底座型号较多,本系统采用塑料材质的贴片封装的底座,在节约成本的条件下,可保证信号的稳定性。为保证SIM卡不受静电损坏,在DATA与CLK端接入ESD防护芯片。模块与SIM卡接口如图4所示。 2 软件设计与实现 通过STM32F207VCT6的串口输出AT指令来控制SIM800C模块的相应动作,将模块设置为透传模式,这样经过单片机串口发送的数据在模块连接TCP成功之后可发送至模块的串口上,模块自动将这些数据发送至服务端,极大地方便了软件设计,更有利于控制软件流程。软件设计流程图如图5所示,在模块进行TCP连接后,若连接不成功则重新进行连接;若连接成功,则发送采集到的数据传输至服务器端,同时开启串口中断接收模块的返回值,并判断返回值是数据还是命令。若为数据则启用接收;若为命令则根据命令号结合相应结构体处理命令。 2.1 模块AT命令 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语言编写的嵌入式程序代码可方便地移植到其他类型的单片机中,方便进行二次开发,为物联网设备数据的传输提供了一种新的稳定的解决方案。

作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。

文章评论(0

接收回复邮件通知