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

15 KiB

র‌্যাস্পবেরি পাই দিয়ে জিপিএস ডেটা পড়া

এই পাঠের এই অংশে, আপনি আপনার র‌্যাস্পবেরি পাই-তে একটি জিপিএস সেন্সর যোগ করবেন এবং এর থেকে ডেটা পড়বেন।

হার্ডওয়্যার

র‌্যাস্পবেরি পাই-এর জন্য একটি জিপিএস সেন্সর প্রয়োজন।

আপনি যে সেন্সরটি ব্যবহার করবেন তা হলো Grove GPS Air530 সেন্সর। এই সেন্সরটি একাধিক জিপিএস সিস্টেমের সাথে সংযোগ স্থাপন করতে পারে দ্রুত এবং সঠিক ডেটা পাওয়ার জন্য। সেন্সরটি দুটি অংশে বিভক্ত - সেন্সরের মূল ইলেকট্রনিক্স এবং একটি বাহ্যিক অ্যান্টেনা যা স্যাটেলাইট থেকে রেডিও তরঙ্গ গ্রহণ করতে একটি পাতলা তারের মাধ্যমে সংযুক্ত।

এটি একটি UART সেন্সর, তাই এটি UART এর মাধ্যমে জিপিএস ডেটা পাঠায়।

জিপিএস সেন্সর সংযুক্ত করা

Grove GPS সেন্সরটি র‌্যাস্পবেরি পাই-এর সাথে সংযুক্ত করা যেতে পারে।

কাজ - জিপিএস সেন্সর সংযুক্ত করা

জিপিএস সেন্সরটি সংযুক্ত করুন।

একটি Grove GPS সেন্সর

  1. Grove কেবলের এক প্রান্ত জিপিএস সেন্সরের সকেটে প্রবেশ করান। এটি শুধুমাত্র একটি নির্দিষ্ট দিকেই প্রবেশ করবে।

  2. র‌্যাস্পবেরি পাই বন্ধ অবস্থায়, Grove কেবলের অন্য প্রান্তটি Grove Base হ্যাটের UART চিহ্নিত সকেটে সংযুক্ত করুন। এই সকেটটি মাঝের সারিতে, SD কার্ড স্লটের কাছাকাছি পাশে অবস্থিত, USB পোর্ট এবং ইথারনেট সকেটের বিপরীত দিকে।

    UART সকেটে সংযুক্ত Grove GPS সেন্সর

  3. জিপিএস সেন্সরটি এমনভাবে স্থাপন করুন যাতে সংযুক্ত অ্যান্টেনাটি আকাশের দিকে দৃশ্যমান থাকে - আদর্শভাবে একটি খোলা জানালার পাশে বা বাইরে। অ্যান্টেনার সামনে কিছু না থাকলে পরিষ্কার সংকেত পাওয়া সহজ হয়।

জিপিএস সেন্সর প্রোগ্রাম করা

এখন র‌্যাস্পবেরি পাই-কে সংযুক্ত জিপিএস সেন্সরটি ব্যবহার করার জন্য প্রোগ্রাম করা যাবে।

কাজ - জিপিএস সেন্সর প্রোগ্রাম করা

