kjg*_*ory 7 python gps gpsd python-3.x raspberry-pi2
我正在使用我的Raspberry Pi 2使用python2.7.9,GPSD和python-gps软件包进行adafruit终极GPS突破.我通过串口成功获得1Hz的gps更新.
据称这个设备能够进行10Hz更新,我想启用它.根据数据表(参见下面的代码段),可以通过串行命令设置.
我的问题是我找不到足够的python-gps模块或GPSD文档,它会告诉我如何用python脚本连续向GPS发送命令.有人能指出我正确的方向吗?
我刚刚和你的同一个家庭拿起一个gps.(MTK)他们使用$PMTK控制字符串.任何搜索PMTK protocol都会提供无穷无尽的资 限制是gps本身.
对于一次性转换,标准方法是从根终端执行echo -e "\$PMTK220,200*2C\r\n" > /dev/ttyAMA0,或者在设备连接的任何地方,进行5Hz响应.该
-e flag允许解析反斜杠 $ NMEA句子的开头P 专有信息MTK NMEA数据类型220 包类型200 分组数据* 数据结束2C 校验\r\n NMEA句子结束还有脚本和其他项目可用,但都需要gpsd不能控制gps.gpsd将阻止向gps发送控制字符串.
此外,如果gpsd中有-b标志,/etc/default/gpsd则在连接时不会写入设备.它将选择一个通用的NMEA驱动程序,并且不会将任何控制字符串写入gps.
您可以在后面滑入,并使用shell中的控制字符串来操纵速率. gps将调出数据,但gpsd不会确认该速率.
看起来,gpsd 更喜欢 1秒的时间.即使gps能够更快地循环,即使你已经使用另一种方法来重新设置速率,并且这样做,也需要告知gpsd速率已经改变.
这就是gpsctl -c 0.2(没有sudo)发挥作用的地方.它捆绑在gpsd包中.
如果只有一个设备连接到gpsd,在示例中,gpsctl会将该设备更改为0.2秒的计时周期并将其传送给gpsd.时间以秒为单位.是的,它可以设置得相当慢/快,但没有伪造能力.如果它不能这样做,它就不会这样做,也不会告诉你它没有/不能,除非有致命的错误.
只要有容量,端口速度就不是问题.一次计数4800波特的人就足以在一秒钟内读取数据.它取决于有效载荷,但它适用于经验法则.在许多系统上,10Hz可能会使38400波特率默认.我试过了,没有任何破坏.
你只是想确保gpsd没有协商到9600波特,然后才能提高速度,以防万一. gpsctl -s XXXX(设置GPS发出数据包的波特率)为我返回错误.
即使没有-bgpsd默认设置中的标志,我的这个新 gps也不会保持锁定在掉电之间的更高频率更新.我必须重新发出命令.这可能是一个糟糕的电池,操作员错误,或者我不明白这个缺陷是一个不能阻止gps到达其他系统的功能.(原因-b)
这是你如何改变使用gpsd的gps的响应,或者我是怎么做的.
但是,在回答您的问题时,要通过Python使用gpsd更改gps响应的速率
import subprocess
subprocess.call(['gpsctl', '-c', '0.2']) # Digits are the time in seconds.
Run Code Online (Sandbox Code Playgroud)
试试看吧.使用gpsctl -c 0.25返回季度秒gps读数等.
为了提供两个Python gpsd 客户端演示脚本,我刚刚添加了一个gpsd设备报告刷新按键,(点击d刷新并查看新设置中的数字.)
它们用于Python 2.7-3.5 gpsd python客户端,当函数在演示脚本中找到一个home时,它看起来像这样:
def hertz(hz):
"""Change or enumerate a Faster/Slower gps refresh rate if device is able"""
from subprocess import call
inverse = str(1 / hz)
call((['gpsctl', '-c', inverse]))
Run Code Online (Sandbox Code Playgroud)