8.3 KiB
Branje GPS podatkov - Raspberry Pi
V tem delu lekcije boste dodali GPS senzor na vaš Raspberry Pi in prebrali vrednosti iz njega.
Strojna oprema
Raspberry Pi potrebuje GPS senzor.
Senzor, ki ga boste uporabili, je Grove GPS Air530 senzor. Ta senzor se lahko poveže z več GPS sistemi za hitro in natančno določanje lokacije. Senzor je sestavljen iz dveh delov - osnovne elektronike senzorja in zunanje antene, ki je povezana s tanko žico za sprejem radijskih valov s satelitov.
To je UART senzor, ki pošilja GPS podatke prek UART.
Povezava GPS senzorja
Grove GPS senzor se lahko poveže z Raspberry Pi.
Naloga - povežite GPS senzor
Povežite GPS senzor.
-
Vstavite en konec Grove kabla v vtičnico na GPS senzorju. Kabel bo šel noter samo v eno smer.
-
Ko je Raspberry Pi izklopljen, povežite drugi konec Grove kabla z UART vtičnico, označeno UART, na Grove Base hat, ki je pritrjen na Pi. Ta vtičnica je v srednji vrsti, na strani, ki je najbližje reži za SD kartico, na nasprotni strani od USB priključkov in ethernet vtičnice.
-
Postavite GPS senzor tako, da ima pritrjena antena vidljivost do neba - idealno ob odprtem oknu ali zunaj. Lažje je dobiti jasen signal, če anteni nič ne ovira.
Programiranje GPS senzorja
Raspberry Pi je zdaj pripravljen za programiranje, da uporablja pritrjen GPS senzor.
Naloga - programirajte GPS senzor
Programirajte napravo.
-
Vklopite Pi in počakajte, da se zažene.
-
GPS senzor ima 2 LED lučki - modro LED lučko, ki utripa, ko se prenašajo podatki, in zeleno LED lučko, ki utripa vsako sekundo, ko prejema podatke s satelitov. Prepričajte se, da modra LED lučka utripa, ko vklopite Pi. Po nekaj minutah bo začela utripati zelena LED lučka - če ne, boste morda morali premakniti anteno.
-
Zaženite VS Code, bodisi neposredno na Pi, bodisi se povežite prek razširitve Remote SSH.
⚠️ Če potrebujete, si lahko ogledate navodila za nastavitev in zagon VS Code v lekciji 1.
-
Pri novejših različicah Raspberry Pi, ki podpirajo Bluetooth, obstaja konflikt med serijskim priključkom, ki se uporablja za Bluetooth, in tistim, ki ga uporablja Grove UART priključek. Da to odpravite, naredite naslednje:
-
Iz terminala v VS Code uredite datoteko
/boot/config.txt
z uporabonano
, vgrajenega urejevalnika besedila v terminalu, z naslednjim ukazom:sudo nano /boot/config.txt
Te datoteke ni mogoče urejati z VS Code, saj jo morate urejati z dovoljenji
sudo
, kar pomeni povišana dovoljenja. VS Code ne deluje s temi dovoljenji. -
S puščičnimi tipkami se pomaknite na konec datoteke, nato kopirajte spodnjo kodo in jo prilepite na konec datoteke:
dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1
Kodo lahko prilepite z običajnimi bližnjicami na tipkovnici za vašo napravo (
Ctrl+v
na Windows, Linux ali Raspberry Pi OS,Cmd+v
na macOS). -
Shranite datoteko in zapustite nano s pritiskom na
Ctrl+x
. Ko vas vpraša, ali želite shraniti spremenjeni medpomnilnik, pritisnitey
, nato pritisniteenter
, da potrdite, da želite prepisati/boot/config.txt
.Če naredite napako, lahko zapustite brez shranjevanja in nato ponovite te korake.
-
Uredite datoteko
/boot/cmdline.txt
v nano z naslednjim ukazom:sudo nano /boot/cmdline.txt
-
Ta datoteka vsebuje več parov ključ/vrednost, ločenih s presledki. Odstranite vse pare ključ/vrednost za ključ
console
. Verjetno bodo videti nekako takole:console=serial0,115200 console=tty1
Do teh vnosov se lahko pomaknete s puščičnimi tipkami, nato pa jih izbrišete z običajnimi tipkami
del
alibackspace
.Na primer, če vaša izvirna datoteka izgleda takole:
console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Nova različica bo:
root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
-
Sledite zgornjim korakom, da shranite to datoteko in zapustite nano.
-
Znova zaženite Pi, nato se znova povežite v VS Code, ko se Pi ponovno zažene.
-
-
Iz terminala ustvarite novo mapo v domačem imeniku uporabnika
pi
, imenovanogps-sensor
. Ustvarite datoteko v tej mapi, imenovanoapp.py
. -
Odprite to mapo v VS Code.
-
GPS modul pošilja UART podatke prek serijskega priključka. Namestite Pip paket
pyserial
, da komunicirate s serijskim priključkom iz vaše Python kode:pip3 install pyserial
-
Dodajte naslednjo kodo v vašo datoteko
app.py
:import time import serial serial = serial.Serial('/dev/ttyAMA0', 9600, timeout=1) serial.reset_input_buffer() serial.flush() def print_gps_data(line): print(line.rstrip()) while True: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data(line) line = serial.readline().decode('utf-8') time.sleep(1)
Ta koda uvozi modul
serial
iz Pip paketapyserial
. Nato se poveže s serijskim priključkom/dev/ttyAMA0
- to je naslov serijskega priključka, ki ga Grove Pi Base Hat uporablja za svoj UART priključek. Nato počisti vse obstoječe podatke iz te serijske povezave.Nato je definirana funkcija
print_gps_data
, ki izpiše vrstico, ki ji je poslana, na konzolo.Nato koda neskončno zanka, bere toliko vrstic besedila, kot jih lahko, iz serijskega priključka v vsaki zanki. Za vsako vrstico pokliče funkcijo
print_gps_data
.Ko so vsi podatki prebrani, zanka počiva 1 sekundo, nato poskusi znova.
-
Zaženite to kodo. Videli boste surov izhod iz GPS senzorja, nekaj takega:
$GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $BDGSA,A,1,,,,,,,,,,,,,,,*0F $GPGSV,1,1,00*79 $BDGSV,1,1,00*68
Če dobite eno od naslednjih napak pri ustavitvi in ponovnem zagonu kode, dodajte blok
try - except
v vašo zanko while.UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: invalid continuation byte
while True: try: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data() line = serial.readline().decode('utf-8') # There's a random chance the first byte being read is part way through a character. # Read another full line and continue. except UnicodeDecodeError: line = serial.readline().decode('utf-8') time.sleep(1)
💁 To kodo lahko najdete v mapi code-gps/pi.
😀 Vaš program za GPS senzor je bil uspešen!
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za strojno prevajanje Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo strokovno človeško prevajanje. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki izhajajo iz uporabe tega prevoda.