在树莓派上使用GPS模块

GPSD介绍

GPSD是一个Linux下的一个守护进程,用以侦听来自GPS接收器的位置等信息,并将这些位置信息转换成一种简化的格式。
GPSD支持二十多种不同GPS输出格式的GPS接收机,例如NMEA、Ashtech、AIVDM、iTalk Binary、Trimble TSIP、RTCM、uBlox UBX binary等。将收到的packet解析之后,可以通过D-BUS、共享内存和socket(默认端口为:2947)方式输出。
GPSD packet中同时提供了多种客户端,例如gpsctl、gpsmon、gpspipe等,可以根据需要进行使用。
gpsd 是通过串行或USB端口监视连接到主机的一个或多个GPS或AIS接收器的服务守护程序,使得可以在主机的TCP端口2947上查询传感器的位置/路线/速度的所有数据。
使用gpsd多个位置感知客户端应用程序可以共享对支持的传感器的访问,而无需争用或丢失数据。而且,gpsd响应大多数GPSs发出的NMEA 0183格式的查询更容易解析。该gpsd分发包括可链接的C服务库,C ++包装类和一个Python模块,开发者gpsd应用程序可以使用它来封装所有的通信gpsd。
GPSD在移动嵌入式系统中无处不在。它是Android手机上的地图服务的基础。无人机,机器人潜艇和无人驾驶汽车无处不在。最近几代载人飞机,海洋导航系统和军车越来越普遍。
http://www.catb.org/gpsd/

在树莓派上测试GPS模块:

1、树莓派一个,GPS模块一个,USB转串口TTL模块一个。
2、使用ttyUSB0而不是使用树莓派的板载串口ttyAMA0,因为ttyUSB0串口使用起来更方便,可以随意的插拔,还可以在电脑、手机等其他设备上使用。
3、连接好GPS线,树莓派上插上USB串口,查看设备名
ls /dev/ttyUSB*
其中”ttyUSB0”就是GPS模块的设备名。
注:如果你的串口gps的设备名不是“ttyUSB0”,就请用你自己设备名替换。
4、安装gpsd相关的软件和库
sudo apt-get install gpsd gpsd-clients python-gps
5、使用cat命令查看gps模块输出
cat /dev/ttyUSB0
6、设置gpsd的gps数据源是gps模块的设备名ttyUSB0”
sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
7、使用gpsd软件,显示gps信息
cgps -s
注:请将gps置于室外,或者窗户边,有利于gps定位,如果长时间显示“NO FIX”的状态,请移动gps的位置,并且使用下面命令重启gps模块:
sudo killall gpsd
sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
8、用python3测试GPS,安装gps3库
pip3 install gps3
https://pypi.python.org/pypi/gps3
9、测试代码gpstest.py

#!/usr/bin/env python3
# coding=utf-8

from gps3 import agps3
#GPSDSocket creates a GPSD socket connection & request/retrieve GPSD output.
gps_socket = agps3.GPSDSocket()
#DataStream unpacks the streamed gpsd data into python dictionaries.
data_stream = agps3.DataStream()
gps_socket.connect()
gps_socket.watch()
for new_data in gps_socket:
    if new_data:
        data_stream.unpack(new_data)
        print('Altitude = ', data_stream.alt)
        print('Lat      = ', data_stream.lat)  
        print('Lon      = ', data_stream.lon)
        print('Speed    = ', data_stream.speed)

10、python3 gpstest.py
如果不能运行,请用下面命令重启gps模块:
sudo killall gpsd
sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
11、也可以选择其他python库测试,比如gpsd-py3
pip3 install gpsd-py3
12、gpsd-py3测试代码

import gpsd

# Connect to the local gpsd
gpsd.connect()

# Connect somewhere else
gpsd.connect(host="127.0.0.1", port=2947)

# Get gps position
packet = gpsd.get_current()

# See the inline docs for GpsResponse for the available data
print(packet.position())

你可能感兴趣的:(Linux,Python)