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

16 KiB

Raspberry Pi မှ GPS ဒေတာဖတ်ရန်

ဒီသင်ခန်းစာအပိုင်းမှာ၊ သင့်ရဲ့ Raspberry Pi မှာ GPS ဆင်ဆာတစ်ခုထည့်သွင်းပြီး၊ ဒေတာများကိုဖတ်ရှုမည်ဖြစ်သည်။

ဟာ့ဒ်ဝဲ

Raspberry Pi အတွက် GPS ဆင်ဆာတစ်ခုလိုအပ်ပါသည်။

သင်အသုံးပြုမည့်ဆင်ဆာမှာ Grove GPS Air530 sensor ဖြစ်သည်။ ဒီဆင်ဆာသည် မြန်နှုန်းမြင့်ပြီး တိကျသော GPS စနစ်များစွာနှင့် ချိတ်ဆက်နိုင်သည်။ ဆင်ဆာသည် အစိတ်အပိုင်း ၂ ခုဖြင့်ဖွဲ့စည်းထားပြီး၊ ဆင်ဆာ၏ အဓိကအီလက်ထရွန်းနစ်နှင့် အပြင်ဘက်အင်တင်နာ (သေးငယ်သောကြိုးဖြင့် ချိတ်ဆက်ထားသည်) တို့ဖြင့် ဂြိုဟ်တုမှ ရေဒီယိုလှိုင်းများကို ဖမ်းယူသည်။

ဒီဆင်ဆာသည် UART ဆင်ဆာဖြစ်ပြီး၊ GPS ဒေတာကို UART မှတဆင့်ပေးပို့သည်။

GPS ဆင်ဆာကို ချိတ်ဆက်ပါ

Grove GPS ဆင်ဆာကို Raspberry Pi နှင့် ချိတ်ဆက်နိုင်ပါသည်။

လုပ်ဆောင်ရန် - GPS ဆင်ဆာကို ချိတ်ဆက်ပါ

GPS ဆင်ဆာကို ချိတ်ဆက်ပါ။

A grove GPS sensor

  1. Grove ကေဘယ်လ်တစ်ဖက်ကို GPS ဆင်ဆာပေါ်ရှိ ဆော့ကက်ထဲသို့ ထည့်ပါ။ ၎င်းသည် တစ်ဖက်သာ အလွယ်တကူသွားပါမည်။

  2. Raspberry Pi ကို မီးပိတ်ထားသောအခြေအနေတွင် Grove ကေဘယ်လ်၏ အခြားဖက်ကို Pi တွင်တပ်ဆင်ထားသော Grove Base Hat ပေါ်ရှိ UART ဟုအမှတ်အသားပြုထားသော UART ဆော့ကက်ထဲသို့ ချိတ်ဆက်ပါ။ ဒီဆော့ကက်သည် အလယ်တန်းတန်းတွင်ရှိပြီး SD Card slot အနီး၊ USB port နှင့် ethernet socket ၏ အခြားဖက်တွင်ရှိသည်။

    The grove GPS sensor connected to the UART socket

  3. GPS ဆင်ဆာကို အင်တင်နာတပ်ဆင်ထားသောနေရာမှ မိုးကောင်းကင်ကို မြင်နိုင်သောနေရာတွင်ထားပါ - အကောင်းဆုံးအနေဖြင့် ပြတင်းပေါက်အနီး သို့မဟုတ် အပြင်ဘက်တွင်ထားပါ။ အင်တင်နာကို အတားအဆီးမရှိဘဲထားခြင်းဖြင့် သင့်ရဲ့အချက်အလက်ကို ပိုမိုရှင်းလင်းစွာရယူနိုင်သည်။

GPS ဆင်ဆာကို အစီအစဉ်ရေးပါ

ယခု Raspberry Pi သည် ချိတ်ဆက်ထားသော GPS ဆင်ဆာကို အသုံးပြုရန် အစီအစဉ်ရေးနိုင်ပါသည်။

