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 ဆင်ဆာကို ချိတ်ဆက်ပါ။
-
Grove ကေဘယ်လ်တစ်ဖက်ကို GPS ဆင်ဆာပေါ်ရှိ ဆော့ကက်ထဲသို့ ထည့်ပါ။ ၎င်းသည် တစ်ဖက်သာ အလွယ်တကူသွားပါမည်။
-
Raspberry Pi ကို မီးပိတ်ထားသောအခြေအနေတွင် Grove ကေဘယ်လ်၏ အခြားဖက်ကို Pi တွင်တပ်ဆင်ထားသော Grove Base Hat ပေါ်ရှိ UART ဟုအမှတ်အသားပြုထားသော UART ဆော့ကက်ထဲသို့ ချိတ်ဆက်ပါ။ ဒီဆော့ကက်သည် အလယ်တန်းတန်းတွင်ရှိပြီး SD Card slot အနီး၊ USB port နှင့် ethernet socket ၏ အခြားဖက်တွင်ရှိသည်။
-
GPS ဆင်ဆာကို အင်တင်နာတပ်ဆင်ထားသောနေရာမှ မိုးကောင်းကင်ကို မြင်နိုင်သောနေရာတွင်ထားပါ - အကောင်းဆုံးအနေဖြင့် ပြတင်းပေါက်အနီး သို့မဟုတ် အပြင်ဘက်တွင်ထားပါ။ အင်တင်နာကို အတားအဆီးမရှိဘဲထားခြင်းဖြင့် သင့်ရဲ့အချက်အလက်ကို ပိုမိုရှင်းလင်းစွာရယူနိုင်သည်။
GPS ဆင်ဆာကို အစီအစဉ်ရေးပါ
ယခု Raspberry Pi သည် ချိတ်ဆက်ထားသော GPS ဆင်ဆာကို အသုံးပြုရန် အစီအစဉ်ရေးနိုင်ပါသည်။
လုပ်ဆောင်ရန် - GPS ဆင်ဆာကို အစီအစဉ်ရေးပါ
ဒီစက်ကို အစီအစဉ်ရေးပါ။
-
Pi ကို မီးဖွင့်ပြီး boot ပြုလုပ်ရန် စောင့်ပါ။
-
GPS ဆင်ဆာတွင် LED ၂ ခုရှိသည် - အပြာရောင် LED သည် ဒေတာပေးပို့သောအခါတွင် လင်းပွင့်ပြီး၊ အစိမ်းရောင် LED သည် ဂြိုဟ်တုမှ ဒေတာရရှိသောအခါ တစ်စက္ကန့်တစ်ကြိမ် လင်းပွင့်သည်။ Pi ကို မီးဖွင့်သောအခါ အပြာရောင် LED လင်းပွင့်နေကြောင်း သေချာပါစေ။ မိနစ်အနည်းငယ်အကြာတွင် အစိမ်းရောင် LED လင်းပွင့်ပါမည် - မဟုတ်ပါက အင်တင်နာ၏နေရာကို ပြောင်းလဲရန် လိုအပ်နိုင်သည်။
-
VS Code ကို Pi ပေါ်တွင် တိုက်ရိုက်ဖွင့်ပါ၊ သို့မဟုတ် Remote SSH extension ဖြင့် ချိတ်ဆက်ပါ။
-
Bluetooth ကို ပံ့ပိုးသော Raspberry Pi ၏ နောက်ဆုံးဗားရှင်းများတွင် Bluetooth သုံးသော serial port နှင့် Grove UART port သုံးသော serial port အကြား ပဋိပက္ခရှိသည်။ ၎င်းကို ဖြေရှင်းရန် အောက်ပါအတိုင်းလုပ်ဆောင်ပါ:
-
VS Code terminal မှ
/boot/config.txt
ဖိုင်ကိုnano
ဖြင့် ပြင်ဆင်ပါ။nano
သည် terminal text editor တစ်ခုဖြစ်ပြီး အောက်ပါ command ကို အသုံးပြုပါ:sudo nano /boot/config.txt
ဒီဖိုင်ကို VS Code မှတဆင့် မပြင်နိုင်ပါ၊ အကြီးတန်းအခွင့်အာဏာ (
sudo
permissions) ဖြင့်သာ ပြင်နိုင်ပါသည်။ VS Code သည် ဒီအခွင့်အာဏာဖြင့် မလုပ်ဆောင်ပါ။ -
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 တွင်)။ -
ဒီဖိုင်ကို သိမ်းပြီး nano မှ ထွက်ရန်
Ctrl+x
ကိုနှိပ်ပါ။ ပြင်ဆင်ထားသော buffer ကို သိမ်းမည်လားဟု မေးလျှင်y
ကိုနှိပ်ပြီး၊/boot/config.txt
ကို overwrite လုပ်ရန် အတည်ပြုရန်enter
ကိုနှိပ်ပါ။မှားယွင်းမှုရှိပါက သိမ်းမလုပ်ဘဲ ထွက်နိုင်ပြီး၊ အဆင့်များကို ထပ်မံလုပ်ဆောင်နိုင်ပါသည်။
-
/boot/cmdline.txt
ဖိုင်ကို nano ဖြင့် ပြင်ဆင်ပါ၊ အောက်ပါ command ကို အသုံးပြုပါ:sudo nano /boot/cmdline.txt
-
ဒီဖိုင်တွင် 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
-
အထက်ပါအဆင့်များကို လိုက်နာပြီး ဖိုင်ကို သိမ်းပြီး nano မှ ထွက်ပါ။
-
သင့် Pi ကို ပြန်လည်စတင်ပါ၊ Pi ပြန်လည်စတင်ပြီးနောက် VS Code တွင် ပြန်လည်ချိတ်ဆက်ပါ။
-
-
Terminal မှ
pi
အသုံးပြုသူ၏ home directory တွင်gps-sensor
ဟု folder အသစ်တစ်ခုဖန်တီးပါ။ ဒီ folder တွင်app.py
ဟု ဖိုင်တစ်ခုဖန်တီးပါ။ -
ဒီ folder ကို VS Code တွင် ဖွင့်ပါ။
-
GPS module သည် UART ဒေတာကို serial port မှတဆင့် ပေးပို့သည်။ Python code မှ serial port နှင့် ဆက်သွယ်ရန်
pyserial
Pip package ကို install လုပ်ပါ:pip3 install pyserial
-
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 လုပ်ပြီး၊ ထို့နောက် ထပ်မံကြိုးစားသည်။
-
ဒီ 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 ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း၊ အလိုအလျောက် ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မတိကျမှုများ ပါရှိနိုင်သည်ကို သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတရ အရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူ့ဘာသာပြန်ပညာရှင်များမှ ပရော်ဖက်ရှင်နယ် ဘာသာပြန်မှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားလွဲမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။