8.5 KiB
Čtení GPS dat - Raspberry Pi
V této části lekce přidáte k Raspberry Pi GPS senzor a budete z něj číst hodnoty.
Hardware
Raspberry Pi potřebuje GPS senzor.
Senzor, který budete používat, je Grove GPS Air530 senzor. Tento senzor se může připojit k více GPS systémům pro rychlé a přesné určení polohy. Senzor se skládá ze dvou částí - hlavní elektroniky senzoru a externí antény připojené tenkým kabelem, která zachycuje rádiové vlny ze satelitů.
Jedná se o UART senzor, takže posílá GPS data přes UART.
Připojení GPS senzoru
Grove GPS senzor lze připojit k Raspberry Pi.
Úkol - připojení GPS senzoru
Připojte GPS senzor.
-
Zasuňte jeden konec Grove kabelu do konektoru na GPS senzoru. Kabel lze zasunout pouze jedním směrem.
-
S vypnutým Raspberry Pi připojte druhý konec Grove kabelu do konektoru UART označeného UART na Grove Base hat připojeném k Pi. Tento konektor se nachází ve střední řadě na straně blíže k slotu na SD kartu, na opačné straně od USB portů a ethernetového konektoru.
-
Umístěte GPS senzor tak, aby připojená anténa měla viditelnost na oblohu - ideálně vedle otevřeného okna nebo venku. Je snazší získat jasnější signál, pokud anténě nic nepřekáží.
Programování GPS senzoru
Raspberry Pi nyní může být naprogramováno pro použití připojeného GPS senzoru.
Úkol - programování GPS senzoru
Naprogramujte zařízení.
-
Zapněte Pi a počkejte, až se spustí.
-
GPS senzor má 2 LED diody - modrou LED, která bliká při přenosu dat, a zelenou LED, která bliká každou sekundu při příjmu dat ze satelitů. Ujistěte se, že modrá LED bliká při zapnutí Pi. Po několika minutách začne blikat zelená LED - pokud ne, možná budete muset přemístit anténu.
-
Spusťte VS Code, buď přímo na Pi, nebo se připojte přes rozšíření Remote SSH.
⚠️ Můžete se podívat na instrukce pro nastavení a spuštění VS Code v lekci 1, pokud je to potřeba.
-
U novějších verzí Raspberry Pi, které podporují Bluetooth, existuje konflikt mezi sériovým portem používaným pro Bluetooth a tím, který používá Grove UART port. Pro vyřešení tohoto problému postupujte následovně:
-
Z terminálu VS Code upravte soubor
/boot/config.txt
pomocínano
, vestavěného textového editoru terminálu, pomocí následujícího příkazu:sudo nano /boot/config.txt
Tento soubor nelze upravovat přímo ve VS Code, protože je potřeba použít
sudo
oprávnění, což je zvýšené oprávnění. VS Code neběží s tímto oprávněním. -
Pomocí kurzorových kláves přejděte na konec souboru, poté zkopírujte níže uvedený kód a vložte jej na konec souboru:
dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1
Vkládání můžete provést pomocí běžných klávesových zkratek pro vaše zařízení (
Ctrl+v
na Windows, Linux nebo Raspberry Pi OS,Cmd+v
na macOS). -
Uložte tento soubor a ukončete nano stisknutím
Ctrl+x
. Stisknětey
, když budete dotázáni, zda chcete uložit upravený buffer, poté stiskněteenter
, abyste potvrdili přepsání/boot/config.txt
.Pokud uděláte chybu, můžete ukončit bez uložení a poté tyto kroky zopakovat.
-
Upravte soubor
/boot/cmdline.txt
v nano pomocí následujícího příkazu:sudo nano /boot/cmdline.txt
-
Tento soubor obsahuje několik dvojic klíč/hodnota oddělených mezerami. Odstraňte všechny dvojice klíč/hodnota pro klíč
console
. Pravděpodobně budou vypadat nějak takto:console=serial0,115200 console=tty1
Pomocí kurzorových kláves přejděte na tyto položky a poté je smažte pomocí běžných kláves
del
nebobackspace
.Například pokud váš původní soubor vypadá takto:
console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Nová verze bude:
root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
-
Postupujte podle výše uvedených kroků pro uložení tohoto souboru a ukončení nano.
-
Restartujte Pi a poté se znovu připojte ve VS Code, jakmile se Pi restartuje.
-
-
Z terminálu vytvořte novou složku v domovském adresáři uživatele
pi
nazvanougps-sensor
. V této složce vytvořte soubor nazvanýapp.py
. -
Otevřete tuto složku ve VS Code.
-
GPS modul posílá UART data přes sériový port. Nainstalujte balíček
pyserial
pomocí Pip, abyste mohli komunikovat se sériovým portem z vašeho Python kódu:pip3 install pyserial
-
Přidejte následující kód do vašeho souboru
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)
Tento kód importuje modul
serial
z balíčkupyserial
. Poté se připojí k sériovému portu/dev/ttyAMA0
- to je adresa sériového portu, který Grove Pi Base Hat používá pro svůj UART port. Poté vymaže všechna existující data z tohoto sériového připojení.Dále je definována funkce
print_gps_data
, která vypisuje předaný řádek do konzole.Poté kód běží v nekonečné smyčce, čte co nejvíce řádků textu ze sériového portu v každé iteraci smyčky. Pro každý řádek volá funkci
print_gps_data
.Po přečtení všech dat smyčka na 1 sekundu usne a poté se pokusí znovu.
-
Spusťte tento kód. Uvidíte surový výstup z GPS senzoru, něco jako následující:
$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
Pokud při zastavení a opětovném spuštění kódu dostanete jednu z následujících chyb, přidejte blok
try - except
do vaší while smyčky.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)
💁 Tento kód najdete ve složce code-gps/pi.
😀 Programování vašeho GPS senzoru bylo úspěšné!
Prohlášení:
Tento dokument byl přeložen pomocí služby pro automatický překlad Co-op Translator. I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro kritické informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.