16 KiB
GPS डेटा पढ़ें - रास्पबेरी पाई
इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई में एक GPS सेंसर जोड़ेंगे और उससे डेटा पढ़ेंगे।
हार्डवेयर
रास्पबेरी पाई को एक GPS सेंसर की आवश्यकता है।
आप जो सेंसर उपयोग करेंगे वह Grove GPS Air530 सेंसर है। यह सेंसर कई GPS सिस्टम्स से जुड़ सकता है ताकि तेज़ और सटीक डेटा प्राप्त किया जा सके। यह सेंसर दो भागों से बना है - सेंसर का मुख्य इलेक्ट्रॉनिक्स और एक बाहरी एंटीना जो पतले तार से जुड़ा होता है ताकि सैटेलाइट्स से रेडियो तरंगें प्राप्त की जा सकें।
यह एक UART सेंसर है, जो UART के माध्यम से GPS डेटा भेजता है।
GPS सेंसर को कनेक्ट करें
Grove GPS सेंसर को रास्पबेरी पाई से जोड़ा जा सकता है।
कार्य - GPS सेंसर को कनेक्ट करें
GPS सेंसर को कनेक्ट करें।
-
Grove केबल का एक सिरा GPS सेंसर के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा।
-
रास्पबेरी पाई को बंद करके, Grove केबल का दूसरा सिरा Grove बेस हैट पर UART नामक सॉकेट में कनेक्ट करें। यह सॉकेट मध्य पंक्ति में है, SD कार्ड स्लॉट के पास, USB पोर्ट्स और ईथरनेट सॉकेट के विपरीत दिशा में।
-
GPS सेंसर को इस तरह से रखें कि जुड़ा हुआ एंटीना आकाश को देख सके - आदर्श रूप से एक खुली खिड़की के पास या बाहर। एंटीना के रास्ते में कुछ भी न होने पर सिग्नल अधिक स्पष्ट रूप से प्राप्त होता है।
GPS सेंसर को प्रोग्राम करें
अब रास्पबेरी पाई को जुड़े हुए GPS सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है।
कार्य - GPS सेंसर को प्रोग्राम करें
डिवाइस को प्रोग्राम करें।
-
पाई को चालू करें और इसके बूट होने की प्रतीक्षा करें।
-
GPS सेंसर में 2 LED होती हैं - एक नीली LED जो डेटा ट्रांसमिट होने पर चमकती है, और एक हरी LED जो सैटेलाइट्स से डेटा प्राप्त होने पर हर सेकंड चमकती है। सुनिश्चित करें कि पाई चालू करने पर नीली LED चमक रही हो। कुछ मिनटों के बाद हरी LED चमकने लगेगी - यदि ऐसा नहीं होता है, तो आपको एंटीना को पुनः स्थिति में रखना पड़ सकता है।
-
VS Code लॉन्च करें, या तो सीधे पाई पर, या Remote SSH एक्सटेंशन के माध्यम से कनेक्ट करें।
⚠️ यदि आवश्यक हो, तो पाठ 1 में VS Code सेटअप और लॉन्च करने के निर्देशों का संदर्भ लें।
-
रास्पबेरी पाई के नए संस्करणों में जो ब्लूटूथ का समर्थन करते हैं, ब्लूटूथ के लिए उपयोग किए जाने वाले सीरियल पोर्ट और Grove UART पोर्ट के लिए उपयोग किए जाने वाले पोर्ट के बीच एक संघर्ष होता है। इसे ठीक करने के लिए निम्नलिखित करें:
-
VS Code टर्मिनल से,
/boot/config.txt
फ़ाइल कोnano
का उपयोग करके संपादित करें, जो एक अंतर्निहित टर्मिनल टेक्स्ट एडिटर है, निम्नलिखित कमांड के साथ:sudo nano /boot/config.txt
इस फ़ाइल को VS Code द्वारा संपादित नहीं किया जा सकता क्योंकि इसे
sudo
अनुमतियों, यानी उन्नत अनुमतियों के साथ संपादित करने की आवश्यकता है। VS Code इन अनुमतियों के साथ नहीं चलता। -
कर्सर कुंजियों का उपयोग करके फ़ाइल के अंत तक जाएं। फिर नीचे दिए गए कोड को कॉपी करें और इसे फ़ाइल के अंत में पेस्ट करें:
dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1
आप अपने डिवाइस के सामान्य कीबोर्ड शॉर्टकट का उपयोग करके पेस्ट कर सकते हैं (
Ctrl+v
Windows, Linux या Raspberry Pi OS पर,Cmd+v
macOS पर)। -
इस फ़ाइल को सहेजें और
Ctrl+x
दबाकर nano से बाहर निकलें। जब पूछा जाए कि क्या आप संशोधित बफर को सहेजना चाहते हैं, तोy
दबाएं, फिर/boot/config.txt
को ओवरराइट करने की पुष्टि करने के लिएenter
दबाएं।यदि आप कोई गलती करते हैं, तो बिना सहेजे बाहर निकल सकते हैं और फिर इन चरणों को दोहरा सकते हैं।
-
/boot/cmdline.txt
फ़ाइल को nano में निम्नलिखित कमांड के साथ संपादित करें:sudo nano /boot/cmdline.txt
-
इस फ़ाइल में कई key/value जोड़े होते हैं जो स्पेस से अलग होते हैं।
console
key के लिए किसी भी key/value जोड़े को हटा दें। वे संभवतः इस तरह दिखेंगे: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
-
ऊपर दिए गए चरणों का पालन करके इस फ़ाइल को सहेजें और nano से बाहर निकलें।
-
अपने पाई को पुनः चालू करें, फिर पाई के पुनः चालू होने के बाद VS Code में पुनः कनेक्ट करें।
-
-
टर्मिनल से,
pi
उपयोगकर्ता के होम डायरेक्टरी में एक नया फ़ोल्डर बनाएं जिसका नामgps-sensor
हो। इस फ़ोल्डर मेंapp.py
नामक एक फ़ाइल बनाएं। -
इस फ़ोल्डर को VS Code में खोलें।
-
GPS मॉड्यूल UART डेटा को सीरियल पोर्ट के माध्यम से भेजता है। Python कोड से सीरियल पोर्ट के साथ संवाद करने के लिए
pyserial
Pip पैकेज इंस्टॉल करें:pip3 install pyserial
-
अपने
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
फ़ंक्शन को कॉल करता है।सभी डेटा पढ़ने के बाद, लूप 1 सेकंड के लिए सोता है, फिर पुनः प्रयास करता है।
-
इस कोड को चलाएं। आपको GPS सेंसर से कच्चा आउटपुट दिखाई देगा, कुछ इस तरह:
$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 फ़ोल्डर में पा सकते हैं।
😀 आपका GPS सेंसर प्रोग्राम सफल रहा!
अस्वीकरण:
यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।