文章目录

  • 一、目的
  • 二、使用的器件
  • 1. GPRS模块和物联网卡
  • 2. GPS模块
  • 3. MCU
  • 三、电路连接
  • 四、程序设计
  • 五、程序代码


一、目的

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

二、使用的器件

1. GPRS模块和物联网卡

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

android 上传gps坐标 休眠时始终保持网络连接 gps定位数据传输_物联网卡


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

android 上传gps坐标 休眠时始终保持网络连接 gps定位数据传输_物联网卡_02

2. GPS模块

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

android 上传gps坐标 休眠时始终保持网络连接 gps定位数据传输_GPS_03

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的大小。 如下图所示(这是我修改后的,不然每次创建对象时程序会直接卡死):

android 上传gps坐标 休眠时始终保持网络连接 gps定位数据传输_GPS_04


  ③. 解析GPRS返回的数据: 因为每发一条命令后,要等待GPRS会返回不同的数据并进行判断,然后根据实际情况去进行相应的处理,对于返回结果包含特殊字串的可以直接通过strstr()来判断,如“OK”、“ERROR”、“>”等。但实际测试中还是发现,连接几百上千次之后还是会掉入循环卡死,为了保持稳定性,索性直接写个看门狗,卡死强行复位程序。

  ④. 看门狗部分: 因为程序执行周期(每完成一次连接,发送数据),大概需要三秒多一点,看门狗的触发时间我设置的7秒,如果超过此时间没有喂狗,直接复位。(注:TM4C123G的WDT有二次触发特性)。最后实际测试了四个半小时,建立连接4000次左右,程序没有出现卡死现象。

android 上传gps坐标 休眠时始终保持网络连接 gps定位数据传输_IOT_05


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

五、程序代码

  1. 获取方式:
    ①. github下载:https://github.com/Beyonderwei/GPS-positioning-system
  2. IDE:keil5 下载后直接全编译即可使用。
      
      
      
    Author: Beyonderwei
    Website: http://beyonderwei.com