مهندس موفق الکترونیک

دسترسی به ورودی و خروجی‌های همه منظوره رزبری‌پای – Raspberry Pi GPIO

مقدمه

پین‌های GPIO (ورودی و خروجی همه منظوره) را می‌توان به عنوان وردی یا خروجی به کار بست. این پین‌ها به رزبری‌پای این امکان را می‌دهند تا با دستگاه‌های I/O همه منظوره اتصال برقرار کند.

  • رزبری‌پای ۳ مدل B26، پین GPIO روی بورد خود دارد.
  • از طریق این GPIOها، رزبری‌پای قادر است دستگاه‌های ورودی و خروجی خارجی بسیاری را کنترل کند.
  • این پین‌ها رابط فیزیکی بین رزبری‌پای و دنیای خارج هستند.
  • می‌توان این پین‌ها را مطابق نیاز و برای تعامل با دستگاه‌های خارجی برنامه‌ریزی کرد. برای مثال، اگر بخواهیم وضعیت یک سوییچ فیزیکی را مشاهده کنیم، می‌توان هر کدام از این پین‌ها را به صورت ورودی تنظیم کرده و از طریق آن وضعیت سوییچ را خوانده و تصمیم مناسب را اتخاذ کنیم. می‌توان هر کدام از این پین‌ها را برای کنترل روشن و خاموش کردن LED به صورت خروجی تنظیم کنیم.
  • رزبری‌پای قادر است که با استفاده از wifi روی بورد یا آداپتور Wifi USB به اینترنت متصل شود. هنگامی‌ که رزبری‌پای به اینترنت متصل شد، می‌توان دستگاه‌هایی که به رزبری‌پای متصل هستند را از راه دور کنترل کرد.

پین‌های GPIO رزبری‌پای در شکل زیر نشان داده شده‌اند.

دسترسی به ورودی و خروجی‌های همه منظوره رزبری‌پای

برخی از این پین‌های GPIO با عملکردهای دیگری همانند I2C ، SPI ، UART  و… مالتی پلکس شده‌اند.

می‌توان از این پین‌ها برای کاربردهای خاص مد نظر خودمان بهره بگیریم.

مطلب پیشنهادی:  فاصله سنج با ماژول التراسونيک و رزبری پای

شماره گذاری پین‌ها

باید پین GPIO مورد استفاده را به صورت ورودی یا خروجی تعریف کنیم. رزبری‌پای دو روش برای تعریف شماره پین‌ها دارد که به قرار زیر است.

  • شماره گذاری GPIO
  • شماره گذاری فیزیکی

در شماره گذاری GPIO، شماره پین به شماره روی Broadcom SoC اشاره می‌کند. بنابراین، باید همیشه نگاشت پین‌ها برای استفاده از پین GPIO را مد نظر داشت.

در حالیکه در شماره گذاری فیزیکی، شماره پین به یکی از پین‌های چهل گانه‌ی هدر P1 روی بورد رزبری‌پای اشاره دارد. شماره گذاری فیزیکی ساده است زیرا می‌توان به راحتی پین‌های روی هدر P1 را شمرده و به GPIO اختصاص داد.

اما باید دیاگرام پیکربندی پین‌ها در بالا را در نظر داشت تا بدانیم کدام پین‌ها، پین‌های VCC و GND می‌باشند.

دسترسی به ورودی و خروجی‌های همه منظوره رزبری‌پای

حالا اجازه دهید با استفاده از سوییچ متصل به رزبری‌پای یک LED را کنترل کنیم. در اینجا، از پایتون و WiringPI) C) برای خاموش و روشن کردن LED استفاده می‌کنیم.

کنترل LED با استفاده از پایتون

اکنون، اجازه دهید LED را با استفاده از پایتون روی رزبری‌پای خاموش و روشن کنیم. سوییچ برای کنترل LED استفاده می‌شود.

برنامه پایتون

import RPi.GPIO as GPIO #import RPi.GPIO module

