You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ms/3-transport/lessons/1-location-tracking/pi-gps-sensor.md

8.6 KiB

Baca Data GPS - Raspberry Pi

Dalam bahagian pelajaran ini, anda akan menambah sensor GPS pada Raspberry Pi anda dan membaca nilai daripadanya.

Perkakasan

Raspberry Pi memerlukan sensor GPS.

Sensor yang akan anda gunakan ialah Grove GPS Air530 sensor. Sensor ini boleh berhubung dengan pelbagai sistem GPS untuk mendapatkan lokasi dengan cepat dan tepat. Sensor ini terdiri daripada 2 bahagian - elektronik utama sensor, dan antena luaran yang disambungkan dengan wayar nipis untuk menerima gelombang radio dari satelit.

Ini adalah sensor UART, jadi ia menghantar data GPS melalui UART.

Sambungkan Sensor GPS

Sensor Grove GPS boleh disambungkan kepada Raspberry Pi.

Tugasan - sambungkan sensor GPS

Sambungkan sensor GPS.

Sensor GPS Grove

  1. Masukkan satu hujung kabel Grove ke soket pada sensor GPS. Ia hanya boleh dimasukkan dalam satu arah sahaja.

  2. Dengan Raspberry Pi dimatikan, sambungkan hujung lain kabel Grove ke soket UART yang ditandakan UART pada Grove Base hat yang disambungkan kepada Pi. Soket ini berada di barisan tengah, di sisi yang paling dekat dengan slot kad SD, bertentangan dengan port USB dan soket ethernet.

    Sensor GPS Grove disambungkan ke soket UART

  3. Letakkan sensor GPS supaya antena yang disambungkan mempunyai pandangan ke langit - sebaiknya di sebelah tingkap terbuka atau di luar. Ia lebih mudah untuk mendapatkan isyarat yang jelas tanpa halangan di hadapan antena.

Program Sensor GPS

Raspberry Pi kini boleh diprogramkan untuk menggunakan sensor GPS yang disambungkan.

Tugasan - program sensor GPS

Programkan peranti.

  1. Hidupkan Pi dan tunggu sehingga ia selesai boot.

  2. Sensor GPS mempunyai 2 LED - LED biru yang berkelip apabila data dihantar, dan LED hijau yang berkelip setiap saat apabila menerima data dari satelit. Pastikan LED biru berkelip apabila anda menghidupkan Pi. Selepas beberapa minit, LED hijau akan berkelip - jika tidak, anda mungkin perlu mengubah kedudukan antena.

  3. Lancarkan VS Code, sama ada secara langsung pada Pi, atau sambungkan melalui sambungan Remote SSH.

    ⚠️ Anda boleh merujuk kepada arahan untuk menyediakan dan melancarkan VS Code dalam pelajaran 1 jika diperlukan.

  4. Dengan versi Raspberry Pi yang lebih baru yang menyokong Bluetooth, terdapat konflik antara port serial yang digunakan untuk Bluetooth dan yang digunakan oleh port Grove UART. Untuk menyelesaikan masalah ini, lakukan langkah berikut:

    1. Dari terminal VS Code, edit fail /boot/config.txt menggunakan nano, editor teks terminal terbina dalam dengan arahan berikut:

      sudo nano /boot/config.txt
      

      Fail ini tidak boleh diedit oleh VS Code kerana anda perlu mengeditnya dengan kebenaran sudo, iaitu kebenaran yang lebih tinggi. VS Code tidak dijalankan dengan kebenaran ini.

    2. Gunakan kekunci kursor untuk navigasi ke penghujung fail, kemudian salin kod di bawah dan tampal di penghujung fail:

      dtoverlay=pi3-miniuart-bt
      dtoverlay=pi3-disable-bt
      enable_uart=1
      

      Anda boleh menampal menggunakan pintasan papan kekunci biasa untuk peranti anda (Ctrl+v pada Windows, Linux atau Raspberry Pi OS, Cmd+v pada macOS).

    3. Simpan fail ini dan keluar dari nano dengan menekan Ctrl+x. Tekan y apabila ditanya sama ada anda ingin menyimpan buffer yang diubah, kemudian tekan enter untuk mengesahkan anda ingin menimpa /boot/config.txt.

      Jika anda membuat kesilapan, anda boleh keluar tanpa menyimpan, kemudian ulangi langkah-langkah ini.

    4. Edit fail /boot/cmdline.txt dalam nano dengan arahan berikut:

      sudo nano /boot/cmdline.txt
      
    5. Fail ini mempunyai beberapa pasangan kunci/nilai yang dipisahkan oleh ruang. Padamkan mana-mana pasangan kunci/nilai untuk kunci console. Ia mungkin kelihatan seperti ini:

      console=serial0,115200 console=tty1 
      

      Anda boleh navigasi ke entri ini menggunakan kekunci kursor, kemudian padam menggunakan kekunci del atau backspace biasa.

      Sebagai contoh, jika fail asal anda kelihatan seperti ini:

      console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
      

      Versi baru akan menjadi:

      root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
      
    6. Ikuti langkah-langkah di atas untuk menyimpan fail ini dan keluar dari nano.

    7. Reboot Pi anda, kemudian sambung semula dalam VS Code selepas Pi selesai reboot.

  5. Dari terminal, buat folder baru dalam direktori rumah pengguna pi bernama gps-sensor. Buat fail dalam folder ini bernama app.py.

  6. Buka folder ini dalam VS Code.

  7. Modul GPS menghantar data UART melalui port serial. Pasang pakej Pip pyserial untuk berkomunikasi dengan port serial dari kod Python anda:

    pip3 install pyserial
    
  8. Tambahkan kod berikut ke fail app.py anda:

    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)
    

    Kod ini mengimport modul serial dari pakej Pip pyserial. Ia kemudian menyambung ke port serial /dev/ttyAMA0 - ini adalah alamat port serial yang digunakan oleh Grove Pi Base Hat untuk port UART-nya. Ia kemudian membersihkan sebarang data sedia ada dari sambungan serial ini.

    Seterusnya, fungsi bernama print_gps_data ditakrifkan yang mencetak baris yang dihantar kepadanya ke konsol.

    Seterusnya, kod ini melaksanakan gelung selama-lamanya, membaca sebanyak mungkin baris teks dari port serial dalam setiap gelung. Ia memanggil fungsi print_gps_data untuk setiap baris.

    Selepas semua data dibaca, gelung ini tidur selama 1 saat, kemudian mencuba lagi.

  9. Jalankan kod ini. Anda akan melihat output mentah dari sensor GPS, sesuatu seperti berikut:

    $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
    

    Jika anda mendapat salah satu daripada ralat berikut apabila menghentikan dan memulakan semula kod anda, tambahkan blok try - except ke gelung while anda.

    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)
    

💁 Anda boleh menemui kod ini dalam folder code-gps/pi.

😀 Program sensor GPS anda berjaya!


Penafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.