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

16 KiB

GPS ഡാറ്റ വായിക്കുക - Raspberry Pi

ഈ പാഠത്തിന്റെ ഈ ഭാഗത്ത്, നിങ്ങൾ നിങ്ങളുടെ Raspberry Pi-ലേക്ക് GPS സെൻസർ ചേർത്തു, അതിൽ നിന്നുള്ള മൂല്യങ്ങൾ വായിക്കും.

ഹാർഡ്‌വെയർ

Raspberry Pi-ക്ക് ഒരു GPS സെൻസർ ആവശ്യമാണ്.

നിങ്ങൾ ഉപയോഗിക്കുന്ന സെൻസർ Grove GPS Air530 സെൻസർ ആണ്. ഈ സെൻസർ വ്യത്യസ്ത GPS സിസ്റ്റങ്ങളുടെ കൂടിയുള്ള കണക്ഷൻ മുഖേന വേഗവും കൃത്യവുമായ ഫിക്‌സിനെ സാധ്യമാക്കുന്നു. സെൻസ് രണ്ടുഭാഗങ്ങളായി നിർമ്മിച്ചിരിക്കുന്നു - സെൻസറിന്റെ മൗലിക ഇലക്ട്രോണിക്സ്, കൂടാതെ വിവിധ ഉപഗ്രഹങ്ങളിൽ നിന്നുള്ള റേഡിയോ തരംഗങ്ങൾ പകരുന്നതിനായി തമ്പർതിയുള്ള വയർ വഴി ബന്ധിപ്പിച്ച ഉള്ളേതായി ഒരു പുറംഅന്തേന.

ഇത് UART സെൻസർ ആണ്, അതിനാൽ GPS ഡാറ്റ UART വഴി അയക്കും.

GPS സെൻസർ കണക്റ്റ് ചെയ്യുക

Grove GPS സെൻസർ Raspberry Pi-യുമായി കണക്റ്റ് ചെയ്യാൻ കഴിയും.

ചുമതല - GPS സെൻസർ കണക്റ്റ് ചെയ്യുക

GPS സെൻസർ കണക്റ്റ് ചെയ്യുക.

A grove GPS sensor

  1. Grove കേബിളിന്റെ ഒരു അറ്റം GPS സെൻസറിലെ സോക്കറ്റിലേക്ക് ഇറയ്ക്കുക. ഇത് ഒരേയൊരു രീതിയിൽ മാത്രം പോകും.

  2. Raspberry Pi പവർ ഓഫ് ചെയ്തിരിക്കുന്നപ്പോൾ, Grove കേബിളിന്റെ മറ്റേ അറ്റം Grove Base ഹാറ്റിൽ Pi-യോട് ചേർന്ന UART സോക്കറ്റിലെ UART എന്ന് അടയാളപ്പെടുത്തിയ ഭാഗത്തു കണക്റ്റ് ചെയ്യുക. ഈ സോക്കറ്റ് മധ്യനില റോയിൽ, SD കാർഡ് സ്ലോട്ടിന് ഏറ്റവും അടുത്തുള്ള പക്കിലാണുള്ളത്, USB പോർട്ടുകളും ഇതർനെറ്റ് സോക്കറ്റുകളുമുള്ള മറുവശമല്ല.

    The grove GPS sensor connected to the UART socket

  3. GPS സെൻസറിന്റെ അറ്റേന ആകാശത്തിനായി കാണാൻ കഴിയുന്നിടത്ത്, ഉദാഹരണത്തിന് ഒരു തുറന്ന ജനാലക്കപ്പം അല്ലെങ്കിൽ പുറത്തേക്ക്, വച്ചിടുക. അന്തേനയ്ക്ക് തടസ്സമില്ലാതെ സിഗ്നലുകൾ സ്വീകരിക്കുന്നത് എളുപ്പമാണ്.

GPS സെൻസർ പ്രോഗ്രാം ചെയ്യുക

Raspberry Pi ഇപ്പോൾ GPS സെൻസർ ഉപയോഗിക്കുന്നതിനായി പ്രോഗ്രാം ചെയ്യാൻ കഴിയും.

ചുമതല - GPS സെൻസർ പ്രോഗ്രാം ചെയ്യുക