လုပ်ဆောင်ရန် - GPS ဆင်ဆာကို အစီအစဉ်ရေးပါ

ဒီစက်ကို အစီအစဉ်ရေးပါ။

  1. Pi ကို မီးဖွင့်ပြီး boot ပြုလုပ်ရန် စောင့်ပါ။

  2. GPS ဆင်ဆာတွင် LED ၂ ခုရှိသည် - အပြာရောင် LED သည် ဒေတာပေးပို့သောအခါတွင် လင်းပွင့်ပြီး၊ အစိမ်းရောင် LED သည် ဂြိုဟ်တုမှ ဒေတာရရှိသောအခါ တစ်စက္ကန့်တစ်ကြိမ် လင်းပွင့်သည်။ Pi ကို မီးဖွင့်သောအခါ အပြာရောင် LED လင်းပွင့်နေကြောင်း သေချာပါစေ။ မိနစ်အနည်းငယ်အကြာတွင် အစိမ်းရောင် LED လင်းပွင့်ပါမည် - မဟုတ်ပါက အင်တင်နာ၏နေရာကို ပြောင်းလဲရန် လိုအပ်နိုင်သည်။

  3. VS Code ကို Pi ပေါ်တွင် တိုက်ရိုက်ဖွင့်ပါ၊ သို့မဟုတ် Remote SSH extension ဖြင့် ချိတ်ဆက်ပါ။

    ⚠️ VS Code ကို စတင်တပ်ဆင်ခြင်းနှင့် ဖွင့်ခြင်းအတွက် သင်ခန်းစာ ၁ တွင် ရှင်းပြထားသော လမ်းညွှန်ချက်များကို ပြန်လည်ကြည့်ရှုနိုင်ပါသည်

  4. Bluetooth ကို ပံ့ပိုးသော Raspberry Pi ၏ နောက်ဆုံးဗားရှင်းများတွင် Bluetooth သုံးသော serial port နှင့် Grove UART port သုံးသော serial port အကြား ပဋိပက္ခရှိသည်။ ၎င်းကို ဖြေရှင်းရန် အောက်ပါအတိုင်းလုပ်ဆောင်ပါ:

    1. VS Code terminal မှ /boot/config.txt ဖိုင်ကို nano ဖြင့် ပြင်ဆင်ပါ။ nano သည် terminal text editor တစ်ခုဖြစ်ပြီး အောက်ပါ command ကို အသုံးပြုပါ:

      sudo nano /boot/config.txt
      

      ဒီဖိုင်ကို VS Code မှတဆင့် မပြင်နိုင်ပါ၊ အကြီးတန်းအခွင့်အာဏာ (sudo permissions) ဖြင့်သာ ပြင်နိုင်ပါသည်။ VS Code သည် ဒီအခွင့်အာဏာဖြင့် မလုပ်ဆောင်ပါ။

    2. Cursor key များကို အသုံးပြု၍ ဖိုင်၏ အဆုံးသို့သွားပါ။ အောက်ပါ code ကို ကူးယူပြီး ဖိုင်၏ အဆုံးတွင် ထည့်ပါ:

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

      သင့်စက်အတွက် သင့်လျော်သော keyboard shortcut များဖြင့် paste လုပ်နိုင်ပါသည် (Ctrl+v Windows, Linux, Raspberry Pi OS တွင်၊ Cmd+v macOS တွင်)။

    3. ဒီဖိုင်ကို သိမ်းပြီး nano မှ ထွက်ရန် Ctrl+x ကိုနှိပ်ပါ။ ပြင်ဆင်ထားသော buffer ကို သိမ်းမည်လားဟု မေးလျှင် y ကိုနှိပ်ပြီး၊ /boot/config.txt ကို overwrite လုပ်ရန် အတည်ပြုရန် enter ကိုနှိပ်ပါ။

      မှားယွင်းမှုရှိပါက သိမ်းမလုပ်ဘဲ ထွက်နိုင်ပြီး၊ အဆင့်များကို ထပ်မံလုပ်ဆောင်နိုင်ပါသည်။

    4. /boot/cmdline.txt ဖိုင်ကို nano ဖြင့် ပြင်ဆင်ပါ၊ အောက်ပါ command ကို အသုံးပြုပါ:

      sudo nano /boot/cmdline.txt
      
    5. ဒီဖိုင်တွင် key/value pair များစွာရှိပြီး၊ space ဖြင့် ခွဲထားသည်။ console ဟု အမည်ပေးထားသော key အတွက် key/value pair များကို ဖယ်ရှားပါ။ ၎င်းသည် အောက်ပါအတိုင်းဖြစ်နိုင်ပါသည်:

      console=serial0,115200 console=tty1 
      

      Cursor key များကို အသုံးပြု၍ entry များသို့သွားပြီး၊ del သို့မဟုတ် backspace key များဖြင့် ဖျက်ပါ။

      ဥပမာအားဖြင့်၊ သင့်ရဲ့မူရင်းဖိုင်သည် အောက်ပါအတိုင်းဖြစ်ပါက:

      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 Code တွင် ပြန်လည်ချိတ်ဆက်ပါ။

  5. Terminal မှ pi အသုံးပြုသူ၏ home directory တွင် gps-sensor ဟု folder အသစ်တစ်ခုဖန်တီးပါ။ ဒီ folder တွင် app.py ဟု ဖိုင်တစ်ခုဖန်တီးပါ။

  6. ဒီ folder ကို VS Code တွင် ဖွင့်ပါ။

  7. GPS module သည် UART ဒေတာကို serial port မှတဆင့် ပေးပို့သည်။ Python code မှ serial port နှင့် ဆက်သွယ်ရန် pyserial Pip package ကို install လုပ်ပါ:

    pip3 install pyserial
    
  8. app.py ဖိုင်တွင် အောက်ပါ code ကို ထည့်ပါ:

    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)
    

    ဒီ code သည် pyserial Pip package မှ serial module ကို import လုပ်သည်။ ထို့နောက် Grove Pi Base Hat ၏ UART port အတွက် serial port ၏ လိပ်စာဖြစ်သော /dev/ttyAMA0 သို့ ချိတ်ဆက်သည်။ ထို့နောက် serial connection တွင် ရှိသော ဒေတာများကို ရှင်းလင်းသည်။

    ထို့နောက် print_gps_data ဟုခေါ်သော function တစ်ခုကို သတ်မှတ်ပြီး၊ ၎င်းသို့ ပေးပို့သော line ကို console တွင် print လုပ်သည်။

    ထို့နောက် code သည် အဆုံးမရှိ loop တစ်ခုဖြင့် serial port မှ text line များကို ဖတ်ပြီး၊ တစ်ခုချင်းစီအတွက် print_gps_data function ကို ခေါ်သည်။

    ဒေတာအားလုံးကို ဖတ်ပြီးနောက် loop သည် ၁ စက္ကန့်အထိ sleep လုပ်ပြီး၊ ထို့နောက် ထပ်မံကြိုးစားသည်။

  9. ဒီ code ကို run လုပ်ပါ။ သင် 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
    

    သင့် code ကို ရပ်ပြီး ပြန်စတင်သောအခါ အောက်ပါ error များထဲမှ တစ်ခုခုရရှိပါက၊ သင့် while loop တွင် try - except block ထည့်ပါ။

    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 ကို code-gps/pi folder တွင် ရှာဖွေနိုင်ပါသည်။

😀 သင့်ရဲ့ GPS ဆင်ဆာအစီအစဉ်အောင်မြင်ပါပြီ!


အကြောင်းကြားချက်:
ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု Co-op Translator ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း၊ အလိုအလျောက် ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မတိကျမှုများ ပါရှိနိုင်သည်ကို သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတရ အရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူ့ဘာသာပြန်ပညာရှင်များမှ ပရော်ဖက်ရှင်နယ် ဘာသာပြန်မှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားလွဲမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။