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/sr/3-transport/lessons/1-location-tracking/pi-gps-sensor.md

12 KiB

Читање GPS података - Raspberry Pi

У овом делу лекције, додаћете GPS сензор на ваш Raspberry Pi и читати вредности са њега.

Хардвер

Raspberry Pi захтева GPS сензор.

Сензор који ћете користити је Grove GPS Air530 сензор. Овај сензор може да се повезује са више GPS система ради брзог и прецизног позиционирања. Сензор се састоји из два дела - основне електронике сензора и спољашње антене која је повезана танким каблом за пријем радио таласа са сателита.

Ово је UART сензор, што значи да шаље GPS податке преко UART-а.

Повезивање GPS сензора

Grove GPS сензор може да се повезује са Raspberry Pi.

Задатак - повежите GPS сензор

Повежите GPS сензор.

Grove GPS сензор

  1. Уметните један крај Grove кабла у утичницу на GPS сензору. Кабл ће ући само у једном смеру.

  2. Са искљученим Raspberry Pi-јем, повежите други крај Grove кабла у UART утичницу означену UART на Grove Base хату који је прикључен на Pi. Ова утичница се налази у средњем реду, на страни ближе слоту за SD картицу, супротно од USB портова и Ethernet утичнице.

    Grove GPS сензор повезан на UART утичницу

  3. Поставите GPS сензор тако да прикључена антена има видљивост ка небу - идеално поред отвореног прозора или напољу. Лакше је добити јаснији сигнал када ништа не блокира антену.

Програмирање GPS сензора

Raspberry Pi сада може бити програмиран за коришћење прикљученог GPS сензора.

Задатак - програмирајте GPS сензор

Програмирајте уређај.

  1. Укључите Pi и сачекајте да се покрене.

  2. GPS сензор има 2 LED диоде - плаву LED диоду која трепери када се подаци преносе, и зелену LED диоду која трепери сваке секунде када прима податке са сателита. Уверите се да плава LED диода трепери када укључите Pi. Након неколико минута зелена LED диода ће почети да трепери - ако не, можда ћете морати да преместите антену.

  3. Покрените VS Code, било директно на Pi-ју, или се повежите преко Remote SSH екстензије.

    ⚠️ Можете се позвати на упутства за подешавање и покретање VS Code-а у лекцији 1 ако је потребно.

  4. Са новијим верзијама Raspberry Pi-ја које подржавају Bluetooth, постоји конфликт између серијског порта који се користи за Bluetooth и оног који користи Grove UART порт. Да бисте то решили, урадите следеће:

    1. Из VS Code терминала, уредите датотеку /boot/config.txt користећи nano, уграђени терминалски текст едитор, са следећом командом:

      sudo nano /boot/config.txt
      

      Ова датотека не може бити уређивана преко VS Code-а јер је потребно уређивање са sudo дозволама, односно повишеним дозволама. VS Code не ради са овим дозволама.

    2. Користите стрелице на тастатури да се померите до краја датотеке, затим копирајте код испод и налепите га на крај датотеке:

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

      Можете налепити користећи уобичајене пречице на тастатури за ваш уређај (Ctrl+v на Windows, Linux или Raspberry Pi OS, Cmd+v на macOS).

    3. Сачувајте ову датотеку и изађите из nano-а притиском на Ctrl+x. Притисните y када вас пита да ли желите да сачувате модификовани бафер, затим притисните enter да потврдите да желите да препишете /boot/config.txt.

      Ако направите грешку, можете изаћи без чувања, а затим поновити ове кораке.

    4. Уредите датотеку /boot/cmdline.txt у nano-у са следећом командом:

      sudo nano /boot/cmdline.txt
      
    5. Ова датотека има бројне парове кључ/вредност одвојене размаком. Уклоните било који пар кључ/вредност за кључ console. Они ће вероватно изгледати овако:

      console=serial0,115200 console=tty1 
      

      Можете се померити до ових уноса користећи стрелице на тастатури, затим брисати користећи уобичајене тастере del или backspace.

      На пример, ако ваша оригинална датотека изгледа овако:

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

      Нова верзија ће бити:

      root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
      
    6. Пратите горе наведене кораке да сачувате ову датотеку и изађете из nano-а.

    7. Поново покрените ваш Pi, затим се поново повежите у VS Code када се Pi поново покрене.

  5. Из терминала, направите нови фолдер у home директоријуму корисника pi назван gps-sensor. Направите датотеку у овом фолдеру названу app.py.

  6. Отворите овај фолдер у VS Code-у.

  7. GPS модул шаље UART податке преко серијског порта. Инсталирајте pyserial Pip пакет за комуникацију са серијским портом из вашег Python кода:

    pip3 install pyserial
    
  8. Додајте следећи код у вашу 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)
    

    Овај код увози serial модул из pyserial Pip пакета. Затим се повезује на серијски порт /dev/ttyAMA0 - ово је адреса серијског порта који Grove Pi Base Hat користи за свој UART порт. Затим чисти било које постојеће податке са ове серијске везе.

    Затим се дефинише функција print_gps_data која штампа линију прослеђену њој на конзолу.

    Након тога, код се врти у бесконачној петљи, читајући што више линија текста може са серијског порта у свакој итерацији. Позива функцију print_gps_data за сваку линију.

    Након што су сви подаци прочитани, петља спава 1 секунду, затим покушава поново.

  9. Покрените овај код. Видећете сирови излаз са GPS сензора, нешто попут следећег:

    $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
    

    Ако добијете једну од следећих грешака када зауставите и поново покренете ваш код, додајте try - except блок у вашу while петљу.

    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)
    

💁 Овај код можете пронаћи у code-gps/pi фолдеру.

😀 Ваш програм за GPS сензор је успешно завршен!


Одрицање од одговорности:
Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције Co-op Translator. Иако настојимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.