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

12 KiB

خواندن داده‌های GPS - رزبری پای

در این بخش از درس، شما یک حسگر GPS به رزبری پای اضافه می‌کنید و مقادیر آن را می‌خوانید.

سخت‌افزار

رزبری پای به یک حسگر GPS نیاز دارد.

حسگری که استفاده می‌کنید Grove GPS Air530 sensor است. این حسگر می‌تواند به سیستم‌های مختلف GPS متصل شود تا موقعیت‌یابی سریع و دقیق انجام دهد. این حسگر از دو بخش تشکیل شده است - بخش الکترونیکی اصلی حسگر و یک آنتن خارجی که با یک سیم نازک به حسگر متصل شده تا امواج رادیویی ماهواره‌ها را دریافت کند.

این حسگر از نوع UART است و داده‌های GPS را از طریق UART ارسال می‌کند.

اتصال حسگر GPS

حسگر Grove GPS می‌تواند به رزبری پای متصل شود.

وظیفه - اتصال حسگر GPS

حسگر GPS را متصل کنید.

حسگر Grove GPS

  1. یک سر کابل Grove را به سوکت حسگر GPS وارد کنید. کابل فقط از یک جهت وارد می‌شود.

  2. با خاموش بودن رزبری پای، سر دیگر کابل Grove را به سوکت UART که با UART روی Grove Base hat متصل به رزبری پای مشخص شده است، وصل کنید. این سوکت در ردیف وسط، در سمت نزدیک به شیار کارت SD قرار دارد، در طرف مقابل پورت‌های USB و سوکت اترنت.

    حسگر Grove GPS متصل به سوکت UART

  3. حسگر GPS را در موقعیتی قرار دهید که آنتن متصل به آن دید به آسمان داشته باشد - ترجیحاً کنار یک پنجره باز یا در فضای باز. دریافت سیگنال واضح‌تر زمانی آسان‌تر است که چیزی جلوی آنتن نباشد.

برنامه‌نویسی حسگر GPS

اکنون می‌توانید رزبری پای را برای استفاده از حسگر GPS متصل برنامه‌نویسی کنید.

وظیفه - برنامه‌نویسی حسگر GPS

دستگاه را برنامه‌نویسی کنید.

  1. رزبری پای را روشن کنید و منتظر بوت شدن آن باشید.

  2. حسگر GPS دارای دو LED است - یک LED آبی که هنگام ارسال داده چشمک می‌زند و یک LED سبز که هر ثانیه هنگام دریافت داده از ماهواره‌ها چشمک می‌زند. مطمئن شوید که LED آبی هنگام روشن کردن رزبری پای چشمک می‌زند. پس از چند دقیقه، LED سبز شروع به چشمک زدن می‌کند - اگر این اتفاق نیفتاد، ممکن است نیاز باشد آنتن را جابجا کنید.

  3. VS Code را اجرا کنید، یا مستقیماً روی رزبری پای یا از طریق افزونه Remote SSH متصل شوید.

    ⚠️ می‌توانید به دستورالعمل‌های تنظیم و اجرای VS Code در درس 1 در صورت نیاز مراجعه کنید.

  4. در نسخه‌های جدیدتر رزبری پای که از بلوتوث پشتیبانی می‌کنند، یک تضاد بین پورت سریال مورد استفاده برای بلوتوث و پورت مورد استفاده توسط 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 در ویندوز، لینوکس یا Raspberry Pi OS، Cmd+v در macOS) کپی کنید.

    3. این فایل را ذخیره کرده و با فشار دادن Ctrl+x از nano خارج شوید. وقتی از شما پرسیده شد که آیا می‌خواهید بافر تغییر یافته را ذخیره کنید، 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. رزبری پای را ریبوت کنید، سپس پس از ریبوت شدن دوباره در VS Code متصل شوید.

  5. از ترمینال، یک پوشه جدید در دایرکتوری خانگی کاربر pi به نام gps-sensor ایجاد کنید. یک فایل در این پوشه به نام app.py ایجاد کنید.

  6. این پوشه را در VS Code باز کنید.

  7. ماژول GPS داده‌های UART را از طریق یک پورت سریال ارسال می‌کند. بسته Pip به نام 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)
    

    این کد ماژول serial را از بسته Pip pyserial وارد می‌کند. سپس به پورت سریال /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 ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.