Linux下如何读取GPS数据?

问题描述 投票:0回答:4

我之前用过win7从com口读取GPS数据。从现在开始,我想在Ubuntu下读取数据,但相同的代码不起作用。这是我的代码:

import serial, sys, time, threading
from datetime import datetime, timedelta    

class MeasureModule():
    def __init__(self, port, baudrate, sync_time=0, sync_nr=0):
        self.port = port;
        self.baudrate = baudrate;

    def start(self):
        try:
            self.serial = serial.serial_for_url(self.port, self.baudrate, timeout=1)
        except AttributeError:            
            self.serial = serial.Serial(self.port, self.baudrate, timeout=1)
        start = time.clock()
        while(time.clock()-start<11):     
            data  = self.readline()        
            print(data)

        self.stop();                    

    def stop(self):
        self.serial.close()   

    def readline(self, timeout=1, endline='\n'):
        buff='';
        try:            
            tic = time.clock()
            ch = self.character(self.serial.read(1))

            # you can use if not ('\n' in buff) too if you don't like re
            while ((time.clock() - tic) < timeout) and (not ch in endline):
                buff += ch                
                ch = self.character(self.serial.read(1))

        except serial.SerialException, e:
            return buff

        return buff

    def character(self,b):
        if sys.version_info >= (3, 0):
            return b.decode('latin1')
        else:
            return b

我通过以下方式调用该函数:

for i in range (0,4):
    try:    
        print "Starting measurement /dev/ttyACM%d" % i
        gs = GPSModule('/dev/ttyACM%d' % i, 4800, 1, 1)
        gs.start()
    except:
        print "Unable to connect"

run@FXR:/dev$ dmesg  | grep tty
[    0.000000] console [tty0] enabled
[    4.764464] cdc_acm 2-1.6:1.1: ttyACM0: USB ACM device
[    4.767620] cdc_acm 2-1.6:1.3: ttyACM1: USB ACM device
[    4.771525] cdc_acm 2-1.6:1.9: ttyACM2: USB ACM device
[    4.808622] usb 2-1.4.4: pl2303 converter now attached to ttyUSB0

但我没有收到任何东西。

如何在 Ubuntu 下做同样的事情?如何从 com 端口读取 GPS 数据?

python linux gps serial-port
4个回答
6
投票

好的!

这段代码非常丑陋和陈旧,我在 2006 年就这样做了,当时我还是一个初学者,而且很天真。

现在迈出小步!

  1. 使用命令 dmesg 或检查控制台消息以了解 GPS 连接的是哪个 USB 设备。在我的例子中是 USB0

  2. 之后使用此代码


import serial
import socket

ser = serial.Serial('/dev/ttyUSB0', 4800, timeout=1)
latitude = ''
longitude = ''
def readgps(latitude,longitude):
    """Read the GPG LINE using the NMEA standard"""
    while True:
        line = ser.readline()
        if "GPGGA" in line:
            latitude = line[18:26] #Yes it is positional info for lattitude
            longitude = line[31:39] #do it again
            return(latitude,longitude)
    print "Finished"

当然你必须调用该函数;)请不要忘记。

记住 GPS 始终在发送数据和通信。

出于教育目的,请执行以下操作: 在 ser.readline() 之后打印行

这样您不仅可以看到整个数据,而不仅仅是纬度和经度坐标。

请记住,USB GPS 只是一个奇特的串行设备;) 这段代码非常简单,我相信您会理解并编写出更好的代码/程序。


3
投票

您没有用您的程序打开/dev/ttyUSB0。您的 GPS 模块是如何插入的?

如果你这样做会发生什么:

stty -F /dev/ttyACM0 4800
cat /dev/ttyACM0

在控制台中?


2
投票

您可能需要将自己添加到 GPS 所属的组中。这篇文章发布得很晚,但我最近尝试在 Linux 上配置 USB GPS 冰球,我必须在终端中执行

sudo adduser -aG USERMAME dialout
。这只是将用户添加到 GPS 所在的组(拨出)中。如果您不知道该组,请 cd 到
/dev
(在终端中)并输入 ll (如果不起作用,则输入 ls -Flh)这将显示所有权限和组。有一个专栏特别令人感兴趣;这是最后一栏(我想是倒数第三栏——抱歉,我现在使用的是 Windows),您可能会在列表中看到大约六到七个名为“dialout”的项目。如果你的文件——你的USB——出现在那里,那么这就是该组。否则,只需寻找小组和自己
sudo adduser...

确保您先注销,然后在重新登录后再次转到终端并输入

cat /dev/ttyACM0
。如果您仍然看不到任何内容,那么您需要配置并告诉它转储其信息的正确速率(波特率);因此,输入(正如其他人提到的)
stty -F /dev/ttyACM0 4800
,将波特率配置为 4800。您应该在 google 上搜索正确的波特率,但最后一个命令实质上是说,获取此文件(-F)并以该速率与我交谈( 4800)。

我希望这对某人有帮助,因为我在让我的 USB GPS 圆盘在 linux-mint 上工作时确实遇到了一些麻烦。祝所有 Linux 用户好运(我是最近才皈依的)。 :D


0
投票

这是我在 Ubuntu 18.04 下使用 Globalsat BU-353N5 USB GPS 设备测试并使用 python 3.6 的一些代码


import serial

ser = serial.Serial('/dev/ttyUSB0',4800,timeout=5)

while 1:
    line = ser.readline().decode()
    splitline = line.split(',')

    if splitline[0] == '$GNGGA':
        latitude = line[18:29]
        longitude =line[31:42]
        print(line)
        print('latitude = ',latitude)
        print('longitude =',longitude)
        print('How to read : 3824.3139  means 38 deg 24.3139 mins')
       break
© www.soinside.com 2019 - 2024. All rights reserved.