1

以前、comポートからGPSデータを読み取るためにwin7を使用しました。これから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データを読み取るにはどうすればよいですか?

4

3 に答える 3

5

Ok!

このコードは VEEERY 醜くて古い 2006 年に私は初心者でナイーブでした。

さあ、ベイビーステップ!

  1. コマンド dmesg を使用するか、コンソール メッセージを確認して、どの USB デバイスが GPS に接続されているかを確認します。私の場合、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 は常にデータを送信し、通信していることを忘れないでください。

教育目的で : print line after ser.readline() を実行します

そのため、緯度と経度の座標だけでなく、データ全体を見ることができます。

USB GPS は単なる凝ったシリアル デバイスであることを忘れないでください ;) このコードは非常にシンプルであり、理解して、はるかに優れたコード/プログラムを作成できると確信しています。

于 2012-10-16T09:27:17.997 に答える
3

プログラムで /dev/ttyUSB0 を開きません。GPS モジュールはどのように接続されていますか?

あなたがするとどうなりますか:

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

コンソールで?

于 2012-10-16T09:09:09.877 に答える
1

おそらく、GPS が属するグループに自分自身を追加する必要があります。これは非常に遅く投稿されましたが、最近 Linux で USB GPS パックを構成しようとしsudo adduser -aG USERMAME dialoutましたが、ターミナルで行う必要がありました。これは、GPS が属するグループ (ダイヤルアウト) にユーザーを追加するだけです。グループがわからない場合は、/dev(ターミナルで) cd して ll と入力します (または、それが機能しない場合は ls -Flh)。これにより、すべての権限とグループが表示されます。特に興味深いコラムが 1 つあります。これは最後の列の 1 つです (最後から 3 番目だと思います -- 申し訳ありませんが、私は現在 Windows を使用しています)、「dialout」と呼ばれるリストに 6 つまたは 7 つの項目が表示される場合があります。ファイル (USB) がそこに表示される場合、それがグループです。それ以外の場合は、グループと自分自身を探してsudo adduser...ください。

最初に必ずログアウトしてから、再度ログインした後、ターミナルに再度移動してcat /dev/ttyACM0. それでも何も表示されない場合は、情報をダンプする正しいレート (ボーレート) を構成して伝える必要があります。したがって、ボーレートを4800に設定する(他の誰かが述べたように)stty -F /dev/ttyACM0 4800と入力します。正しいボーレートをグーグルで検索する必要がありますが、最後のコマンドは基本的に、このファイルを取得して(-F)、このレート(4800)で話してください。

USB GPSパックをlinux-mintで動作させるのに確かに問題があったので、これが誰かの役に立てば幸いです。すべての Linux ユーザーの幸運を祈ります (私は最近改宗した者です)。:D

于 2014-08-18T02:02:33.730 に答える