基于GPRS网络的GPS图形导航仪
图2 本导航终端主要的功能如下: ① 终端用户进行当前所在地理位置的查询; ② 当获得了当前的地理位置信息后,在TFT液晶屏上显示出对应的地图区域; ③ 导航终端可对指定了网络服务器发送自身的相关信息,如地理位置、自身状态等; ④ 导航终端通过接收网络服务器发送的控制命令进行相应的控制; ⑤ 终端用户可以通过GPRS模块拨打电话。 系统的工作原理如下: 导航终端的核心控制部分是基于ARM7内核的AT91SAM7S64微控制器,其核心是对GPS接收模块的定位数据读取;对GPRS模块的控制,包括连接Internet、向网络监控服务器发送数据和读取服务器发送过来的数据;最后是针对Flash存储体的控制,通过对当前获得的地理位置信息,读取存储在Flash存储体中所存储的地图的对应部分,然后在TFT彩色液晶屏上显示出来。 其中,控制器对GPRS模块的控制是通过串行口UART0实现的,通过发送对应的AT命令实现对G20模块的控制,如连接Internet、向服务器发送信息和接收数据、拨打电话等。关键命令如下: at+mipCAll=1,cmnet //建立一个无线GPRS链接 +MIPCALL: 10.103.201.135 //返回本地IP地址(注:当GPRS模块拨号上网后,会获得一个服务器提供的唯一IP,这里以10.103.201.135为例) at+mipopen=1,2000,"10.103.67.30",3000,1 //打开一个SOCKET,本地端口为2000,目标IP地址为 //"10.103.67.30" OK +MIPOPEN: 1,1 //返回目标端口为3000,协议类型为UDP at+mipsend=1,"41424344" //向服务器发送"ABCD"4个字母,这里以发送"ABCD"字//符为例,来代替所要发送的数据 +MIPSEND: 1,1367 OK//发送成功 at+mippush=1//准备接收数据 +MIPPUSH: 0 OK//接收数据成功 +MIPRUDP: 211.139.189.180,47280,1,5,5152535455 //接收到服务器发送来的数据"QRSTU"字符 对GPS模块的数据接收是通过串行口UART1实现的,通过设定GPS模块指定的波特率从模块的串行口获得定位数据。GPS通用的命令格式是NMEA0183,而最需要的关键信息是其中的一组定位信息。如果此时GPS接收机和卫星的通信正常,则可以接收到的定位信息的那组数据格式如下: $GPRMC,204700,A,3403.868,N,11709.432,W,001.9,336.9,170698,013.6,E*6E 数据说明如下: $GPRMC代表GPS推荐的最短数据; 204700 UTC_TIME代表24小时制的标准时间,按照小时/分钟/秒的格式; A A或者 V A表示数据"OK",V表示一个警告;3403.868 LAT纬度值,精确到小数点前4位,后 3位N LAT_DIR N表示北纬,S表示南纬; 11709.432 LON经度值,精确到小数点前5位,后3位W LON_DIR W表示西经,E表示东经。 如果当前没有和卫星取得联系,那么字符串的格式为: $GPRMC,UTC_TIME,V,... 下面是一个例子: $GPRMC,204149,V,,,,,,,170698,,*3A 由于这里仅仅需要接收的信息为定位信息,即GPS推荐的最短数据,所以在接收GPS模块的数据时,只需要判断每行数据开头的关键字是否为"$GPRMC",如是,则接收下来。 最后是针对Flash存储体和TFT彩色液晶屏的控制。这里,CPU使用普通的SPI高速串行总线来驱动Flash存储体。可以从当地的勘测部门获得普通精度的数字彩色经纬地图,并将其存储到Flash存储体中,而用普通的I/O引脚来驱动TFT彩色液晶屏,将从GPS模块里获得的定位信息进行分析,然后通过处理,再在LCD上面显示Flash存储体中所存储的地图的对应部分。 3 系统软件设计 在整个GPS导航系统中,全套软件系统由用户软件、导航仪底层驱动软件和服务器端控制软件组成。这里,以导航仪底层驱动软件来说明整个系统的软件是如何设计和运作的。 整个导航仪底层驱动软件划分成若干个模块,由主模块和多个子模块组成。这里,使用了实时嵌入式系统μC/OS-II,其优点是功能强大,对系统资源的占用要求小,实时响应,而且可以很轻松地实现多个任务的调度。这里,将所有的子程序设置成不同的任务,如下: ① OSTaskCreate(SystemInit, (void *)0, (OS_STK *)&SystemInit[OSTaskStkSiz], 4); //整个系统的初始化,作为第一个任务,包括对CPU、GPRS、GPS以及LCD的初始化工作 ② OSTaskCreate(GPS_Get_Data, (void *)0, (OS_STK *)&GPS[OSTaskStkSiz], 5); //将从GPS模块读取定位信息作为第二个任务 ③ OSTaskCreate(GPRS_Send_Data, (void *)0, (OS_STK *)&GPRS_S[OSTaskStkSiz], 6); //设置通过GPRS模块向指定的网络服务器发送数据作为一个任务 ④ OSTaskCreate(GPRS_Get_Data, (void *)0, (OS_STK *)&GPRS_R[OSTaskStkSiz], 7); //设置通过GPRS模块从指定的网络服务器接收数据作为另外一个任务 ⑤ OSTaskCreate(LCD_Draw, (void *)0, (OS_STK *)&LCD[OSTaskStkSiz], 8); //驱动TFT LCD让其显示对应当前地理位置区域的地图部分,作为整个显示部分的任务 ⑥ OSTaskCreate(Flash_Drive, (void *)0, (OS_STK *)&LCD[OSTaskStkSiz], 9); //驱动Flash存储体来读取对应地理位置信息的地图部分,从而为LCD显示部分作好准备 完成整个系统软件的模块化设计后,通过调用OSStart()函数让整个系统运行起来。从以上的软件组成说明,可以了解整个系统软件的工作流程如下: ① CPU通过GPS模块获得当前的地理位置信息。 ② CPU利用刚才所获得的GPS定位信息,可以从Flash存储体中获得对应当前区域的地图部分,然后通过驱动TFT彩色液晶屏将其显示出来。 ③ 如需要,CPU通过GPRS模块拨号连接上Internet后,将其所获得的定位信息发送到指定的网络服务器上,或接收从服务器上发过来的数据。 ④ 接收到服务器的控制命令后,返回响应并采取相应措施,如停止GPS数据的接收,改变导航终端通过GPRS网络向服务器发送数据的周期等。 最终搭建成的导航系统如图3所示。 |
- 是福音还是侵犯隐私?先进定位技术可精确判断位置(09-12)
- 基于位置的服务在3G系统中的应用(上)(09-30)
- 基于位置的服务在3G系统中的应用(下)(09-30)
- 基于GPS的车辆导航及GPRS网络监控(10-02)
- 便携时代风起云涌,Wi-Fi携手微型硬盘引领潮流(11-18)
- TFT-LCD在GPS导航仪中的应用(11-26)