8.9 KiB
GPS adatok olvasása - Raspberry Pi
Ebben a leckében hozzáadunk egy GPS szenzort a Raspberry Pi-hez, és kiolvassuk az értékeket.
Hardver
A Raspberry Pi-hez szükség van egy GPS szenzorra.
Az általad használt szenzor a Grove GPS Air530 szenzor. Ez a szenzor több GPS rendszerhez tud csatlakozni, hogy gyors és pontos helymeghatározást biztosítson. A szenzor két részből áll: a szenzor elektronikai magjából és egy vékony vezetékkel csatlakoztatott külső antennából, amely a műholdak rádióhullámait veszi.
Ez egy UART szenzor, amely UART-on keresztül küldi a GPS adatokat.
Csatlakoztasd a GPS szenzort
A Grove GPS szenzort csatlakoztathatod a Raspberry Pi-hez.
Feladat - csatlakoztasd a GPS szenzort
Csatlakoztasd a GPS szenzort.
-
Dugj be egy Grove kábelt a GPS szenzor aljzatába. Csak egy irányban illeszkedik.
-
Kapcsold ki a Raspberry Pi-t, majd csatlakoztasd a Grove kábel másik végét a Grove Base hat UART jelzésű aljzatába, amely a Pi-hez van csatlakoztatva. Ez az aljzat a középső sorban található, az SD kártya nyílás közelében, a másik oldalon, mint az USB portok és az ethernet aljzat.
-
Helyezd el a GPS szenzort úgy, hogy a csatlakoztatott antennája látható legyen az ég felé - ideális esetben egy nyitott ablak mellett vagy a szabadban. Az antenna akadálytalan elhelyezése segít tisztább jelet kapni.
Programozd a GPS szenzort
Most már programozhatod a Raspberry Pi-t, hogy használja a csatlakoztatott GPS szenzort.
Feladat - programozd a GPS szenzort
Programozd az eszközt.
-
Kapcsold be a Pi-t, és várd meg, amíg elindul.
-
A GPS szenzoron két LED található - egy kék LED, amely villog, amikor adatokat továbbít, és egy zöld LED, amely másodpercenként villog, amikor adatokat kap a műholdaktól. Győződj meg róla, hogy a kék LED villog, amikor bekapcsolod a Pi-t. Néhány perc múlva a zöld LED is villogni fog - ha nem, lehet, hogy újra kell pozícionálnod az antennát.
-
Indítsd el a VS Code-ot, akár közvetlenül a Pi-n, akár a Remote SSH bővítmény segítségével csatlakozva.
⚠️ Ha szükséges, hivatkozhatsz az 1. leckében található utasításokra a VS Code beállításáról és indításáról.
-
Az újabb Raspberry Pi modellek, amelyek támogatják a Bluetooth-t, konfliktust okozhatnak a Bluetooth által használt soros port és a Grove UART port által használt soros port között. Ennek megoldásához kövesd az alábbi lépéseket:
-
A VS Code termináljából szerkeszd a
/boot/config.txt
fájlt anano
nevű beépített terminál szövegszerkesztővel az alábbi parancs segítségével:sudo nano /boot/config.txt
Ezt a fájlt nem lehet a VS Code-ban szerkeszteni, mivel
sudo
jogosultságra van szükség, ami emelt jogosultságot jelent. A VS Code nem fut ilyen jogosultsággal. -
Használd a kurzor billentyűket, hogy a fájl végére navigálj, majd másold be az alábbi kódot a fájl végére:
dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1
A beillesztéshez használd az eszközöd normál billentyűkombinációit (
Ctrl+v
Windows, Linux vagy Raspberry Pi OS esetén,Cmd+v
macOS esetén). -
Mentsd el a fájlt, és lépj ki a nano-ból a
Ctrl+x
billentyűkombinációval. Nyomd meg azy
gombot, amikor megkérdezi, hogy menteni szeretnéd-e a módosított tartalmat, majd nyomd meg azenter
gombot, hogy megerősítsd a/boot/config.txt
felülírását.Ha hibát követsz el, kiléphetsz mentés nélkül, majd megismételheted ezeket a lépéseket.
-
Szerkeszd a
/boot/cmdline.txt
fájlt a nano segítségével az alábbi parancs segítségével:sudo nano /boot/cmdline.txt
-
Ez a fájl kulcs/érték párokat tartalmaz, amelyek szóközzel vannak elválasztva. Távolítsd el a
console
kulcshoz tartozó kulcs/érték párokat. Ezek valószínűleg így néznek ki:console=serial0,115200 console=tty1
A kurzor billentyűkkel navigálhatsz ezekhez a bejegyzésekhez, majd törölheted őket a normál
del
vagybackspace
billentyűkkel.Például, ha az eredeti fájl így néz ki:
console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Az új verzió így fog kinézni:
root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
-
Kövesd a fentieket a fájl mentéséhez és a nano-ból való kilépéshez.
-
Indítsd újra a Pi-t, majd csatlakozz újra a VS Code-hoz, miután a Pi újraindult.
-
-
A terminálból hozz létre egy új mappát a
pi
felhasználó otthoni könyvtárábangps-sensor
néven. Hozz létre egy fájlt ebben a mappábanapp.py
néven. -
Nyisd meg ezt a mappát a VS Code-ban.
-
A GPS modul UART adatokat küld egy soros porton keresztül. Telepítsd a
pyserial
Pip csomagot, hogy Python kódból kommunikálhass a soros porttal:pip3 install pyserial
-
Add hozzá az alábbi kódot az
app.py
fájlhoz: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)
Ez a kód importálja a
serial
modult apyserial
Pip csomagból. Ezután csatlakozik a/dev/ttyAMA0
soros porthoz - ez a Grove Pi Base Hat által használt UART port címe. Ezután törli az esetleges meglévő adatokat erről a soros kapcsolatról.Ezután definiál egy
print_gps_data
nevű függvényt, amely kiírja a neki átadott sort a konzolra.Ezután a kód végtelen ciklust futtat, amely minden ciklusban annyi szövegsort olvas be a soros portból, amennyit csak tud. Minden sorhoz meghívja a
print_gps_data
függvényt.Miután az összes adatot beolvasta, a ciklus 1 másodpercig várakozik, majd újra próbálkozik.
-
Futtasd a kódot. Látni fogod a GPS szenzor nyers kimenetét, valami ilyesmit:
$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
Ha az alábbi hibák valamelyikét kapod, amikor leállítod és újraindítod a kódot, adj hozzá egy
try - except
blokkot a while ciklusodhoz.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)
💁 Ezt a kódot megtalálod a code-gps/pi mappában.
😀 Sikeresen programoztad a GPS szenzort!
Felelősség kizárása:
Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.