# GPS डेटा पढ़ें - वर्चुअल IoT हार्डवेयर इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस में एक GPS सेंसर जोड़ेंगे और इससे मान पढ़ेंगे। ## वर्चुअल हार्डवेयर वर्चुअल IoT डिवाइस एक सिम्युलेटेड GPS सेंसर का उपयोग करेगा, जो UART के माध्यम से एक सीरियल पोर्ट पर उपलब्ध है। एक भौतिक GPS सेंसर में GPS सैटेलाइट्स से रेडियो तरंगों को पकड़ने के लिए एक एंटीना होता है, और GPS सिग्नल को GPS डेटा में बदलता है। इसका वर्चुअल संस्करण इसे सिम्युलेट करता है, जिससे आप या तो लैटिट्यूड और लॉन्गिट्यूड सेट कर सकते हैं, कच्चे NMEA वाक्य भेज सकते हैं, या एक GPX फ़ाइल अपलोड कर सकते हैं जिसमें कई स्थान होते हैं जो क्रमिक रूप से लौटाए जा सकते हैं। > 🎓 NMEA वाक्य इस पाठ में बाद में कवर किए जाएंगे ### सेंसर को CounterFit में जोड़ें वर्चुअल GPS सेंसर का उपयोग करने के लिए, आपको इसे CounterFit ऐप में जोड़ना होगा। #### कार्य - सेंसर को CounterFit में जोड़ें GPS सेंसर को CounterFit ऐप में जोड़ें। 1. अपने कंप्यूटर पर `gps-sensor` नामक एक फ़ोल्डर में एक नया Python ऐप बनाएं, जिसमें एक फ़ाइल `app.py` और एक Python वर्चुअल एनवायरनमेंट हो, और CounterFit pip पैकेज जोड़ें। > ⚠️ यदि आवश्यक हो, तो [पाठ 1 में CounterFit Python प्रोजेक्ट बनाने और सेटअप करने के निर्देशों का संदर्भ लें](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md)। 1. एक अतिरिक्त Pip पैकेज इंस्टॉल करें जो UART आधारित सेंसर से सीरियल कनेक्शन के माध्यम से बात करने के लिए CounterFit शिम इंस्टॉल करता है। सुनिश्चित करें कि आप इसे उस टर्मिनल से इंस्टॉल कर रहे हैं जिसमें वर्चुअल एनवायरनमेंट सक्रिय है। ```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.hi.png) GPS सेंसर बनाया जाएगा और सेंसर सूची में दिखाई देगा। ![GPS सेंसर बनाया गया](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hi.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 सेकंड के लिए सोता है और फिर से प्रयास करता है। 1. इस कोड को चलाएं, यह सुनिश्चित करते हुए कि आप एक अलग टर्मिनल का उपयोग कर रहे हैं जिसमें CounterFit ऐप चल रहा है, ताकि CounterFit ऐप चालू रहे। 1. CounterFit ऐप से GPS सेंसर का मान बदलें। आप इसे निम्न तरीकों में से किसी एक में कर सकते हैं: * **Source** को `Lat/Lon` पर सेट करें, और एक स्पष्ट लैटिट्यूड, लॉन्गिट्यूड और GPS फिक्स प्राप्त करने के लिए उपयोग किए गए सैटेलाइट्स की संख्या सेट करें। यह मान केवल एक बार भेजा जाएगा, इसलिए **Repeat** बॉक्स को चेक करें ताकि डेटा हर सेकंड दोहराया जा सके। ![GPS सेंसर लैट लॉन के साथ चुना गया](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hi.png) * **Source** को `NMEA` पर सेट करें और कुछ NMEA वाक्य टेक्स्ट बॉक्स में जोड़ें। ये सभी मान भेजे जाएंगे, प्रत्येक नए GGA (पोजिशन फिक्स) वाक्य को पढ़ने से पहले 1 सेकंड की देरी होगी। ![GPS सेंसर NMEA वाक्य के साथ सेट किया गया](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hi.png) आप [nmeagen.org](https://www.nmeagen.org) जैसे टूल का उपयोग करके इन वाक्यों को मैप पर ड्रॉ करके जनरेट कर सकते हैं। ये मान केवल एक बार भेजे जाएंगे, इसलिए **Repeat** बॉक्स को चेक करें ताकि डेटा एक सेकंड बाद फिर से भेजा जा सके। * **Source** को GPX फ़ाइल पर सेट करें और ट्रैक लोकेशन के साथ एक GPX फ़ाइल अपलोड करें। आप [AllTrails](https://www.alltrails.com/) जैसे लोकप्रिय मैपिंग और हाइकिंग साइट्स से GPX फ़ाइलें डाउनलोड कर सकते हैं। इन फ़ाइलों में एक ट्रेल के रूप में कई GPS लोकेशन होती हैं, और GPS सेंसर प्रत्येक नई लोकेशन को 1 सेकंड के अंतराल पर लौटाएगा। ![GPS सेंसर GPX फ़ाइल के साथ सेट किया गया](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hi.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) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।