ഉപ്പകരണം പ്രോഗ്രാം ചെയ്യുക.

  1. Pi-യെ പവറപ്പിച്ച് ബൂട്ട് ആകുന്നതിന് കാത്തിരിക്കുക

  2. GPS സെൻസറിന് രണ്ട് LEDകൾ ഉണ്ട് - ഡാറ്റ പ്രക്ഷേപണം നടക്കുമ്പോൾ തിളക്കുന്ന നീല LED, ഉപഗ്രഹങ്ങളിൽ നിന്നും ഡാറ്റ സ്വീകരിക്കുമ്പോൾ ഓരോ സെക്കന്റ് ഇടവിട്ട് തിളക്കുന്ന പച്ച LED. Pi പവർ ചെയ്യുമ്പോൾ നീല LED തിളക്കുന്നത് ഉറപ്പാക്കുക. കുറച്ച് മിനിറ്റുകൾക്കുശേഷം പച്ച LED തിളക്കും - ഇല്ലെങ്കിൽ, antenne സ്ഥാനം മാറ്റേണ്ടിവരും.

  3. VS കോഡ് ആരംഭിക്കുക, Pi-ലോ അല്ലെങ്കിൽ Remote SSH എക്സ്റ്റൻഷൻ വഴി കണക്റ്റ് ചെയ്ത്.

    ⚠️ ആവശ്യമെങ്കിൽ പാഠം 1 ൽ VS കോഡ് സെറ്റപ്പ് ചെയ്യുന്നതും ആരംഭിക്കുന്നതും സംബന്ധിച്ച നിർദേശങ്ങൾ കാണാം.

  4. ബ്ളൂടൂത്ത് പിന്തുണയുള്ള പുതിയ Raspberry Pi മോഡലുകളിൽ, ബ്ളൂടൂത്ത് ഉപയോഗിക്കുന്ന സീരിയൽ പോർട്ടിന്റെയും Grove UART പോർട്ടിന്റെയും ഇടയിൽ ഒരു ഗാര്യഭദം ഉണ്ടാകാം. ഇത് പരിഹരിക്കാൻ:

    1. VS കോഡ് ടർമിനലിൽ nano എന്ന ടെക്സ്റ്റ് എഡിറ്റർ ഉപയോഗിച്ച് /boot/config.txt ഫയൽ എഡിറ്റ് ചെയ്യുക:

      sudo nano /boot/config.txt
      

      ഈ ഫയൽ VS കോഡ് സ്റ്റാൻഡേർഡ് പരിധിയിൽ എഡിറ്റ് ചെയ്യാനാകില്ല, കാരണം sudo അനുമതികൾ ആവശ്യമാണ്. VS കോഡ് ഈ അനുമതി സാധാരണയായി നൽകാറില്ല.

    2. ഫയലിന്റെ അവസാനം പോകുവാൻ കേഴ്‌സർ കീകൾ ഉപയോഗിക്കുക, പിന്നെ താഴെ കാണുന്ന കോഡ് കോപ്പി ചെയ്ത് ഫയലിന്റെ അവസാനം പേസ്റ്റ് ചെയ്യുക:

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

      നിങ്ങളുടെ ഉപകരണത്തിന് സാധാരണ കീബോർഡ് ഷോർട്ട്‌കട്ടുകൾ ഉപയോഗിച്ച് പേസ്റ്റ് ചെയ്യാം (Ctrl+v വിൻഡോസ്, ലിനക്‌സ്, Raspberry Pi OS, Cmd+v macOS).

    3. ഈ ഫയൽ സേവ് ചെയ്ത് nano നിന്നു പുറത്തുവരാൻ Ctrl+x അമർത്തുക. മാറ്റം സേവ് ചെയ്യാമോ എന്ന് ചോദിച്ചാൽ y അമർത്തുക, ശേഷം /boot/config.txt overwrite ചെയ്യുന്നതിന് enter അമർത്തുക.

      പിശക് സംഭവിച്ചാൽ സേവ് ചെയ്യാതെയുള്ള പുറത്തുവരാൻ കഴിയും, പിന്നെ വീണ്ടും ശ്രമിക്കുക.

    4. nano ഉപയോഗിച്ച് /boot/cmdline.txt ഫയൽ ഇതുപോലെ എഡിറ്റ് ചെയ്യുക:

      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 റീബൂട്ട് ചെയ്ത്, പിന്നെ Pi വീണ്ടും ബൂട്ടായ ശേഷം VS കോഡിൽ വീണ്ടും കണക്റ്റ് ചെയ്യുക.

  5. ടർമിനലിൽ നിന്നും pi ഉപയോക്തൃ ഹോം ഡയറക്ടറിയിൽ gps-sensor എന്ന ഫോൾഡർ സൃഷ്ടിക്കുക. ഈ ഫോൾഡറിൾ app.py എന്ന ഫയൽ ഉണ്ടാക്കുക.

  6. ഈ ഫോൾഡർ VS കോഡിൽ തുറക്കുക

  7. GPS മോഡ്യൂൾ UART വഴി സീരിയൽ പോർട്ട് വഴി ഡാറ്റ അയയ്ക്കുന്നു. നിങ്ങളുടെ Python കോഡിൽ നിന്ന് സീരിയൽ പോർട്ട് ഉപയോഗിച്ച് ആശയവിനിമയം നടത്താൻ pyserial പിപ് പാക്കേജ് ഇൻസ്റ്റാൾ ചെയ്യുക:

    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)
    

    ഈ കോഡ് pyserial പിപ് പാക്കേജിലെ serial മോഡ്യൂൾ ഇറക്കുമതി ചെയ്യുന്നു. പിന്നെ /dev/ttyAMA0 സീരിയൽ പോർട്ടുമായി കണക്റ്റ് ചെയ്യുന്നു - ഇത് Grove Pi Base ഹാറ്റ് അതിന്റെ UART പോർട്ടിന് ഉപയോഗിക്കുന്ന സീരിയൽ പോർട്ട് വിലാസമാണ്. പിന്നെ ഈ സീരിയൽ കണക്ഷനിൽ നിലവിലുള്ള ഡാറ്റയൊക്കെ നീക്കം ചെയ്യുന്നു.

    പിന്നാലെ print_gps_data എന്ന ഒരു ഫംഗ്ഷൻ നിർവ്വചിച്ചിരിക്കുന്നു, ഇത് പാസ്സായ ലൈനിനെ കൺസോളിൽ പ്രിന്റ് ചെയ്യുന്നു.

    പിന്നീട് കോഡ് സ്ഥിരമായി ലൂപിൽ പെട്ടെന്ന് തിരിച്ച് സീരിയൽ പോർട്ടിൽ നിന്ന് എത്ര_LINES_ അടിസ്ഥാനവുമുള്ള നമ്പറിലേക്കുൽ എഴുത്തുകൾ വായിച്ച്, ഓരോ ലൈനിനും print_gps_data ഫംഗ്ഷൻ വിളിക്കുന്നു.

    എല്ലാ ഡാറ്റയും വായിച്ചതിനു ശേഷം ലൂപ് 1 സെക്കൻഡ് ഉറങ്ങും, പിന്നെ വീണ്ടും ശ്രമിക്കും.

  9. ഈ കോഡ് റൺ ചെയ്യുക. GPS സെൻസറിന്റെ raw output താഴെപോലെയായിരിക്കും കാണുന്നത്:

    $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
    

    നിങ്ങളുടെ കോഡ് നിർത്തി വീണ്ടും ആരംഭിക്കുമ്പോൾ താഴെ പറയുന്ന പിശകുകളിൽ ഏതെങ്കിലും ലഭിക്കുന്ന പക്ഷം, നിങ്ങളുടെ while ലൂപ്പിലേക്ക് try - except ബ്ലോക്ക് ചേർക്കുക.

    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')
    
        # ആദ്യ ബൈറ്റ് വായിക്കുന്നത് ഒരു അക്ഷരത്തിന്റെ നടുവിലായിരിക്കാനുള്ള യാദൃച്ഛിക സാധ്യതയുണ്ട്.
        # മറ്റൊരു പൂർണ്ണ വരി വായിച്ച് തുടരുക.
    
        except UnicodeDecodeError:
            line = serial.readline().decode('utf-8')
    
    time.sleep(1)
    

