كيفية استخدام Raspberry Pi للتحكم في GPIO مع Python

يعد Raspberry Pi جهاز كمبيوتر متعدد الاستخدامات أصبح مفضلاً بين الهواة والمعلمين والمهنيين على حد سواء. واحدة من أقوى ميزاتها هي القدرة على التفاعل مع العالم المادي من خلال دبابيس إدخال/إخراج الغرض العام (GPIO). من خلال الاستفادة من Python ، وهي لغة برمجة صديقة للمبتدئين وقوية ، يمكنك التحكم في دبابيس GPIO هذه لبناء مجموعة واسعة من المشاريع ، من وميض LED البسيط إلى أنظمة الأتمتة المنزلية المعقدة. في منشور المدونة هذا ، سنتخيلك من خلال أساسيات استخدام Raspberry Pi للتحكم في GPIO مع Python.

فهم دبابيس GPIO

تعد دبابيس GPIO واجهات متعددة الاستخدامات على Raspberry Pi والتي تتيح لك توصيل الأجهزة الخارجية والتحكم فيها مثل LEDs ، وأجهزة الاستشعار ، والمحركات ، وأكثر من ذلك. اعتمادًا على نموذج Raspberry Pi ، ستجد عددًا متفاوتًا من دبابيس GPIO مرتبة في نمط معين. يمكن تكوين هذه المسامير كإدخال أو مخرجات:

  • مدخل: اقرأ الإشارات من الأجهزة الخارجية (على سبيل المثال ، الأزرار ، المستشعرات).
  • الإخراج: أرسل إشارات إلى الأجهزة الخارجية (على سبيل المثال ، مصابيح LED ، المرحلات).

قبل الغوص في جانب البرمجة ، من الضروري فهم تصميم دبوس التوت PI الخاص بك. ارجع إلى مخطط Raspberry PI GPIO Pinout الرسمي للحصول على معلومات دقيقة خاصة بالنموذج الخاص بك.

إعداد Raspberry Pi

لبدء التحكم في دبابيس GPIO مع Python ، تأكد من إعداد Raspberry Pi بشكل صحيح:

  1. تثبيت أحدث Raspberry Pi OS: تأكد من تشغيل Raspberry Pi الخاص بك أحدث إصدار من Raspberry Pi OS. يمكنك تنزيله من موقع Raspberry Pi الرسمي واستخدام أدوات مثل Raspberry Pi Imager لفلاشها على بطاقة SD الخاصة بك.
  2. تحديث نظامك: افتح الجهاز وقم بتشغيل الأوامر التالية لتحديث حزم النظام الخاصة بك:
