8.6 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.txtfájlt ananonevű beépített terminál szövegszerkesztővel az alábbi parancs segítségével:sudo nano /boot/config.txtEzt a fájlt nem lehet a VS Code-ban szerkeszteni, mivel
sudojogosultsá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=1A beillesztéshez használd az eszközöd normál billentyűkombinációit (
Ctrl+vWindows, Linux vagy Raspberry Pi OS esetén,Cmd+vmacOS esetén). -
Mentsd el a fájlt, és lépj ki a nano-ból a
Ctrl+xbillentyűkombinációval. Nyomd meg azygombot, amikor megkérdezi, hogy menteni szeretnéd-e a módosított tartalmat, majd nyomd meg azentergombot, hogy megerősítsd a/boot/config.txtfelü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.txtfá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
consolekulcshoz tartozó kulcs/érték párokat. Ezek valószínűleg így néznek ki:console=serial0,115200 console=tty1A kurzor billentyűkkel navigálhatsz ezekhez a bejegyzésekhez, majd törölheted őket a normál
delvagybackspacebillentyű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 rootwaitAz ú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
pifelhasználó otthoni könyvtárábangps-sensornéven. Hozz létre egy fájlt ebben a mappábanapp.pyné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
pyserialPip csomagot, hogy Python kódból kommunikálhass a soros porttal:pip3 install pyserial -
Add hozzá az alábbi kódot az
app.pyfá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
serialmodult apyserialPip csomagból. Ezután csatlakozik a/dev/ttyAMA0soros 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_datanevű 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_datafü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*68Ha az alábbi hibák valamelyikét kapod, amikor leállítod és újraindítod a kódot, adj hozzá egy
try - exceptblokkot 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 bytewhile 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.

