# GPS डेटा पढ्नुहोस् - रास्पबेरी पाई यस पाठको यस भागमा, तपाईं आफ्नो रास्पबेरी पाईमा GPS सेन्सर थप्नुहुनेछ र यसबाट मानहरू पढ्नुहुनेछ। ## हार्डवेयर रास्पबेरी पाईलाई GPS सेन्सर चाहिन्छ। तपाईंले प्रयोग गर्ने सेन्सर [Grove GPS Air530 सेन्सर](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html) हो। यो सेन्सरले धेरै GPS प्रणालीहरूसँग जडान गर्न सक्छ जसले छिटो र सही स्थान निर्धारण गर्न मद्दत गर्दछ। यो सेन्सर दुई भागहरूमा बनेको छ - सेन्सरको मुख्य इलेक्ट्रोनिक्स र एक बाह्य एन्टेना, जुन पातलो तारद्वारा जडान गरिएको छ, उपग्रहबाट रेडियो तरंगहरू टिप्न। यो UART सेन्सर हो, जसले GPS डेटा UART मार्फत पठाउँछ। ## GPS सेन्सर जडान गर्नुहोस् Grove GPS सेन्सरलाई रास्पबेरी पाईसँग जडान गर्न सकिन्छ। ### कार्य - GPS सेन्सर जडान गर्नुहोस् GPS सेन्सर जडान गर्नुहोस्। ![A grove GPS sensor](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.ne.png) 1. Grove केबलको एक छेउ GPS सेन्सरको सकेटमा हाल्नुहोस्। यो केवल एक तरिकाबाट मात्र जडान हुन्छ। 1. रास्पबेरी पाई बन्द अवस्थामा राखेर, Grove केबलको अर्को छेउलाई Grove Base Hat मा रहेको **UART** सकेटमा जडान गर्नुहोस्। यो सकेट SD कार्ड स्लटको नजिकको पंक्तिमा छ, USB पोर्ट र इथरनेट सकेटको विपरीत छेउमा। ![The grove GPS sensor connected to the UART socket](../../../../../translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.ne.png) 1. GPS सेन्सरलाई यस्तो स्थानमा राख्नुहोस् जहाँ जडान गरिएको एन्टेनाले आकाश देख्न सक्दछ - आदर्श रूपमा खुला झ्यालको छेउमा वा बाहिर। एन्टेनाको अगाडि कुनै अवरोध नभएको अवस्थामा स्पष्ट सिग्नल प्राप्त गर्न सजिलो हुन्छ। ## GPS सेन्सर प्रोग्राम गर्नुहोस् अब रास्पबेरी पाईलाई जडान गरिएको GPS सेन्सर प्रयोग गर्न प्रोग्राम गर्न सकिन्छ। ### कार्य - GPS सेन्सर प्रोग्राम गर्नुहोस् डिभाइस प्रोग्राम गर्नुहोस्। 1. पाईलाई पावर दिनुहोस् र बुट हुने समय पर्खनुहोस्। 1. GPS सेन्सरमा 2 LEDs छन् - नीलो LED, जुन डेटा ट्रान्समिट हुँदा चम्किन्छ, र हरियो LED, जुन उपग्रहबाट डेटा प्राप्त गर्दा प्रत्येक सेकेन्डमा चम्किन्छ। पाई पावर अप गर्दा नीलो LED चम्किरहेको सुनिश्चित गर्नुहोस्। केही मिनेटपछि हरियो LED चम्किन्छ - यदि चम्किएन भने, एन्टेनाको स्थान परिवर्तन गर्न आवश्यक हुन सक्छ। 1. VS Code सुरु गर्नुहोस्, चाहे पाईमा सिधै वा Remote SSH एक्सटेन्सन मार्फत जडान गरेर। > ⚠️ [पाठ 1 मा VS Code सेटअप र सुरु गर्ने निर्देशिका हेर्न सकिन्छ](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md)। 1. नयाँ संस्करणको रास्पबेरी पाईमा ब्लुटुथ समर्थन छ, जसले ब्लुटुथको लागि प्रयोग हुने सिरियल पोर्ट र Grove UART पोर्टको लागि प्रयोग हुने पोर्टमा द्वन्द्व सिर्जना गर्दछ। यसलाई समाधान गर्न निम्न कार्य गर्नुहोस्: 1. VS Code टर्मिनलबाट, `nano` प्रयोग गरेर `/boot/config.txt` फाइल सम्पादन गर्नुहोस्। आदेश: ```sh sudo nano /boot/config.txt ``` > यो फाइल VS Code मार्फत सम्पादन गर्न सकिँदैन किनभने `sudo` अनुमति चाहिन्छ। VS Codeले यो अनुमति प्रयोग गर्दैन। 1. कर्सर कुञ्जीहरू प्रयोग गरेर फाइलको अन्त्यमा जानुहोस्। तलको कोड प्रतिलिपि गरेर फाइलको अन्त्यमा टाँस्नुहोस्: ```ini dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1 ``` तपाईंको उपकरणको सामान्य किबोर्ड सर्टकट प्रयोग गरेर टाँस्न सकिन्छ (`Ctrl+v` Windows, Linux वा Raspberry Pi OS मा, `Cmd+v` macOS मा)। 1. फाइल बचत गर्न र `nano` बाट बाहिर निस्कन `Ctrl+x` थिच्नुहोस्। जब सोधिन्छ कि संशोधित बफर बचत गर्न चाहनुहुन्छ भने, `y` थिच्नुहोस्, त्यसपछि `/boot/config.txt` ओभरराइट गर्न `enter` थिच्नुहोस्। > यदि गल्ती भयो भने, बचत नगरी बाहिर निस्कन सक्नुहुन्छ र यी चरणहरू दोहोर्याउन सक्नुहुन्छ। 1. `nano` प्रयोग गरेर `/boot/cmdline.txt` फाइल सम्पादन गर्नुहोस्। आदेश: ```sh sudo nano /boot/cmdline.txt ``` 1. यो फाइलमा स्पेसद्वारा छुट्याइएका धेरै key/value जोडीहरू छन्। `console` को लागि key भएका जोडीहरू हटाउनुहोस्। ती सम्भवतः यस प्रकारका देखिन्छन्: ```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. आफ्नो पाई पुनः सुरु गर्नुहोस्, त्यसपछि पाई पुनः सुरु भएपछि VS Code मा पुनः जडान गर्नुहोस्। 1. टर्मिनलबाट, `pi` प्रयोगकर्ताको होम डाइरेक्टरीमा `gps-sensor` नामको नयाँ फोल्डर बनाउनुहोस्। यस फोल्डरमा `app.py` नामको फाइल बनाउनुहोस्। 1. यो फोल्डर VS Code मा खोल्नुहोस्। 1. GPS मोड्युलले UART डेटा सिरियल पोर्ट मार्फत पठाउँछ। Python कोडबाट सिरियल पोर्टसँग संवाद गर्न `pyserial` Pip प्याकेज स्थापना गर्नुहोस्: ```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` Pip प्याकेजबाट `serial` मोड्युल आयात गर्दछ। त्यसपछि `/dev/ttyAMA0` सिरियल पोर्टसँग जडान गर्दछ - यो Grove Pi Base Hat को UART पोर्टको सिरियल पोर्टको ठेगाना हो। यसले यो सिरियल कनेक्शनबाट कुनै पनि अवस्थित डेटा खाली गर्दछ। त्यसपछि `print_gps_data` नामको एक फङ्सन परिभाषित गरिएको छ, जसले पास गरिएको लाइनलाई कन्सोलमा प्रिन्ट गर्दछ। त्यसपछि कोडले अनन्त लूपमा चल्छ, प्रत्येक लूपमा सिरियल पोर्टबाट धेरै लाइनहरू पढ्छ। यो प्रत्येक लाइनको लागि `print_gps_data` फङ्सनलाई कल गर्दछ। सबै डेटा पढिसकेपछि, लूप 1 सेकेन्डको लागि सुत्छ, त्यसपछि फेरि प्रयास गर्दछ। 1. यो कोड चलाउनुहोस्। तपाईं GPS सेन्सरबाट कच्चा आउटपुट देख्नुहुनेछ, केही यस प्रकारको: ```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) फोल्डरमा पाउन सक्नुहुन्छ। 😀 तपाईंको GPS सेन्सर प्रोग्राम सफल भयो! --- **अस्वीकरण**: यो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरेर अनुवाद गरिएको छ। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।