ডিভাইসটি প্রোগ্রাম করুন।

  1. পাই চালু করুন এবং এটি বুট হওয়া পর্যন্ত অপেক্ষা করুন।

  2. জিপিএস সেন্সরের দুটি LED আছে - একটি নীল LED যা ডেটা প্রেরণের সময় ঝলকায় এবং একটি সবুজ LED যা স্যাটেলাইট থেকে ডেটা গ্রহণ করার সময় প্রতি সেকেন্ডে একবার ঝলকায়। পাই চালু করার সময় নিশ্চিত করুন যে নীল LED ঝলকাচ্ছে। কয়েক মিনিট পর সবুজ LED ঝলকাবে - যদি না ঝলকায়, তাহলে অ্যান্টেনার অবস্থান পরিবর্তন করতে হতে পারে।

  3. VS Code চালু করুন, হয় সরাসরি পাই-তে অথবা Remote SSH এক্সটেনশনের মাধ্যমে সংযোগ করে।

    ⚠️ পাঠ ১-এ VS Code সেটআপ এবং চালু করার নির্দেশনা প্রয়োজন হলে এখানে দেখুন

  4. নতুন র‌্যাস্পবেরি পাই মডেলগুলোর ক্ষেত্রে, যেগুলো ব্লুটুথ সমর্থন করে, ব্লুটুথের জন্য ব্যবহৃত সিরিয়াল পোর্ট এবং Grove UART পোর্টের জন্য ব্যবহৃত সিরিয়াল পোর্টের মধ্যে একটি দ্বন্দ্ব রয়েছে। এটি ঠিক করতে নিম্নলিখিত কাজগুলো করুন:

    1. VS Code টার্মিনাল থেকে, nano ব্যবহার করে /boot/config.txt ফাইলটি সম্পাদনা করুন। এটি একটি বিল্ট-ইন টার্মিনাল টেক্সট এডিটর। কমান্ডটি হলো:

      sudo nano /boot/config.txt
      

      এই ফাইলটি VS Code দিয়ে সম্পাদনা করা যাবে না কারণ এটি sudo অনুমতি, অর্থাৎ উচ্চতর অনুমতি, প্রয়োজন। VS Code এই অনুমতিতে চলে না।

    2. কার্সর কী ব্যবহার করে ফাইলের শেষে যান। তারপর নিচের কোডটি কপি করে ফাইলের শেষে পেস্ট করুন:

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

      আপনার ডিভাইসের জন্য সাধারণ কিবোর্ড শর্টকাট ব্যবহার করে পেস্ট করুন (Windows, Linux বা Raspberry Pi OS-এ Ctrl+v, macOS-এ Cmd+v)।

    3. এই ফাইলটি সংরক্ষণ করুন এবং Ctrl+x চাপুন। পরিবর্তিত বাফার সংরক্ষণ করতে চাইলে y চাপুন, তারপর /boot/config.txt ওভাররাইট করতে নিশ্চিত করতে 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. আপনার পাই রিবুট করুন, তারপর পাই রিবুট হওয়ার পর VS Code-এ পুনরায় সংযোগ করুন।

  5. টার্মিনাল থেকে, pi ব্যবহারকারীর হোম ডিরেক্টরিতে gps-sensor নামে একটি নতুন ফোল্ডার তৈরি করুন। এই ফোল্ডারে app.py নামে একটি ফাইল তৈরি করুন।

  6. এই ফোল্ডারটি VS Code-এ খুলুন।

  7. GPS মডিউলটি সিরিয়াল পোর্টের মাধ্যমে UART ডেটা পাঠায়। Python কোড থেকে সিরিয়াল পোর্টের সাথে যোগাযোগ করতে pyserial Pip প্যাকেজটি ইনস্টল করুন:

    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 Pip প্যাকেজ থেকে serial মডিউলটি ইমপোর্ট করে। এটি /dev/ttyAMA0 সিরিয়াল পোর্টের সাথে সংযোগ স্থাপন করে - এটি Grove Pi Base Hat-এর UART পোর্টের সিরিয়াল পোর্টের ঠিকানা। এটি এই সিরিয়াল সংযোগ থেকে বিদ্যমান ডেটা মুছে ফেলে।

    এরপর একটি print_gps_data নামের ফাংশন সংজ্ঞায়িত করা হয় যা কনসোলে প্রাপ্ত লাইনের ডেটা প্রিন্ট করে।

    এরপর কোডটি অনন্তকাল ধরে লুপ করে, প্রতিটি লুপে সিরিয়াল পোর্ট থেকে যতটা সম্ভব লাইন পড়ে। এটি প্রতিটি লাইনের জন্য print_gps_data ফাংশনটি কল করে।

    সমস্ত ডেটা পড়ার পর, লুপটি ১ সেকেন্ডের জন্য ঘুমায়, তারপর আবার চেষ্টা করে।

  9. এই কোডটি চালান। আপনি জিপিএস সেন্সরের কাঁচা আউটপুট দেখতে পাবেন, যা এরকম কিছু হতে পারে:

    $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')
    
        # 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 ফোল্ডারে খুঁজে পেতে পারেন।

😀 আপনার জিপিএস সেন্সর প্রোগ্রাম সফল হয়েছে!


অস্বীকৃতি:
এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না।