OHL*_*ÁLÁ 1 python linux gps serial-port
之前用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
Run Code Online (Sandbox Code Playgroud)
我通过以下方式调用了该函数:
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
Run Code Online (Sandbox Code Playgroud)
但我没有收到任何东西。
我如何在 Ubuntu 下做同样的事情?如何从com端口读取GPS数据?
好的!
这段代码非常丑陋和陈旧 我在 2006 年做了那个,我是一个初学者和天真。
现在宝贝步骤!
使用命令 dmesg 或检查您的控制台消息以了解您的 GPS 连接了哪个 USB 设备。在我的情况下是 USB0
之后玩这个代码
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"
Run Code Online (Sandbox Code Playgroud)
当然你必须调用函数;) 请不要忘记。
记住 gps 总是在发送数据和通信。
出于教育目的,请执行以下操作:在 ser.readline() 之后打印行
所以你不仅可以看到经纬度坐标,还可以看到整个数据。
请记住,USB GPS 只是一个花哨的串行设备;) 这段代码非常简单,我相信您会理解并编写出更好的代码/程序。
| 归档时间: |
|
| 查看次数: |
16062 次 |
| 最近记录: |