sudo apt update
sudo apt upgrade -y
  • تثبيت مكتبة Python GPIO: تعد مكتبة RPI.GPIO خيارًا شائعًا للتفاعل مع دبابيس GPIO في Python. تثبيته باستخدام PIP:
  • sudo apt install python3-rpi.gpio
    

    كتابة أول نص GPIO Python

    لنبدأ بمشروع بسيط: يومض LED. ستحتاج إلى المكونات التالية:

    • التوت بي
    • قاد
    • 220-أوم المقاوم
    • الأسلاك الأسلاك والبلوز

    توصيل LED:

    1. قم بتوصيل الساق الطويلة (Anode) من LED إلى GPIO PIN 17 من خلال المقاوم.
    2. قم بتوصيل الساق القصيرة (الكاثود) من LED إلى دبوس الأرض (GND) على التوت PI.

    الآن ، دعنا نكتب نص Python للتحكم في LED.

    وميض LED مع Python

    import RPi.GPIO as GPIO
    import time
    
    # Use BCM GPIO numbering
    GPIO.setmode(GPIO.BCM)
    
    # Set GPIO pin 17 as output
    LED_PIN = 17
    GPIO.setup(LED_PIN, GPIO.OUT)
    
    try:
        while True:
            GPIO.output(LED_PIN, GPIO.HIGH)  # Turn LED on
            time.sleep(1)                     # Wait for 1 second
            GPIO.output(LED_PIN, GPIO.LOW)   # Turn LED off
            time.sleep(1)                     # Wait for 1 second
    except KeyboardInterrupt:
        pass
    finally:
        GPIO.cleanup()  # Reset GPIO settings
    

    توضيح:

    • import RPi.GPIO as GPIO: يستورد مكتبة RPI.GPIO.
    • import time: يستورد وحدة الوقت لوظيفة النوم.
    • GPIO.setmode(GPIO.BCM): يعين مخطط ترقيم PIN GPIO إلى BCM (قناة Broadcom SOC).
    • GPIO.setup(LED_PIN, GPIO.OUT): تكوين GPIO PIN 17 كدبوس الإخراج.
    • ال try يحتوي Block على حلقة لا حصر لها تعمل على تشغيل LED وإيقافها كل ثانية.
    • GPIO.cleanup(): تنظيف إعدادات GPIO لضمان خروج نظيفة.

    تشغيل البرنامج النصي الخاص بك

    احفظ البرنامج النصي الخاص بك blink_led.py وتشغيله باستخدام الأمر التالي:

    python3 blink_led.py
    

    يجب أن ترى LED متصلاً بـ GPIO PIN 17 وميضًا وإيقافًا كل ثانية. لإيقاف البرنامج النصي ، اضغط Ctrl + C.

    توسيع مشروعك

    بمجرد إتقان وميض LED ، يمكنك استكشاف مشاريع أكثر تعقيدًا من خلال الجمع بين أجهزة استشعار ومشغلات مختلفة. فيما يلي بعض الأفكار لتبدأ:

    • تفاعل الزر: التحكم في LED باستخدام زر فعلي. يتضمن ذلك إعداد دبوس GPIO كمدخل وقراءة حالته في نص Python الخاص بك.
    • تسجيل بيانات المستشعر: استخدم أجهزة استشعار مثل كاشفات درجة الحرارة أو الحركة لجمع البيانات وتسجيلها للتحليل.
    • أتمتة المنزل: أجهزة التحكم عن بُعد عن طريق دمج التحكم في GPIO مع واجهات الويب أو تطبيقات الهاتف المحمول.

    التحكم في زر

    دعنا نوسع مثالنا السابق عن طريق إضافة زر للتحكم في LED. ستحتاج:

    • حمض
    • 10K-أوم المقاوم
    • الأسلاك الطائر الإضافية

    توصيل الزر:

    1. قم بتوصيل ساق واحدة من الزر إلى GPIO PIN 27.
    2. قم بتوصيل الساق الأخرى إلى دبوس الأرض (GND) من خلال مقاوم 10K-OHM.

    إليك نص Python للتحكم في LED مع الزر:

    import RPi.GPIO as GPIO
    import time
    
    # Use BCM GPIO numbering
    GPIO.setmode(GPIO.BCM)
    
    # Define GPIO pins
    LED_PIN = 17
    BUTTON_PIN = 27
    
    # Set up GPIO pins
    GPIO.setup(LED_PIN, GPIO.OUT)
    GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
    
    try:
        while True:
            button_state = GPIO.input(BUTTON_PIN)
            if button_state == GPIO.HIGH:
                GPIO.output(LED_PIN, GPIO.HIGH)  # Turn LED on
            else:
                GPIO.output(LED_PIN, GPIO.LOW)   # Turn LED off
            time.sleep(0.1)
    except KeyboardInterrupt:
        pass
    finally:
        GPIO.cleanup()
    

    توضيح:

    • يتم إعداد GPIO PIN 27 كمدخل مع مقاوم المنسدلة لضمان حالة مستقرة عند عدم الضغط على الزر.
    • يقرأ البرنامج النصي بشكل مستمر حالة الزر ويقوم بتشغيل LED عند الضغط على الزر.

    أفضل الممارسات ونصائح السلامة

    عند العمل مع دبابيس GPIO ، من الأهمية بمكان الالتزام بأفضل الممارسات لتجنب إتلاف مكونات التوت أو المكونات المتصلة:

    • الطاقة عند توصيل الأجهزة: قم دائمًا بإيقاف تشغيل Raspberry Pi قبل توصيل الأجهزة أو فصلها لمنع الدوائر القصيرة.
    • استخدام المقاومات المحددة الحالية: حماية مكوناتك باستخدام المقاومات المناسبة ، خاصة عند العمل مع LEDs.
    • تحقق الأسلاك المزدوجة: تأكد من أن جميع الاتصالات صحيحة لمنع الأضرار العرضية لدبابيس GPIO.
    • تعامل مع الرعاية: تجنب التفريغ الثابت عن طريق التعامل مع التوت PI والمكونات بعناية.

    خاتمة

    يفتح التحكم في دبابيس GPIO مع Python على Raspberry Pi عالمًا من الاحتمالات لإنشاء مشاريع تفاعلية وآلية. من المهام البسيطة مثل LEDs الوامضة إلى أنظمة أكثر تعقيدًا تشمل أجهزة استشعار ومحركات متعددة ، يعد إتقان التحكم في GPIO مهارة أساسية لأي عشاق PI Raspberry. باتباع الخطوات الموضحة في هذا الدليل والتمسك بأفضل الممارسات ، ستكون في طريقك إلى بناء مشاريع مثيرة ومبتكرة.

    العبث سعيد!

    اترك تعليقًا

    Notice an Issue? Have a Suggestion?
    If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.