9.1 KiB
Basahin ang GPS Data - Raspberry Pi
Sa bahaging ito ng aralin, magdadagdag ka ng GPS sensor sa iyong Raspberry Pi at babasahin ang mga halaga mula rito.
Kagamitan
Kailangan ng Raspberry Pi ng GPS sensor.
Ang sensor na gagamitin mo ay ang Grove GPS Air530 sensor. Ang sensor na ito ay maaaring kumonekta sa maraming GPS system para sa mabilis at tumpak na pagkuha ng lokasyon. Binubuo ang sensor ng 2 bahagi - ang pangunahing electronics ng sensor at isang panlabas na antena na nakakabit sa pamamagitan ng manipis na kawad upang makuha ang mga radio wave mula sa mga satellite.
Ito ay isang UART sensor, kaya't nagpapadala ito ng GPS data gamit ang UART.
Ikonekta ang GPS Sensor
Maaaring ikonekta ang Grove GPS sensor sa Raspberry Pi.
Gawain - Ikonekta ang GPS Sensor
Ikonekta ang GPS sensor.
-
Ipasok ang isang dulo ng Grove cable sa socket ng GPS sensor. Isang paraan lamang ang tamang pagpasok nito.
-
Kapag naka-off ang Raspberry Pi, ikonekta ang kabilang dulo ng Grove cable sa UART socket na may markang UART sa Grove Base hat na nakakabit sa Pi. Ang socket na ito ay nasa gitnang hilera, sa gilid na pinakamalapit sa SD Card slot, sa kabilang dulo mula sa mga USB port at ethernet socket.
-
Ilagay ang GPS sensor sa posisyon kung saan ang nakakabit na antena ay may malinaw na tanaw sa kalangitan - mas mainam kung malapit sa isang bukas na bintana o sa labas. Mas madali itong makakuha ng malinaw na signal kung walang nakaharang sa antena.
Iprograma ang GPS Sensor
Ngayon ay maaaring i-program ang Raspberry Pi upang magamit ang nakakabit na GPS sensor.
Gawain - Iprograma ang GPS Sensor
Iprograma ang device.
-
I-on ang Pi at hintaying mag-boot.
-
Ang GPS sensor ay may 2 LED - isang asul na LED na kumikislap kapag nagpapadala ng data, at isang berdeng LED na kumikislap bawat segundo kapag tumatanggap ng data mula sa mga satellite. Siguraduhing kumikislap ang asul na LED kapag in-on mo ang Pi. Pagkalipas ng ilang minuto, ang berdeng LED ay magsisimulang kumislap - kung hindi, maaaring kailanganin mong ilipat ang posisyon ng antena.
-
Ilunsad ang VS Code, alinman direkta sa Pi, o kumonekta gamit ang Remote SSH extension.
⚠️ Maaari kang sumangguni sa mga tagubilin para sa pag-set up at paglulunsad ng VS Code sa aralin 1 kung kinakailangan.
-
Sa mga mas bagong bersyon ng Raspberry Pi na may suporta sa Bluetooth, mayroong conflict sa pagitan ng serial port na ginagamit para sa Bluetooth at ng isa na ginagamit ng Grove UART port. Upang ayusin ito, gawin ang mga sumusunod:
-
Mula sa terminal ng VS Code, i-edit ang file na
/boot/config.txt
gamit angnano
, isang built-in na text editor sa terminal, gamit ang sumusunod na command:sudo nano /boot/config.txt
Ang file na ito ay hindi maaaring i-edit gamit ang VS Code dahil kailangan itong i-edit gamit ang
sudo
permissions, o mas mataas na antas ng pahintulot. Ang VS Code ay hindi tumatakbo gamit ang ganitong pahintulot. -
Gamitin ang mga cursor keys upang pumunta sa dulo ng file, pagkatapos ay kopyahin ang code sa ibaba at i-paste ito sa dulo ng file:
dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1
Maaari kang mag-paste gamit ang normal na keyboard shortcuts para sa iyong device (
Ctrl+v
sa Windows, Linux o Raspberry Pi OS,Cmd+v
sa macOS). -
I-save ang file na ito at lumabas sa nano sa pamamagitan ng pagpindot sa
Ctrl+x
. Pindutin angy
kapag tinanong kung nais mong i-save ang binagong buffer, pagkatapos ay pindutin angenter
upang kumpirmahin na nais mong i-overwrite ang/boot/config.txt
.Kung nagkamali ka, maaari kang lumabas nang hindi nagse-save, pagkatapos ay ulitin ang mga hakbang na ito.
-
I-edit ang file na
/boot/cmdline.txt
sa nano gamit ang sumusunod na command:sudo nano /boot/cmdline.txt
-
Ang file na ito ay may maraming key/value pairs na pinaghihiwalay ng mga espasyo. Alisin ang anumang key/value pairs para sa key na
console
. Malamang na ganito ang hitsura:console=serial0,115200 console=tty1
Maaari kang gumamit ng cursor keys upang pumunta sa mga entry na ito, pagkatapos ay tanggalin gamit ang normal na
del
obackspace
keys.Halimbawa, kung ganito ang orihinal na file:
console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Ang bagong bersyon ay magiging ganito:
root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
-
Sundin ang mga hakbang sa itaas upang i-save ang file na ito at lumabas sa nano.
-
I-reboot ang iyong Pi, pagkatapos ay muling kumonekta sa VS Code kapag ang Pi ay na-reboot na.
-
-
Mula sa terminal, gumawa ng bagong folder sa home directory ng user na
pi
na tinatawag nagps-sensor
. Gumawa ng file sa folder na ito na tinatawag naapp.py
. -
Buksan ang folder na ito sa VS Code.
-
Ang GPS module ay nagpapadala ng UART data sa isang serial port. I-install ang
pyserial
Pip package upang makipag-ugnayan sa serial port mula sa iyong Python code:pip3 install pyserial
-
Idagdag ang sumusunod na code sa iyong
app.py
file: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)
Ang code na ito ay nag-i-import ng
serial
module mula sapyserial
Pip package. Pagkatapos ay kumokonekta ito sa/dev/ttyAMA0
serial port - ito ang address ng serial port na ginagamit ng Grove Pi Base Hat para sa UART port nito. Nililinis din nito ang anumang umiiral na data mula sa serial connection na ito.Susunod, isang function na tinatawag na
print_gps_data
ang tinutukoy na nagpi-print ng linya na ipinasa rito sa console.Pagkatapos, ang code ay paulit-ulit na nagbabasa ng maraming linya ng teksto mula sa serial port sa bawat loop. Tinatawag nito ang
print_gps_data
function para sa bawat linya.Pagkatapos mabasa ang lahat ng data, ang loop ay natutulog ng 1 segundo, pagkatapos ay muling susubukan.
-
Patakbuhin ang code na ito. Makikita mo ang raw output mula sa GPS sensor, na maaaring ganito:
$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
Kung makakakuha ka ng isa sa mga sumusunod na error kapag pinapatigil at muling pinapatakbo ang iyong code, magdagdag ng
try - except
block sa iyong while loop.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)
💁 Maaari mong makita ang code na ito sa code-gps/pi folder.
😀 Tagumpay ang iyong programa para sa GPS sensor!
Paunawa:
Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.