في هذا الدرس سوف تتعرف على GPIO ، وعلى مكتبة Rpi.GPIO وطريقة تثبيتها والتعامل معها.
واحد من أهم المميزات في الراسبيري باي أنها تحتوي على مجموعة أرجل تستخدم كمخارج أومداخل تعرف إختصارًا بـ (GPIO) للتواصل مع القطع الإلكترونية الأخرى مثل الحساسات
الـ GPIO تحتوي على أنواع اتصال مختلفة كالتالي:
- GPIO حقيقي
- I2C
- SPI
- الاتصال التسلسلي Rx وTx
بالاضافة إلى أن بعض الأرجل من الممكن أن تستخدم كـ PWM-Pulse Width Modulation للتحكم بالطاقة وكذلك من الممكن أن تستخدم كـ PPM-Pulse Position Modulation للتحكم بالمحرك.
منافذ GPIO
الصورة التالية توضح أسماء الأرجل وأنواعها للاصدار الاول من الرازبيري باي:
الأرجل (GND 3.3V 5V) خاصة بالطاقة ، وللعلم جميع أرجل GPIO يمكن استخدامها كمدخلات أو مخرجات ، وأيضًا الأرجل SCL و SDA يمكن استخدامها لـ I2C وكذلك الأرجل MOSI و MISO و SCKL يمكن استخدامها لـ SPI.
ملاحظة مستوى الفولت في جميع الأرجل 3.3V وهي ليست آمنة مع 5V أيضا مستوى الفولت الخارج هو 0-3.3V وكذلك الحد الأعلى للفولت المدخل يجب أن لايتجاوز 3.3V.
مكتبة Rpi.GPIO للبايثون
لبرمجة منافذ GPIO بالبايثون نحتاج إلى مكتبة Rpi.GPIO لتسهل علينا التحكم بالـ GPIO ، عادةً مكتبة Rpi.GPIO تكون مثبته مسبقًا مع نظام Raspbian ولكن في حال عدم توفرها يمكنك تثبيتها يدويا من خلال ادخالك للأوامر التالية في LXTerminal
قم بتحديث المستودعات للحصول على آخر إصدار
sudo apt-get update
قم بتثبيت python-dev
sudo apt-get install python-dev
قم بتثبيت مكتبة Rpi.GPIO
sudo apt-get install python-rpi.gpio
استخدام Rpi.GPIO
نأتي الآن لكيفية التعامل مع مكتبة (Rpi.GPIO) والتعامل مع الدوال الخاصة بها قم بفتح ملف نصي من خلال كتابة الأمر التالي في برنامج LXTerminal
nano test.py
لاستدعاء مكتبة (Rpi.GPIO) في كود البايثون الخاص بنا نكتب التالي:
import RPi.GPIO as GPIO
قبل التعامل مع الـ GPIO يجب تحديد طريقة الترقيم للبورد واختيار BCM أو BOARD كالتالي:
GPIO.setmode(GPIO.BCM)
أو
GPIO.setmode(GPIO. BOARD)
الفرق بينهما أن BOARD يعتمد على ترتيب الرجل في البورد أما BCM فهو يعتمد على ترتيب الرجل حسب التسمية (GPIO XX) الصورة التالية توصح كلا الطريقتين في التسمية
لتعيين الرجل كمخرج أو مدخل نستخدم الدالة “setup”:
setup([pin], [GPIO.IN, GPIO.OUT])
للتعيين كمخرج نكتب OUT وكمدخل نكتب IN مثال:
GPIO.setup(18, GPIO.OUT)
أو
GPIO.setup(18, GPIO.IN)
للتحكم بالإخراج من الأرجل وتمرير التيار أو ايقافه نستخدم الدالة “output”:
GPIO.output([pin], [GPIO.LOW, GPIO.HIGH])
لتمرير التيار نكتب HIGH ولإيقافه نكتب LOW مثال:
GPIO.output(18, GPIO.HIGH)
أو
GPIO.output(18, GPIO. LOW)
لقراءة التيار الداخل نستخدم الدالة ” input”:
GPIO.input([pin])
مثال لاختبار قيمة المدخل:
if GPIO.input(18): print("GPIO 18 is HIGH") else: print("GPIO 18 is LOW")
لمسح اعدادات GPIO نستخدم الدالة “cleanup” :
GPIO.cleanup()
أخيرا لتشغيل البرنامج نكتب الأمر التالي في LXTerminal:
sudo python test.py