10 KiB
قراءة بيانات GPS - Raspberry Pi
في هذا الجزء من الدرس، ستقوم بإضافة مستشعر GPS إلى Raspberry Pi وقراءة القيم منه.
الأجهزة
يحتاج Raspberry Pi إلى مستشعر GPS.
المستشعر الذي ستستخدمه هو مستشعر Grove GPS Air530. يمكن لهذا المستشعر الاتصال بأنظمة GPS متعددة للحصول على إشارة سريعة ودقيقة. يتكون المستشعر من جزئين - الإلكترونيات الأساسية للمستشعر وهوائي خارجي متصل بسلك رفيع لالتقاط موجات الراديو من الأقمار الصناعية.
هذا المستشعر يعمل عبر UART، لذا يرسل بيانات GPS عبر UART.
توصيل مستشعر GPS
يمكن توصيل مستشعر Grove GPS بـ Raspberry Pi.
المهمة - توصيل مستشعر GPS
قم بتوصيل مستشعر GPS.
-
أدخل أحد طرفي كابل Grove في المقبس الموجود على مستشعر GPS. لن يدخل إلا في اتجاه واحد.
-
مع إيقاف تشغيل Raspberry Pi، قم بتوصيل الطرف الآخر من كابل Grove بمقبس UART المسمى UART على قبعة Grove Base المثبتة على Pi. يوجد هذا المقبس في الصف الأوسط، على الجانب الأقرب إلى فتحة بطاقة SD، في الطرف الآخر من منافذ USB ومقبس الإيثرنت.
-
ضع مستشعر GPS بحيث يكون الهوائي المتصل به مرئيًا للسماء - من الأفضل أن يكون بجانب نافذة مفتوحة أو في الخارج. من الأسهل الحصول على إشارة واضحة بدون وجود عوائق أمام الهوائي.
برمجة مستشعر GPS
يمكن الآن برمجة Raspberry Pi لاستخدام مستشعر GPS المتصل.
المهمة - برمجة مستشعر GPS
قم ببرمجة الجهاز.
-
قم بتشغيل Pi وانتظر حتى يتم الإقلاع.
-
يحتوي مستشعر GPS على مصباحين LED - مصباح أزرق يومض عند إرسال البيانات، ومصباح أخضر يومض كل ثانية عند استقبال البيانات من الأقمار الصناعية. تأكد من أن المصباح الأزرق يومض عند تشغيل Pi. بعد بضع دقائق، سيبدأ المصباح الأخضر في الوميض - إذا لم يحدث ذلك، قد تحتاج إلى إعادة وضع الهوائي.
-
قم بتشغيل VS Code، إما مباشرة على Pi، أو عبر الاتصال باستخدام إضافة Remote SSH.
⚠️ يمكنك الرجوع إلى التعليمات الخاصة بإعداد وتشغيل VS Code في الدرس الأول إذا لزم الأمر.
-
مع الإصدارات الأحدث من Raspberry Pi التي تدعم البلوتوث، هناك تعارض بين منفذ السيريال المستخدم للبلوتوث والمنفذ المستخدم بواسطة منفذ 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). -
احفظ هذا الملف واخرج من nano بالضغط على
Ctrl+x
. اضغط علىy
عندما يُطلب منك حفظ التعديلات، ثم اضغط علىenter
لتأكيد الكتابة فوق/boot/config.txt
.إذا ارتكبت خطأ، يمكنك الخروج دون حفظ، ثم تكرار هذه الخطوات.
-
قم بتحرير ملف
/boot/cmdline.txt
في nano باستخدام الأمر التالي:sudo nano /boot/cmdline.txt
-
يحتوي هذا الملف على عدد من أزواج المفتاح/القيمة مفصولة بمسافات. قم بإزالة أي أزواج مفتاح/قيمة للمفتاح
console
. قد تبدو مثل هذا: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.
-
أعد تشغيل Pi، ثم أعد الاتصال بـ VS Code بمجرد إعادة تشغيل Pi.
-
-
من نافذة الأوامر، قم بإنشاء مجلد جديد في دليل المستخدم
pi
يسمىgps-sensor
. أنشئ ملفًا في هذا المجلد يسمىapp.py
. -
افتح هذا المجلد في VS Code.
-
يرسل وحدة GPS بيانات UART عبر منفذ سيريال. قم بتثبيت حزمة Pip
pyserial
للتواصل مع المنفذ السيريال من كود Python الخاص بك: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)
يقوم هذا الكود باستيراد وحدة
serial
من حزمة Pippyserial
. ثم يتصل بمنفذ السيريال/dev/ttyAMA0
- هذا هو عنوان منفذ السيريال الذي يستخدمه Grove Pi Base Hat لمنفذ UART الخاص به. ثم يقوم بمسح أي بيانات موجودة من هذا الاتصال السيريالي.بعد ذلك، يتم تعريف دالة تسمى
print_gps_data
تقوم بطباعة السطر الممرر إليها إلى وحدة التحكم.بعد ذلك، يقوم الكود بالتكرار إلى الأبد، حيث يقرأ أكبر عدد ممكن من الأسطر النصية من المنفذ السيريالي في كل تكرار. يستدعي دالة
print_gps_data
لكل سطر.بعد قراءة جميع البيانات، ينام التكرار لمدة ثانية واحدة، ثم يحاول مرة أخرى.
-
قم بتشغيل هذا الكود. سترى المخرجات الخام من مستشعر 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
إذا حصلت على أحد الأخطاء التالية عند إيقاف وإعادة تشغيل الكود، أضف كتلة
try - except
إلى حلقة while الخاصة بك.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 الخاص بك!
إخلاء المسؤولية:
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.