通过GPRS上传GPS数据到服务器

Posted by Beyonderwei on 2019-07-10
Words 813 and Reading Time 3 Minutes
Viewed Times

一、目的

  将GPS获取到的位置信息,通过GPRS将数据上传到服务器,当然也可以传输其他的信息,这样就可以实现对某些东西的时时定位,比如共享单车、汽车的定位等等。

二、使用的器件

1. GPRS模块和物联网卡

  ①. GPRS模块使用的是有方的N10标准版,如下图:

  ②. 腾讯云上购买的移动卡,比自己买方便许多,腾讯还会提供后台管理和其他接口服务,续费什么的也很方便。如下图:

2. GPS模块

  使用的是中科微电子的ATGM332D 5N-31,如下图:

3. MCU

  我使用的是TI的TM4C123G,不同MCU基本没有区别,使用这个的原因就是比赛TI送了好多块,总得找个地方用吧,哈哈。

三、电路连接

  因为要GPS和GPRS通信,所以需要两个UART,一个用来解析GPS返回的数据和打印数据到控制台调试,另一个则与GPRS通信,向GPRS发送数据和接收GPRS返回的数据。
  GPS的TX <————————————-> UART0的RX
  UART0的TX <——————————-> 串口模块的RX
  GPRS的TX <———————————-> UART1的RX
  GPRS的RX <———————————-> UART1的TX

四、程序设计

  ①. GPS数据解析: 根据返回的数据是否有效,有效的话则将数据更新存放GPS数据的结构体,卖家也有相应的例程作为参考,移植过来用就可以了。
  ②. GPS数据转化: 因为要将数据通过GPRS上传到服务器,通信协议采用HTTP,这就需要将有用的GPS数据转成Json格式,当然要使用cJson了,但是这里有个坑,创建cJson对象时涉及内存申请,需要去startup_TM4C123.s 文件中将堆改到合适的大小,但堆栈加起来不要超过RAM的大小。 如下图所示(这是我修改后的,不然每次创建对象时程序会直接卡死):

  ③. 解析GPRS返回的数据: 因为每发一条命令后,要等待GPRS会返回不同的数据并进行判断,然后根据实际情况去进行相应的处理,对于返回结果包含特殊字串的可以直接通过strstr()来判断,如“OK”、“ERROR”、“>”等。但实际测试中还是发现,连接几百上千次之后还是会掉入循环卡死,为了保持稳定性,索性直接写个看门狗,卡死强行复位程序。
  ④. 看门狗部分: 因为程序执行周期(每完成一次连接,发送数据),大概需要三秒多一点,看门狗的触发时间我设置的7秒,如果超过此时间没有喂狗,直接复位。(注:TM4C123G的WDT有二次触发特性)。最后实际测试了四个半小时,建立连接4000次左右,程序没有出现卡死现象。

  ⑤. 后台的程序就简单用SpringBoot写一下,用来测试。

五、程序代码

  1. 获取方式:
    ①. github下载:https://github.com/Beyonderwei/GPS-positioning-system
    ②. CSDN下载:https://download.csdn.net/download/csdn_x_w/11274960
  2. IDE:keil5 下载后直接全编译即可使用。

本文为作者原创文章,未经作者允许不得转载。

...

...

00:00
00:00