GPSD无法在启动时正常启动

时间:2018-11-13 08:26:06

标签: python raspberry-pi raspbian rc gpsd

我正在使用Raspberry PI Zero W(Raspbian NOOBS v2.9.0)

  • GPS模块是Neo 6M GPS模块 https://www.amazon.it/ILS-navigazione-satellitare-posizionamento-Arduino/dp/B07911Z266/ref=sr_1_46?ie=UTF8&qid=1542095676&sr=8-46&keywords=gps+raspberry+pi

  • 我已经使用以下命令安装了GPSD

    sudo apt-get install gpsd gpsd-clients python-gps
    
  • 我已经启用了硬件串行端口,并使用raspi-config禁用了串行控制台
  • 我对文件/ etc / default / gpsd进行了如下编辑:

    START_DAEMON="true"
    GPSD_OPTIONS="/dev/ttyS0"
    DEVICES=""
    USBAUTO="false"
    GPSD_SOCKET="/var/run/gpsd.sock"
    
  • 我在/etc/rc.local中添加了以下几行(在“ exit 0”之前)

    sudo gpsd /dev/ttyS0 -F /var/run/gpsd.sock
    sudo python /home/pi/code.py
    
  • 在code.py中,我正在运行以下代码:

    import os
    import sys
    from gps import *
    import threading
    from threading import Thread
    
    class GpsPoller(threading.Thread):
    
        # object needed to obtain GPS data
        gpsd = None
    
        def __init__(self):
            print "Initializing GPS poller..."
            global gpsd         
    
            threading.Thread.__init__(self)
            gpsd = gps(mode=WATCH_ENABLE)
            self.current_value = None
            self.running = True
    
        def run(self):
            print "Starting GPS loop..."
            global gpsd
    
            while self.running:
    
                # get the next set of data
                gpsd.next()
    
                # clear screen
                os.system("clear")
    
                print
                print 'GPS'
                print
                print '----------------------------------------'
                print 'latitude    ' , gpsd.fix.latitude
                print 'longitude   ' , gpsd.fix.longitude
                print 'time (utc)     ' , gpsd.utc,' + ', gpsd.fix.time
                print 'altitude (m)' , gpsd.fix.altitude
                print 'eps           ' , gpsd.fix.eps
                print 'epx           ' , gpsd.fix.epx
                print 'epv           ' , gpsd.fix.epv
                print 'ept           ' , gpsd.fix.ept
                print 'speed (m/s)' , gpsd.fix.speed
                print 'mode      ' , gpsd.fix.mode
                print '----------------------------------------'
                print
    
    gpsp = GpsPoller()
    gpsp.run()
    
  • 我已使用以下命令在启动时禁用了GPSD服务(以防止系统启动它并使该任务由rc.local完成):

    sudo systemctl stop gpsd.socket
    sudo systemctl disable gpsd.socket
    

结果是,当我打开Rpi的电源时,代码和gpsd守护程序可以正常启动,但无法获取数据,如果我随后杀死python代码并手动启动它,则可以正常工作。

1 个答案:

答案 0 :(得分:0)

我的RPi-Zw遇到了同样的问题,不知道是什么问题。我已经尝试了互联网上描述的所有技巧,但没有结果,gpsd只能手动启动。 最后,我从一个干净的映像开始,安装了gpsd,并按照 https://wiki.dragino.com/index.php?title=Getting_GPS_to_work_on_Raspberry_Pi_3_Model_B 并在 /etc/rc.local 中添加了 service gpsd start ,它可以正常工作。立即使用 cgps -s 进行检查。