Ich habe einen USB-Empfänger zur Hand, also werde ich ihn an eine Raspeltorte anschließen und meinen aktuellen Standort ermitteln. [BU-353S4](https://www.amazon.co.jp/GlobalSat-BU-353S4-GLOBALSAT-BU-353S4-SiRFstarIV%E6%90%AD%E8%BC%89-GPS%E3%83% AC% E3% 82% B7% E3% 83% BC% E3% 83% 90USB-% E6% 9D% B1% E4% BA% AC% E9% 80% 9A% E5% 95% 86% E6% AD% A3 % E8% A6% 8F% E8% B2% A9% E5% A3% B2 / dp / B00HZCQYLU) wurde verwendet.
Obwohl es sich um eine analoge Methode handelt, führen Sie den folgenden Befehl vor und nach dem Einsetzen und Entfernen des GPS-Empfängers aus, um das Zielgerät zu identifizieren.
$ ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4
Dieses Mal gehen wir davon aus, dass es als "/ dev / ttyUSB4" erkannt wird.
gps.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import serial
#Gerätespezifikation
DEV = '/dev/ttyUSB4'
#Bruchnotation von Breiten- und Längengrad ⇒ Umrechnungsfunktion in Frequenznotation
def convert(x):
result = (float(x[0:-7])+(float(x[-7:])/60))
return result
#Eine Funktion, die den erforderlichen Wert als Zeichenfolge zurückgibt
def get_str(x):
result =""
if (x[2] == "A") and (x[2] != ""):
result += "state:"+"ok "
elif (x[2] == "V") and (x[2] != ""):
result += "state:"+"alert "
else:
result += "state:"+"no data "
if x[7] != "":
result += 'speed:'+ '%.1f' % (float(x[7])*1.852) + "km/h "
else:
result += "speed:"+"no data "
if (x[4] == "N") and ( x[4] != "" ):
result += "north latitude:" + '%.4f' % convert(x[3]) +' '
elif (x[4] == "S") and ( x[4] != "" ):
result += "south latitude:" + '%.4f' % convert(x[3]) +' '
else:
result += "latitude:"+"no data "
if (x[6] == "E") and ( x[6] != ""):
result += "east longitude:" + '%.4f' % convert(x[5]) +' '
elif (x[6] == "W") and ( x[6] != ""):
result += "west longitude" + '%.4f' % convert(x[5]) +' '
else:
result += "logitude:"+"no data "
return result
#Prüfsummenüberprüfung
def checksum_verify(c_sum,data):
c_data = '0x00'
for i in range(1,len(data)-3):
c_data = hex(int(c_data,16) ^ int(hex(ord(data[i])),16))
if int(c_sum,16) == int(c_data,16):
return True
else:
return False
#Hauptschleife
#Verarbeiten Sie nur den GPRMC-Wert. Verarbeiten Sie nicht, wenn die Anzahl der Elemente dieses Werts weniger als 13 beträgt und er nicht gut erfasst wird
try:
#Holen Sie sich seriell
sr = serial.Serial(DEV, 4800)
while 1:
#Zeilenvorschubcode ausgeschlossen
tmp = sr.readline().rstrip()
#Prüfsumme prüfen
if checksum_verify(tmp[-2:],tmp):
tmp2 = tmp.split(",")
#Nur GPRMC verarbeiten
if (tmp2[0] == '$GPRMC'):
line = get_str(tmp2)
print 'OK:'+tmp
print line
time.sleep(0.5)
else:
print 'NG:'+tmp
finally:
print 'serial_close'
sr.close()
Jeder Wert von GPRMC ist wie folgt
tmp2[1]UTC-Zeit Japanische Standardzeit-9 Stunden
tmp2[2]Status A ist normal V ist Warnung
tmp2[3]Breite(Bruchnotation)
tmp2[4](N)Nördlicher Breitengrad(S)Südlicher Breitengrad
tmp2[5]Längengrad(Bruchnotation)
tmp2[6](E)Osten(W)Ist es Nishikei?
tmp2[7]Bewegungsgeschwindigkeitsknoten
tmp2[8]Wahre Orientierung
tmp2[9]Vereinbarung Weltzeit(UTC)TTMJJ-Format
tmp2[12]Prüfsumme
※ Bewegungsgeschwindigkeit Knoten ist 1,852 mal und km / h
※ Prüfsumme
XOR die Zeichen zwischen " Wenn oben,
GPRMC,034357.279,V,,,,,,,020117,,,N`
Ist das Berechnungsziel
Es ist unpraktisch, dass es je nach angeschlossenem Gerät und Umgebung jedes Mal in "/ dev / ttyUSB0" oder "/ dev / ttyUSB4" wechselt. Es kann nicht im Autostart-Skript verwendet werden. In einem solchen Fall ist dies eine Gegenmaßnahme.
Wenn Sie sich für einen USB-Anschluss entschieden haben, überprüfen Sie die folgenden Informationen und verwenden Sie ihn.
$ ls -al /dev/serial/by-path
total 0
drwxr-xr-x 2 root root 140 Jan 2 01:30 .
drwxr-xr-x 4 root root 80 Jan 1 20:03 ..
lrwxrwxrwx 1 root root 13 Jan 2 01:30 platform-3f980000.usb-usb-0:1.3:1.0-port0 -> ../../ttyUSB4
lrwxrwxrwx 1 root root 13 Jan 1 20:03 platform-3f980000.usb-usb-0:1.4:1.0-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 Jan 1 20:03 platform-3f980000.usb-usb-0:1.4:1.1-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Jan 1 20:03 platform-3f980000.usb-usb-0:1.4:1.2-port0 -> ../../ttyUSB2
lrwxrwxrwx 1 root root 13 Jan 1 20:03 platform-3f980000.usb-usb-0:1.4:1.3-port0 -> ../../ttyUSB3
Wenn das Zielgerät "/ dev / ttyUSB4" ist, beheben Sie es wie folgt
#Gerätespezifikation
DEV = '/dev/ttyUSB4'
↓
DEV = '/dev/serial/by-path/platform-3f980000.usb-usb-0:1.3:1.0-port0'
Informationen zur udev-Regel finden Sie unter Oracle Über die udev-Regel.
Führen Sie den folgenden Befehl aus, um die Informationen zu überprüfen (wenn / dev / ttyUSB4
das Zielgerät ist).
udevadm info -a -p $(sudo udevadm info -q path -n /dev/ttyUSB4)
Überprüfen Sie Folgendes aus dem angezeigten
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3':
KERNELS=="1-1.3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{devpath}=="1.3"
ATTRS{idVendor}=="067b"
ATTRS{speed}=="12"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{busnum}=="1"
ATTRS{devnum}=="21"
ATTRS{configuration}==""
ATTRS{bMaxPower}=="100mA"
ATTRS{authorized}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bNumConfigurations}=="1"
ATTRS{maxchild}=="0"
ATTRS{bcdDevice}=="0400"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{quirks}=="0x0"
ATTRS{version}==" 1.10"
ATTRS{urbnum}=="65169"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Prolific Technology Inc. "
ATTRS{removable}=="removable"
ATTRS{idProduct}=="2303"
ATTRS{bDeviceClass}=="00"
ATTRS{product}=="USB-Serial Controller D"
Extrahieren Sie die folgenden drei Punkte
ATTRS{idProduct}=="2303"
ATTRS{idVendor}=="067b"
ATTRS{product}=="USB-Serial Controller D"
Erstellen Sie eine Datei wie "70-bu353s4.rules" unter "/ etc / udev / rules.d" und geben Sie die folgenden Informationen ein.
/ etc / udev / rules.d
beginnen und dupliziert werden, geben Sie eine eindeutige Nummer an.70-bu353s4.rules
ATTRS{idProduct}=="2303",ATTRS{idVendor}=="067b",ATTRS{product}=="USB-Serial Controller D",SYMLINK+="bu353s4"
Legen Sie nach dem Erstellen der Datei den GPS-Empfänger ein und entfernen Sie ihn
Jetzt können Sie mit / dev / bu353s4
eine Verbindung zum GPS-Empfänger herstellen. Korrigieren Sie dies wie folgt
#Gerätespezifikation
DEV = '/dev/ttyUSB4'
↓
DEV = '/dev/bu353s4'
Recommended Posts