💁 ഈ കോഡ് code-gps/pi ഫോൾഡറിൽ കണ്ടെത്താവുന്നതാണ്.

😀 നിങ്ങളുടെ GPS സെൻസർ പ്രോഗ്രാം വിജയകരമായി നടന്നു!


ഡിസ്‍ക്ലെയിമര്‍: ഈ പ്രമാണം AI വിവര്‍ത്തന സേവനം Co-op Translator ഉപയോഗിച്ച് വിവര്‍ത്തനം ചെയ്തിരിക്കുന്നു. നാം സതീസ്‍ക്തതയ്ക്ക് ശ്രമിക്കുന്നതിനിടയിലും, ഓട്ടോമാറ്റിക് വിവര്‍ത്തനങ്ങളില്‍ പിഴവുകള്‍ അല്ലെങ്കില്‍ അസ്ഥിരതകള്‍ ഉണ്ടായിരിക്കാം എന്നാണ് ദയവായി മനസിലാക്കേണ്ടത്. അസല്‍ ഭാഷയിലെ പ്രമാണം പ്രസക്തമായ നിലവിലുള്ള ഉറവിടമായിട്ട് കണക്കാക്കണം. നിര്‍ണായക വിവരങ്ങള്‍ക്കായി, പ്രൊഫഷണല്‍ മാനുഷിക വിവര്‍ത്തനം ശുപാര്‍ശ ചെയ്യപ്പെടുന്നു. ഈ വിവര്‍ത്തനത്തിന്റെ ഉപയോഗത്തില്‍ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകള്‍ക്കും പിഴവുകള്‍ക്കുമുള്ള ഉത്തരവാദിത്വം ഞങ്ങള്‍ക്കില്ല.