8.5 KiB
Skaitykite GPS duomenis - Raspberry Pi
Šioje pamokos dalyje pridėsite GPS jutiklį prie savo Raspberry Pi ir skaitysite jo pateikiamas reikšmes.
Aparatinė įranga
Raspberry Pi reikalingas GPS jutiklis.
Jutiklis, kurį naudosite, yra Grove GPS Air530 jutiklis. Šis jutiklis gali prisijungti prie kelių GPS sistemų, kad greitai ir tiksliai nustatytų vietą. Jutiklis susideda iš dviejų dalių – pagrindinės elektronikos ir išorinės antenos, prijungtos plonu laidu, kad galėtų priimti radijo bangas iš palydovų.
Tai yra UART jutiklis, todėl GPS duomenis perduoda per UART.
Prijunkite GPS jutiklį
Grove GPS jutiklį galima prijungti prie Raspberry Pi.
Užduotis - prijunkite GPS jutiklį
Prijunkite GPS jutiklį.
-
Įstatykite vieną Grove kabelio galą į GPS jutiklio lizdą. Kabelis įsistatys tik viena kryptimi.
-
Išjungę Raspberry Pi, prijunkite kitą Grove kabelio galą prie UART lizdo, pažymėto UART, esančio Grove Base hat, prijungto prie Pi. Šis lizdas yra vidurinėje eilėje, šalia SD kortelės lizdo, priešingoje pusėje nei USB prievadai ir eterneto lizdas.
-
Padėkite GPS jutiklį taip, kad prijungta antena turėtų matomumą į dangų – idealiai šalia atviro lango arba lauke. Antenai lengviau gauti aiškų signalą, kai niekas netrukdo.
Užprogramuokite GPS jutiklį
Dabar Raspberry Pi galima užprogramuoti naudoti prijungtą GPS jutiklį.
Užduotis - užprogramuokite GPS jutiklį
Užprogramuokite įrenginį.
-
Įjunkite Pi ir palaukite, kol jis įsijungs.
-
GPS jutiklis turi 2 LED lemputes – mėlyną LED, kuris mirksi, kai perduodami duomenys, ir žalią LED, kuris mirksi kas sekundę, kai gauna duomenis iš palydovų. Įsitikinkite, kad įjungus Pi mėlyna LED lemputė mirksi. Po kelių minučių turėtų pradėti mirksėti žalia LED lemputė – jei ne, gali reikėti perstatyti anteną.
-
Paleiskite VS Code tiesiogiai Pi arba prisijunkite per Remote SSH plėtinį.
⚠️ Jei reikia, galite pasinaudoti instrukcijomis, kaip nustatyti ir paleisti VS Code 1 pamokoje.
-
Naujesnėse Raspberry Pi versijose, kurios palaiko „Bluetooth“, yra konfliktas tarp serijinio prievado, naudojamo „Bluetooth“, ir to, kuris naudojamas Grove UART prievadui. Norėdami tai išspręsti, atlikite šiuos veiksmus:
-
Iš VS Code terminalo redaguokite
/boot/config.txt
failą naudodaminano
, įmontuotą terminalo teksto redaktorių, su šia komanda:sudo nano /boot/config.txt
Šio failo negalima redaguoti per VS Code, nes reikia
sudo
leidimų, t. y. padidintų teisių. VS Code neveikia su šiais leidimais. -
Naudokite rodyklių klavišus, kad pereitumėte į failo pabaigą, tada nukopijuokite žemiau pateiktą kodą ir įklijuokite jį į failo pabaigą:
dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1
Galite įklijuoti naudodami įprastus klaviatūros sparčiuosius klavišus (
Ctrl+v
Windows, Linux ar Raspberry Pi OS,Cmd+v
macOS). -
Išsaugokite šį failą ir išeikite iš nano paspausdami
Ctrl+x
. Paspauskitey
, kai paklausiama, ar norite išsaugoti pakeistą buferį, tada paspauskiteenter
, kad patvirtintumėte, jog norite perrašyti/boot/config.txt
.Jei padarėte klaidą, galite išeiti neišsaugoję, tada pakartoti šiuos veiksmus.
-
Redaguokite
/boot/cmdline.txt
failą nano redaktoriumi su šia komanda:sudo nano /boot/cmdline.txt
-
Šiame faile yra keletas raktų/vertės porų, atskirtų tarpais. Pašalinkite visas raktų/vertės poras, kurių raktas yra
console
. Jos greičiausiai atrodys taip:console=serial0,115200 console=tty1
Galite pereiti prie šių įrašų naudodami rodyklių klavišus, tada ištrinti naudodami įprastus
del
arbabackspace
klavišus.Pavyzdžiui, jei jūsų originalus failas atrodo taip:
console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Nauja versija atrodys taip:
root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
-
Atlikite aukščiau nurodytus veiksmus, kad išsaugotumėte šį failą ir išeitumėte iš nano.
-
Perkraukite savo Pi, tada vėl prisijunkite prie VS Code, kai Pi bus perkrautas.
-
-
Iš terminalo sukurkite naują aplanką
pi
naudotojo pagrindiniame kataloge, pavadintągps-sensor
. Sukurkite failą šiame aplanke, pavadintąapp.py
. -
Atidarykite šį aplanką VS Code.
-
GPS modulis siunčia UART duomenis per serijinį prievadą. Įdiekite
pyserial
Pip paketą, kad galėtumėte bendrauti su serijiniu prievadu iš savo Python kodo:pip3 install pyserial
-
Pridėkite šį kodą į savo
app.py
failą: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)
Šis kodas importuoja
serial
modulį išpyserial
Pip paketo. Tada jis prisijungia prie/dev/ttyAMA0
serijinio prievado – tai yra serijinio prievado adresas, kurį Grove Pi Base Hat naudoja savo UART prievadui. Tada jis išvalo bet kokius esamus duomenis iš šio serijinio ryšio.Toliau apibrėžiama funkcija
print_gps_data
, kuri išveda perduotą eilutę į konsolę.Tada kodas vykdo begalinį ciklą, skaitydamas tiek eilučių teksto, kiek gali, iš serijinio prievado kiekviename cikle. Jis kviečia
print_gps_data
funkciją kiekvienai eilutei.Kai visi duomenys perskaityti, ciklas laukia 1 sekundę, tada bando dar kartą.
-
Paleiskite šį kodą. Pamatysite neapdorotą GPS jutiklio išvestį, panašią į šią:
$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
Jei gaunate vieną iš šių klaidų, kai sustabdote ir paleidžiate kodą iš naujo, pridėkite
try - except
bloką prie savo while ciklo.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)
💁 Šį kodą galite rasti code-gps/pi aplanke.
😀 Jūsų GPS jutiklio programa buvo sėkminga!
Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Dėl svarbios informacijos rekomenduojama profesionali žmogaus vertimo paslauga. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius naudojant šį vertimą.