# GPS डेटा पढ्नुहोस् - भर्चुअल IoT हार्डवेयर यस पाठको यस भागमा, तपाईं आफ्नो भर्चुअल IoT उपकरणमा GPS सेन्सर थप्नुहुनेछ र यसबाट मानहरू पढ्नुहुनेछ। ## भर्चुअल हार्डवेयर भर्चुअल IoT उपकरणले UART मार्फत सिरियल पोर्टमा पहुँचयोग्य सिमुलेटेड GPS सेन्सर प्रयोग गर्नेछ। भौतिक GPS सेन्सरले GPS उपग्रहहरूबाट रेडियो तरंगहरू टिप्नको लागि एन्टेना हुनेछ, र GPS संकेतहरूलाई GPS डेटा मा रूपान्तरण गर्नेछ। भर्चुअल संस्करणले तपाईंलाई अक्षांश र देशान्तर सेट गर्न, कच्चा NMEA वाक्यहरू पठाउन, वा धेरै स्थानहरू भएको GPX फाइल अपलोड गर्न अनुमति दिएर यसलाई सिमुलेट गर्दछ, जुन क्रमिक रूपमा फर्काइन्छ। > 🎓 NMEA वाक्यहरू यस पाठमा पछि कभर गरिनेछ ### CounterFit मा सेन्सर थप्नुहोस् भर्चुअल GPS सेन्सर प्रयोग गर्न, तपाईंले यसलाई CounterFit एपमा थप्न आवश्यक छ। #### कार्य - CounterFit मा सेन्सर थप्नुहोस् CounterFit एपमा GPS सेन्सर थप्नुहोस्। 1. आफ्नो कम्प्युटरमा `gps-sensor` नामक फोल्डरमा नयाँ Python एप सिर्जना गर्नुहोस्, जसमा `app.py` नामक एकल फाइल र Python भर्चुअल वातावरण होस्, र CounterFit pip प्याकेजहरू थप्नुहोस्। > ⚠️ आवश्यक परेमा [पाठ १ मा CounterFit Python प्रोजेक्ट सिर्जना र सेटअप गर्ने निर्देशनहरू हेर्न सक्नुहुन्छ](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md)। 1. UART आधारित सेन्सरहरूसँग सिरियल कनेक्शन मार्फत कुरा गर्न सक्ने CounterFit शिम स्थापना गर्न थप Pip प्याकेज स्थापना गर्नुहोस्। सुनिश्चित गर्नुहोस् कि तपाईंले यो भर्चुअल वातावरण सक्रिय भएको टर्मिनलबाट स्थापना गर्दै हुनुहुन्छ। ```sh pip install counterfit-shims-serial ``` 1. सुनिश्चित गर्नुहोस् कि CounterFit वेब एप चलिरहेको छ। 1. GPS सेन्सर सिर्जना गर्नुहोस्: 1. *Sensors* प्यानको *Create sensor* बक्समा, *Sensor type* ड्रपडाउन बक्समा *UART GPS* चयन गर्नुहोस्। 1. *Port* लाई */dev/ttyAMA0* मा सेट गर्नुहोस्। 1. **Add** बटन चयन गरेर `/dev/ttyAMA0` पोर्टमा GPS सेन्सर सिर्जना गर्नुहोस्। ![GPS सेन्सर सेटिङहरू](../../../../../translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.ne.png) GPS सेन्सर सिर्जना गरिनेछ र सेन्सरहरूको सूचीमा देखा पर्नेछ। ![GPS सेन्सर सिर्जना गरिएको](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.ne.png) ## GPS सेन्सर प्रोग्राम गर्नुहोस् अब भर्चुअल IoT उपकरणलाई भर्चुअल GPS सेन्सर प्रयोग गर्न प्रोग्राम गर्न सकिन्छ। ### कार्य - GPS सेन्सर प्रोग्राम गर्नुहोस् GPS सेन्सर एप प्रोग्राम गर्नुहोस्। 1. सुनिश्चित गर्नुहोस् कि `gps-sensor` एप VS Code मा खुला छ। 1. `app.py` फाइल खोल्नुहोस्। 1. CounterFit सँग एपलाई जडान गर्न `app.py` को माथिल्लो भागमा निम्न कोड थप्नुहोस्: ```python from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) ``` 1. आवश्यक पुस्तकालयहरू आयात गर्न, जसमा CounterFit सिरियल पोर्टको पुस्तकालय समावेश छ, निम्न कोड यसको तल थप्नुहोस्: ```python import time import counterfit_shims_serial serial = counterfit_shims_serial.Serial('/dev/ttyAMA0') ``` यो कोडले `counterfit_shims_serial` Pip प्याकेजबाट `serial` मोड्युल आयात गर्दछ। त्यसपछि यो `/dev/ttyAMA0` सिरियल पोर्टमा जडान गर्दछ - यो भर्चुअल GPS सेन्सरले आफ्नो UART पोर्टको लागि प्रयोग गर्ने सिरियल पोर्टको ठेगाना हो। 1. सिरियल पोर्टबाट पढ्न र मानहरू कन्सोलमा प्रिन्ट गर्न निम्न कोड यसको तल थप्नुहोस्: ```python 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) ``` `print_gps_data` नामक एक फङ्सन परिभाषित गरिएको छ जसले कन्सोलमा पास गरिएको लाइन प्रिन्ट गर्दछ। त्यसपछि कोडले अनन्त लूप चलाउँछ, प्रत्येक लूपमा सिरियल पोर्टबाट सकेसम्म धेरै पाठको लाइनहरू पढ्दै। यो प्रत्येक लाइनको लागि `print_gps_data` फङ्सनलाई कल गर्दछ। सबै डेटा पढिसकेपछि, लूप १ सेकेन्डको लागि सुत्छ, त्यसपछि फेरि प्रयास गर्दछ। 1. यो कोड चलाउनुहोस्, सुनिश्चित गर्दै कि CounterFit एप चलिरहेको टर्मिनलभन्दा फरक टर्मिनल प्रयोग गर्दै हुनुहुन्छ, ताकि CounterFit एप चलिरहोस्। 1. CounterFit एपबाट GPS सेन्सरको मान परिवर्तन गर्नुहोस्। तपाईं यसलाई निम्न तरिकाहरूमा गर्न सक्नुहुन्छ: * **Source** लाई `Lat/Lon` मा सेट गर्नुहोस्, र GPS फिक्स प्राप्त गर्न प्रयोग गरिएको उपग्रहहरूको संख्या सहित स्पष्ट अक्षांश, देशान्तर सेट गर्नुहोस्। यो मान केवल एक पटक पठाइनेछ, त्यसैले **Repeat** बक्स जाँच गरेर डेटा प्रत्येक सेकेन्डमा दोहोर्याउन सेट गर्नुहोस्। ![Lat Lon चयन गरिएको GPS सेन्सर](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.ne.png) * **Source** लाई `NMEA` मा सेट गर्नुहोस् र केही NMEA वाक्यहरू पाठ बक्समा थप्नुहोस्। यी सबै मानहरू पठाइनेछ, प्रत्येक नयाँ GGA (स्थिति फिक्स) वाक्य पढ्न अघि १ सेकेन्डको ढिलाइ हुनेछ। ![NMEA वाक्य सेट गरिएको GPS सेन्सर](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.ne.png) तपाईं [nmeagen.org](https://www.nmeagen.org) जस्ता उपकरण प्रयोग गरेर नक्सामा ड्र गरि यी वाक्यहरू सिर्जना गर्न सक्नुहुन्छ। यी मानहरू केवल एक पटक पठाइनेछ, त्यसैले **Repeat** बक्स जाँच गरेर डेटा एक सेकेन्ड पछि दोहोर्याउन सेट गर्नुहोस्। * **Source** लाई GPX फाइलमा सेट गर्नुहोस्, र ट्र्याक स्थानहरू भएको GPX फाइल अपलोड गर्नुहोस्। तपाईं [AllTrails](https://www.alltrails.com/) जस्ता लोकप्रिय नक्सा र हाइकिङ साइटहरूबाट GPX फाइलहरू डाउनलोड गर्न सक्नुहुन्छ। यी फाइलहरूमा ट्रेलको रूपमा धेरै GPS स्थानहरू हुन्छन्, र GPS सेन्सरले प्रत्येक नयाँ स्थान १ सेकेन्डको अन्तरालमा फर्काउनेछ। ![GPX फाइल सेट गरिएको GPS सेन्सर](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.ne.png) यी मानहरू केवल एक पटक पठाइनेछ, त्यसैले **Repeat** बक्स जाँच गरेर डेटा एक सेकेन्ड पछि दोहोर्याउन सेट गर्नुहोस्। एकपटक तपाईंले GPS सेटिङहरू कन्फिगर गरेपछि, यी मानहरू सेन्सरमा प्रतिबद्ध गर्न **Set** बटन चयन गर्नुहोस्। 1. तपाईं GPS सेन्सरबाट कच्चा आउटपुट देख्नुहुनेछ, केही यस प्रकारको: ```output $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 ``` > 💁 तपाईं यो कोड [code-gps/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps/virtual-device) फोल्डरमा फेला पार्न सक्नुहुन्छ। 😀 तपाईंको GPS सेन्सर प्रोग्राम सफल भयो! --- **अस्वीकरण**: यो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरेर अनुवाद गरिएको छ। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादहरूमा त्रुटि वा अशुद्धता हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।