LED = 32 #pin no. as per BOARD, GPIO18 as per BCM
Switch_input = 29 #pin no. as per BOARD, GPIO27 as per BCM
GPIO.setwarnings(False) #disable warnings
GPIO.setmode(GPIO.BOARD) #set pin numbering format
GPIO.setup(LED, GPIO.OUT) #set GPIO as output
GPIO.setup(Switch_input, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
     if(GPIO.input(Switch_input)):
          GPIO.output(LED,GPIO.LOW)
     else:
          GPIO.output(LED,GPIO.HIGH)

توابع به کاررفته

تابع RPI.GPIO

برای استفاده از پین‌های GPIO در پایتون، باید پکیج RPI.GPIO را که حاوی یک کلاس برای کنترل GPIO است را وارد کنیم. پکیج RPI.GPIO پایتون، بر روی سیستم عامل رزبین از پیش نصب شده است. بنابراین نیاز به نصب آن نیست. تنها باید این کتابخانه را در برنامه‌‌ی خود ضمیمه کرده و از توابع آن برای دسترسی به GPIO در پایتون بهره بگیریم. این کار به صورت زیر انجام می‌شود.

import RPi.GPIO as GPIO

تابع GPIO.setmode (سیستم شماره گذاری پین‌ها)

این تابع برای تعریف سیستم شماره گذاری پین‌ها، یعنی شماره گذاری GPIO یا شماره گذاری فیزیکی استفاده می‌شود.

مطلب پیشنهادی:  اتصال MPU6050 به رزبری‌پای

در تابع RiPi.GPIO، سیستم شماره گذاری GPIO به صورت BCM شناسایی می‌شود و سیستم شماره گذاری فیزیکی به صورت BOARD شناسایی می‌شود.

Pin Numbering System = BOARD/BCM

برای مثال، اگر شماره پین ۴۰ از هدر P1 را به عنوان شماره پین به عنوان خروجی به کار ببریم، آنگاه،

 در BCM:

GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)

در BOARD:

GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.OUT)

 تابع channel ،direction ،initial value ،pull up/pull down) GPIO.setup)

این تابع برای تنظیم جهت پین‌های GPIO به صورت ورودی/خروجی به کار می‌رود.

  • Channel: شماره پین GPIO مطابق سیستم شماره گذاری.
  • Direction: تعیین جهت پین GPIO به صورت ورودی یا خروجی.
  • Initial value: می‌توان یک مقدار آغازین تعیین کرد.
  • Pull up/ pull down: در صورت نیاز می‌توان حالت بالاکش یا پایین کش را فعال کرد.

به مثال‌هایی که در ادامه آورده شده است توجه نمایید.

– GPIO به عنوان خروجی:

GPIO.setup(channel, GPIO.OUT)

– GPIO به عنوان ورودی:

GPIO.setup(channel, GPIO.IN)

– GPIO به عنوان خروجی با مقداراولیه:

GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

– GPIO به عنوان ورودی با مقاومت بالاکش:

GPIO.setup(channel, GPIO.IN, pull_up_down = GPIO.PUD_UP)

تابع channel, state) GPIO.output)

این تابع برای تنظیم حالت خروجی پین GPIO به کار می‌رود.

  • Channel: شماره پین GPIO مطابق با سیستم شماره گذاری.
  • State: حالت خروجی، HIGH یا LOW.

مثال

GPIO.output(7, GPIO.HIGH)

تابع channel) GPIO.input)

این تابع برای خواندن مقدار پین GPIO استفاده می‌شود.

مطلب پیشنهادی:  I2C در رزبری‌پای

مثال

GPIO.input(9)

اگر آموزش دسترسی به ورودی و خروجی‌های همه منظوره رزبری‌پای براتون مفید واقع شده ما را نیز دعا کنید. اپلیکیشن ما را هم نصب کنید و اگر خواستین می‌توانید از محتوا‌ی رایگان آموزشی حمایت مالی کنید. همچنین نظرات، پیشنهادات و درخواست‌های خود را در کامنت‌ها ⇓ بنویسید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *