Arbeiten mit GPS in Python für Raspberry Pi 3

Dies ist ein Memo über das GPS-Modul in Python von Raspberry Pi3. Die OS-Version von Raspberry Pi 3 ist

~~Raspbian GNU/Linux 8.0 (jessie)~~ Raspbian GNU / Linux 9.4 (Stretch) (behoben am 5. Oktober 2018)

ist. Raspberry Pi3 + GPS

GPS-Modul

Für das GPS-Modul habe ich Akizuki Denshis "GPS Receiver Kit 1 kompatibel mit" Michibiki "mit PPS-Ausgang" verwendet.

Dieses GPS-Modul sendet die empfangenen GPS-Daten seriell aus. Es gibt zwei Möglichkeiten, seriell mit Raspberry Pi 3 zu kommunizieren: über den USB-Anschluss und über den GPIO-Pin. Wenn Sie den USB-Anschluss verwenden, ist ein serielles USB-Konvertierungsmodul erforderlich, daher habe ich diesmal den GPIO-Pin verwendet. Verbinden Sie den Raspberry Pi 3 und das GPS-Modul wie folgt.

Raspberry Pi3 GPS-Modul
04(5v) 5V
06(Ground) GND
08(TXD0) RXD
10(RXD0) TXD

Ich verwende keinen GPS 1PPS-Pin, daher verbinde ich nichts.

Serielle Kommunikation mit Python auf Raspberry Pi 3

Aktivieren Sie für die serielle Kommunikation mit Raspberry Pi3 serial in raspi-config und stellen Sie ein, dass serial nicht als Konsole verwendet wird.

Serielle Freigabe mit raspi-config

Starten Sie raspi-config und aktivieren Sie serial wie folgt:

pi$ sudo raspi-config

Wählen Sie "5 Schnittstellenoptionen" und dann "P6 Seriell". Wählen Sie "Ja" für "Möchten Sie, dass auf eine Anmeldeshell über die Seriennummer zugegriffen werden kann?", "Fertig stellen" und "Neustart".

pi$ sudo reboot

Ein Gerät namens / dev / serial0 wird erstellt.

pi$ ls /dev/se*
/dev/serial0  /dev/serial1

Ändern Sie /boot/cmdline.txt

Ändern Sie /boot/cmdline.txt, um serial0 so festzulegen, dass es nicht als Konsole verwendet wird.

pi$ cat /boot/cmdline.txt 
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

Löschen Sie "console = serial0,115200" im Editor und starten Sie neu.

pi$ sudo reboot

Installieren Sie das serielle Python-Modul

Installieren Sie das serielle Python-Modul. (5. Oktober 2018: Von Python-Seriell zu Pyserial geändert)

pi$ pip install pyserial

Wenn Sie pyenv nicht verwenden, installieren Sie es mit pip3.

Jetzt können Sie Python auf Raspberry Pi 3 für die serielle Kommunikation verwenden. Wenn Sie das GPS-Modul an Raspberry Pi3 anschließen, starten Sie Python wie folgt und überprüfen Sie, ob die GPS-Daten gelesen werden können.

pi$ python3
>>> import serial
>>> s = serial.Serial('/dev/serial0', 9600, timeout=10)
>>> print(s.readline())
b'\x00\x00\xc0\x00\xfe\x00pK&&KLN\xcb14,302,,06,08,254,27,30,07,230,29*70\r\n'
>>> print(s.readline())
b'$GPGSV,4,4,14,23,05,150,19,14,04,054,*74\r\n'
>>>

Die erste readline () besteht aus halbfertigen Daten, aber die zweite und nachfolgende readline () scheint in der Lage zu sein, GPS-Daten zu lesen.

Python GPS-Bibliothek

Die vom GPS-Modul gesendeten Daten sind Zeichenfolgen im Format NMEA-0183. Für das Datenformat von NMEA-0183 ist die Site "NMEA 0183 Sätze Datenanalyse" leicht zu verstehen.

Das GPS-Modul empfängt Signale von GPS-Satelliten und zeigt Informationen wie Zeit, Breite, Länge, Höhe über dem Meeresspiegel, Anzahl und ID der zur Positionierung verwendeten Satelliten sowie die Position (Azimut und Höhe) jedes Satelliten im NMEA-0183-Format an. Es wird als Zeichenfolge von gesendet.

Es gibt eine Python-Bibliothek, die diese Zeichenfolgendaten in programmgesteuert benutzerfreundliche Daten konvertiert. Eine Suche im Internet ergab micropyGPS und pynmea2.

micropyGPS ist eine GPS-Datenanalysebibliothek, die unter Python 3.x und MicroPython ausgeführt wird. Wenn Sie GPS-Daten eingeben, werden diese analysiert und Daten zum GPS-Objekt hinzugefügt und aktualisiert. Informationen wie Zeit, Breite, Länge, Anzahl der zur Positionierung verwendeten Satelliten und ID können als GPS-Objektdaten abgerufen werden. Die Dokumentation ist auch solide.

pynmea2 scheint GPS-Daten nur Zeile für Zeile zu analysieren, und die Dokumentation sieht schlecht aus.

Deshalb habe ich mich für micropyGPS als Bibliothek entschieden. Um es zu verwenden, laden Sie einfach micropyGPS.py von Github herunter und legen Sie es in dem Verzeichnis ab, in dem Python gestartet wird.

Python-Programm

Das Python-Programm, das GPS-Daten liest, sieht folgendermaßen aus: Lesen Sie die Daten vom GPS-Modul Das Hinzufügen und Aktualisieren von Daten zum GPS-Objekt wird als Thread ausgeführt und die Daten werden alle 3 Sekunden ausgegeben.

Der Zeitunterschied in der Zeitzone (+9 Stunden in Japan) und das Ausgabeformat für Längen- und Breitengrad werden beim Erstellen eines MicroGPS-Objekts als Argumente angegeben. Es scheint, dass die folgenden Formate als Ausgabeformat angegeben werden können.

'ddm'Dezimalgrad, Minute(40° 26.767′ N)
'dms'Dezimalgrade, Minuten, Sekunden(40° 26′ 46″ N)
'dd'Dezimalgrad(40.446° N)
import serial
import micropyGPS
import threading
import time

gps = micropyGPS.MicropyGPS(9, 'dd') #Erstellen Sie ein MicroGPS-Objekt.
                                     #Argumente sind Zeitzonen-Zeitdifferenz und Ausgabeformat

def rungps(): #Lesen Sie das GPS-Modul und aktualisieren Sie das GPS-Objekt
    s = serial.Serial('/dev/serial0', 9600, timeout=10)
    s.readline() #Verwerfen Sie die erste Zeile, da sie möglicherweise halbfertige Daten liest
    while True:
        sentence = s.readline().decode('utf-8') #Lesen Sie GPS-Daten und konvertieren Sie sie in eine Zeichenfolge
        if sentence[0] != '$': #Der Anfang ist'$'Wenn nicht, werfen Sie es weg
            continue
        for x in sentence: #Analysieren Sie die gelesene Zeichenfolge und fügen Sie dem GPS-Objekt Daten hinzu und aktualisieren Sie diese
            gps.update(x)

gpsthread = threading.Thread(target=rungps, args=()) #Erstellen Sie einen Thread, um die obige Funktion auszuführen
gpsthread.daemon = True
gpsthread.start() #Starten Sie einen Thread

while True:
    if gps.clean_sentences > 20: #Ausgabe, wenn bis zu einem gewissen Grad die richtigen Daten gesammelt wurden
        h = gps.timestamp[0] if gps.timestamp[0] < 24 else gps.timestamp[0] - 24
        print('%2d:%02d:%04.1f' % (h, gps.timestamp[1], gps.timestamp[2]))
        print('Längengrad Breitengrad: %2.8f, %2.8f' % (gps.latitude[0], gps.longitude[0]))
        print('Über dem Meeresspiegel: %f' % gps.altitude)
        print(gps.satellites_used)
        print('Satellitennummer: (Höhenwinkel,Richtungswinkel,SN-Verhältnis)')
        for k, v in gps.satellite_data.items():
            print('%d: %s' % (k, v))
        print('')
    time.sleep(3.0)

Als ich das Programm ausführte, erhielt ich das folgende Ergebnis. Der Breiten- und Längengrad unterhalb des Dezimalpunkts ist ausgeblendet.

14:02:19.0
Längengrad Breitengrad: 35.********, 139.********
Über dem Meeresspiegel: 51.900000
Satelliten positionieren: [17, 28, 6, 3, 193, 1, 22, 8]
Satellitennummer: (Höhenwinkel,Richtungswinkel,SN-Verhältnis)
193: (59, 173, 40)
3: (71, 124, 24)
6: (13, 259, 27)
1: (49, 42, 16)
8: (15, 115, 21)
42: (48, 170, 34)
11: (40, 69, None)
14: (4, 47, None)
17: (42, 317, 15)
19: (20, 307, None)
22: (56, 66, 21)
23: (10, 145, None)
28: (63, 248, 38)
30: (3, 224, 16)

Die Linie nach der "Satellitennummer" ist die Satellitennummer, der Höhenwinkel, der Azimutwinkel und das SN-Verhältnis des erfassten Satelliten. Der Satellit Nummer 193 ist "Michibiki, der erste Quasi-Zenit-Satellit".

Recommended Posts

Arbeiten mit GPS in Python für Raspberry Pi 3
Arbeiten mit Sensoren in Mathematica auf Raspberry Pi
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
GPS-Tracking mit Raspeye 4B + BU-353S4 (Python)
Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Adafruit Python BluefruitLE arbeitet mit Raspeye.
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
GPGPU mit Raspberry Pi
Pigpio auf Himbeer-Pi
DigitalSignage mit Raspberry Pi
Cython auf Raspberry Pi
Discord Bot Himbeere Pi Null mit Python [Hinweis]
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Ich habe L-Chika mit Razpai 4 (Python Edition) ausprobiert.
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Genießen Sie die elektronische Arbeit mit GPIO von Raspberry Pi
Schalten Sie Ihren PC mit Himbeer-Pi ein / aus
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Messen Sie die CPU-Temperatur von Raspeye mit Python
Erkennen Sie analoge Signale mit dem A / D-Wandler mithilfe von Python auf Raspberry Pi 3!
Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten!
Versuchen Sie, den RSS-Feed von arXiv mit Python von Raspeye auf Twitter zu twittern
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Mutter pflanzt mit Raspberry Pi
Führen Sie die LED-Matrix interaktiv mit Raspberry Pi 3B + auf Slackbot aus
Betreiben Sie LibreOffice mit Python
Python: Arbeiten mit Firefox mit Selen
Umgang mit Sounds in Python
Steuern Sie bürstenlose Motoren mit GPIO von Raspberry Pi Zero
Raspeye + Python + OpenGL-Memo
Himbeere pi 1 Modell b, Python
Installieren Sie pyenv auf Raspberry Pi, um Python zu verwalten
Ausgabe auf "7 Segment LED" mit Python mit Raspberry Pi 3!
Pyenv auf Raspberry Pi eingeführt
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung
Verwenden Sie NeoPixel mit Himbeerkuchen
Zeigen Sie das Bild der USB-Kamera mit OpenCV von Python mit Raspeye an
Lassen Sie uns GPIO von Raspeye mit Python CGI betreiben
Installieren Sie OpenCV4 auf Raspberry Pi 3
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
VScode Intelligence funktioniert unter Raspeye OS 64bit nicht! (Python)
Aktualisieren Sie Raspberry Pi Python mit pyenv auf 3.7 oder höher
Führen Sie das AWS IoT Device SDK für Python auf Raspberry Pi aus
Python-Anfänger öffnet und schließt die ineinandergreifende Kamera mit Raspberry Pi
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
Zugriff auf Google Spreadsheets Verwenden von Python mit Himbeer-Pi (für sich selbst)
Führen Sie den Python-Beispielcode BNO055 mit I2C (Raspberry Pi 3B) aus.
SSD 1306 OLED kann mit Raspeye + Python verwendet werden (Hinweis)
getrpimodel: Erkennen Sie das Himbeer-Pi-Modell (A, B, B +, B2, B3 usw.) mit Python
Verbinden Sie Raspberry Pi mit "Python" mit der Alibaba Cloud IoT Platform