# جی پی ایس ڈیٹا پڑھیں - راسپبیری پائی اس سبق کے اس حصے میں، آپ اپنے راسپبیری پائی میں ایک جی پی ایس سینسر شامل کریں گے اور اس سے ڈیٹا پڑھیں گے۔ ## ہارڈویئر راسپبیری پائی کو ایک جی پی ایس سینسر کی ضرورت ہے۔ آپ جو سینسر استعمال کریں گے وہ [Grove GPS Air530 سینسر](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html) ہے۔ یہ سینسر تیزی اور درستگی کے ساتھ مختلف جی پی ایس سسٹمز سے جڑ سکتا ہے۔ یہ سینسر دو حصوں پر مشتمل ہے - سینسر کی بنیادی الیکٹرانکس اور ایک بیرونی اینٹینا جو ایک پتلی تار کے ذریعے جڑا ہوتا ہے تاکہ سیٹلائٹس سے ریڈیو ویوز کو پکڑ سکے۔ یہ ایک UART سینسر ہے، اس لیے یہ جی پی ایس ڈیٹا UART کے ذریعے بھیجتا ہے۔ ## جی پی ایس سینسر کو جوڑیں Grove GPS سینسر کو راسپبیری پائی کے ساتھ جوڑا جا سکتا ہے۔ ### کام - جی پی ایس سینسر کو جوڑیں جی پی ایس سینسر کو جوڑیں۔ ![ایک Grove GPS سینسر](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ur.png) 1. Grove کیبل کے ایک سرے کو جی پی ایس سینسر کے ساکٹ میں ڈالیں۔ یہ صرف ایک ہی سمت میں داخل ہوگا۔ 1. راسپبیری پائی کو بند کر کے، Grove کیبل کے دوسرے سرے کو Grove Base Hat پر موجود **UART** کے نشان والے ساکٹ میں جوڑیں۔ یہ ساکٹ درمیانی قطار میں ہے، ایس ڈی کارڈ سلاٹ کے قریب، یو ایس بی پورٹس اور ایتھرنیٹ ساکٹ کے مخالف سمت۔ ![Grove GPS سینسر UART ساکٹ سے جڑا ہوا](../../../../../translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ur.png) 1. جی پی ایس سینسر کو اس طرح رکھیں کہ جڑا ہوا اینٹینا آسمان کو دیکھ سکے - مثالی طور پر کھڑکی کے قریب یا باہر۔ اینٹینا کے راستے میں کسی چیز کے نہ ہونے سے سگنل زیادہ واضح طور پر ملتا ہے۔ ## جی پی ایس سینسر کو پروگرام کریں اب راسپبیری پائی کو جڑے ہوئے جی پی ایس سینسر کے استعمال کے لیے پروگرام کیا جا سکتا ہے۔ ### کام - جی پی ایس سینسر کو پروگرام کریں ڈیوائس کو پروگرام کریں۔ 1. پائی کو آن کریں اور اس کے بوٹ ہونے کا انتظار کریں۔ 1. جی پی ایس سینسر میں 2 ایل ای ڈیز ہیں - ایک نیلی ایل ای ڈی جو ڈیٹا کے ٹرانسمٹ ہونے پر چمکتی ہے، اور ایک سبز ایل ای ڈی جو سیٹلائٹس سے ڈیٹا موصول ہونے پر ہر سیکنڈ چمکتی ہے۔ یقینی بنائیں کہ جب آپ پائی کو آن کریں تو نیلی ایل ای ڈی چمک رہی ہو۔ چند منٹ بعد سبز ایل ای ڈی چمکے گی - اگر ایسا نہ ہو تو آپ کو اینٹینا کی پوزیشن تبدیل کرنی پڑ سکتی ہے۔ 1. وی ایس کوڈ لانچ کریں، یا تو براہ راست پائی پر، یا ریموٹ ایس ایس ایچ ایکسٹینشن کے ذریعے جڑ کر۔ > ⚠️ آپ [سبق 1 میں وی ایس کوڈ سیٹ اپ اور لانچ کرنے کی ہدایات](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md) کا حوالہ دے سکتے ہیں۔ 1. نئے راسپبیری پائی ورژنز جو بلوٹوتھ کو سپورٹ کرتے ہیں، ان میں بلوٹوتھ کے لیے استعمال ہونے والے سیریل پورٹ اور Grove UART پورٹ کے لیے استعمال ہونے والے سیریل پورٹ کے درمیان تنازعہ ہوتا ہے۔ اسے ٹھیک کرنے کے لیے، درج ذیل کریں: 1. وی ایس کوڈ ٹرمینل سے، `nano` کے ذریعے `/boot/config.txt` فائل کو درج ذیل کمانڈ کے ساتھ ایڈٹ کریں: ```sh sudo nano /boot/config.txt ``` > یہ فائل وی ایس کوڈ کے ذریعے ایڈٹ نہیں کی جا سکتی کیونکہ اسے `sudo` پرمیشنز کے ساتھ ایڈٹ کرنے کی ضرورت ہے، جو ایک بلند پرمیشن ہے۔ وی ایس کوڈ اس پرمیشن کے ساتھ نہیں چلتا۔ 1. کرسر کیز کا استعمال کرتے ہوئے فائل کے آخر تک جائیں، پھر نیچے دیا گیا کوڈ کاپی کریں اور فائل کے آخر میں پیسٹ کریں: ```ini dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1 ``` آپ اپنے ڈیوائس کے نارمل کی بورڈ شارٹ کٹس کا استعمال کرتے ہوئے پیسٹ کر سکتے ہیں (`Ctrl+v` ونڈوز، لینکس یا راسپبیری پائی او ایس پر، `Cmd+v` میک او ایس پر)۔ 1. اس فائل کو محفوظ کریں اور `nano` سے باہر نکلنے کے لیے `Ctrl+x` دبائیں۔ جب آپ سے پوچھا جائے کہ کیا آپ تبدیل شدہ بفر کو محفوظ کرنا چاہتے ہیں تو `y` دبائیں، پھر تصدیق کے لیے `enter` دبائیں۔ > اگر آپ سے کوئی غلطی ہو جائے تو آپ بغیر محفوظ کیے باہر نکل سکتے ہیں، پھر ان مراحل کو دوبارہ دہرائیں۔ 1. `nano` کے ذریعے `/boot/cmdline.txt` فائل کو درج ذیل کمانڈ کے ساتھ ایڈٹ کریں: ```sh sudo nano /boot/cmdline.txt ``` 1. اس فائل میں کئی کلید/ویلیو جوڑے ہیں جو اسپیس سے الگ ہیں۔ کلید `console` کے لیے کسی بھی کلید/ویلیو جوڑوں کو ہٹا دیں۔ یہ ممکنہ طور پر اس طرح نظر آئیں گے: ```output console=serial0,115200 console=tty1 ``` آپ کرسر کیز کا استعمال کرتے ہوئے ان اندراجات پر جا سکتے ہیں، پھر نارمل `del` یا `backspace` کیز کا استعمال کرتے ہوئے حذف کر سکتے ہیں۔ مثال کے طور پر، اگر آپ کی اصل فائل اس طرح نظر آتی ہے: ```output console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait ``` نئی ورژن اس طرح ہوگی: ```output root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait ``` 1. اوپر دیے گئے مراحل کو فائل محفوظ کرنے اور `nano` سے باہر نکلنے کے لیے دہرائیں۔ 1. اپنے پائی کو ریبوٹ کریں، پھر پائی کے ریبوٹ ہونے کے بعد وی ایس کوڈ میں دوبارہ جڑیں۔ 1. ٹرمینل سے، `pi` یوزر کے ہوم ڈائریکٹری میں ایک نیا فولڈر بنائیں جس کا نام `gps-sensor` ہو۔ اس فولڈر میں `app.py` نام کی ایک فائل بنائیں۔ 1. اس فولڈر کو وی ایس کوڈ میں کھولیں۔ 1. جی پی ایس ماڈیول سیریل پورٹ کے ذریعے UART ڈیٹا بھیجتا ہے۔ سیریل پورٹ کے ساتھ اپنے پائتھون کوڈ سے بات چیت کرنے کے لیے `pyserial` پِپ پیکج انسٹال کریں: ```sh pip3 install pyserial ``` 1. اپنے `app.py` فائل میں درج ذیل کوڈ شامل کریں: ```python 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 Hat اپنے UART پورٹ کے لیے استعمال کرتا ہے۔ اس کے بعد یہ اس سیریل کنکشن سے کسی بھی موجودہ ڈیٹا کو صاف کرتا ہے۔ اس کے بعد ایک فنکشن `print_gps_data` ڈیفائن کیا گیا ہے جو کنسول پر دی گئی لائن کو پرنٹ کرتا ہے۔ اس کے بعد کوڈ ہمیشہ کے لیے لوپ کرتا ہے، ہر لوپ میں سیریل پورٹ سے جتنی لائنز پڑھ سکتا ہے پڑھتا ہے۔ یہ ہر لائن کے لیے `print_gps_data` فنکشن کو کال کرتا ہے۔ تمام ڈیٹا پڑھنے کے بعد، لوپ 1 سیکنڈ کے لیے سوتا ہے، پھر دوبارہ کوشش کرتا ہے۔ 1. اس کوڈ کو چلائیں۔ آپ جی پی ایس سینسر سے خام آؤٹ پٹ دیکھیں گے، جو کچھ اس طرح ہوگا: ```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` بلاک شامل کریں۔ ```output 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 ``` ```python 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](../../../../../3-transport/lessons/1-location-tracking/code-gps/pi) فولڈر میں تلاش کر سکتے ہیں۔ 😀 آپ کا جی پی ایس سینسر پروگرام کامیاب رہا! --- **ڈسکلیمر**: یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