مقدمه

در این آموزش، شما با پایه های ورودی و خروجی برد رزبری پای آشنا می شوید و یاد می گیرید که چگونه آن ها را با زبان python3 و کتابخانه ی Gpiozero و Rpi.GPIO کنترل کنید.

آنچه در این آموزش یاد می گیرید

  • آشنایی با پایه های GPIO
  • نصب کتابخانه های GPIZero و GPIO
  • کنترل LED، کلید، بارگراف، RGB LED و LDR
raspberry-pi-gpio-2

معرفی پایه های GPIO رزبری پای

GPIO مخفف general-purpose input/output است. برد های رزبری پای دارای 40 پایه هستند که می توانید از آن ها برای ارتباط با دستگاه ها و قطعات دیگر استفاده کنید.

raspberry pi gpio pins
raspberry pi gpio pins 2

اگر سیستم عامل نصب شده روی رزبری پای شما Raspbian desktop است، با وارد کردن دستور pinout در ترمینال نیز می توانید ترتیب پایه ها را ببینید.

raspberry pi gpio pins terminal

این پایه ها قابلیت های مختلفی دارند:

  • PWM (pulse-width modulation)
    • Software PWM available on all pins
    • Hardware PWM available on GPIO12, GPIO13, GPIO18, GPIO19
  • SPI
    • SPI0: MOSI (GPIO10); MISO (GPIO9); SCLK (GPIO11); CE0 (GPIO8), CE1 (GPIO7)
    • SPI1: MOSI (GPIO20); MISO (GPIO19); SCLK (GPIO21); CE0 (GPIO18); CE1 (GPIO17); CE2 (GPIO16)
  • I2C
    • Data: (GPIO2); Clock (GPIO3)
    • EEPROM Data: (GPIO0); EEPROM Clock (GPIO1)
  • Serial
    • TX (GPIO14); RX (GPIO15)

کتابخانه ی Gpiozero با پایتون

این کتابخانه یک از کامل ترین کتابخانه های موجود برای کنترل پایه های ورودی و خروجی رزبری پای است که به زبان پایتون نوشته شده است.

در این کتابخانه بسیاری از قطعات مثل LED، کلید، LED های بارگراف، سنسور شدت نور و… از قبل تعریف شده اند. به همین دلیل، کار با این کتابخانه بسیار آسان است و با استفاده از آن می توانید قطعات مختلف را به سادگی کنترل کنید.

نکته:

در این کتابخانه برای قطعات مختلف کلاس تعریف شده است . هر کلاس نیز متد های متنوعی ای دارد. در این آموزش نیاز به آشنایی با مباحث شی گرایی (مثل کلاس، متد و…) ندارید، با این حال برای درک بهتر برنامه نویسی توصیه می شود برنامه نویسی شی گرا (Object oriented programming) را یاد بگیرید.

استفاده از کتابخانه Gpiozero

این کتابخانه به صورت پیش فرض روی سیستم عامل رزبین (Raspbian) موجود است و نیازی به نصب آن ندارید.

اگر سیستم عامل شما رزبین نیست، با دستورات زیر می توانید این کتابخانه را نصب کنید:
پایتون 3: sudo pip3 install gpiozero
پایتون 2: sudo pip install gpiozero

برای استفاده از این کتابخانه کافیست آن را به محیط برنامه نویسی پایتون import کنید.

روش اول(پیشنهادی): from gpiozero import [name of class]
روش دوم: import gpiozero

دستورات پایه

بعد از import کردن کتابخانه، می توانید از دستورات تعریف شده در آن استفاده کنید.

دستورات مرتبط با LED:
تعریف پایه ای که LED به آن متصل شده است: led = LED(# of pin)
روشن کردن: on()
خاموش کردن: off()
تغییر وضعیت*: toggle()
چشمک زدن: blink()
*عوض کردن وضعیت: اگر روشن باشد خاموش و اگر خاموش باشد، روشن می شود.

دستورات مرتبط با کلید:
تعریف پایه ای که کلید به آن متصل شده است: button = Button(# of a pin)
صبر می کند تا کلید فشرده شود و سپس دستورات بعدی را انجام می دهد: wait_for_press ()
صبر می کند تا کلید رها شود و سپس دستورات بعدی را انجام می دهد: wait_for_release ()
اگر کلید فشرده شده باشد مقدار True و در غیر این صورت False را برمی گرداند: is_pressed
وقتی کلید فشرده شود، عملی که برای آن تعریف شده را انجام می دهد: when_pressed
وقتی کلید رها شود، عملی که برای آن تعریف شده را انجام می دهد: when_released

دستورات مرتبط با بارگراف:

تعریف پایه هایی که بارگراف به آن ها متصل شده است: graph = LEDBarGraph(# of pins)
روشن کردن تعدادی از LED ها: graph.value = value
دستورات مرتبط با بازر:
تعریف پایه ای که بازر به آن متصل شده است: buzzer = Buzzer (# of a pin)
روشن کردن: on()
خاموش کردن: off()
تغییر وضعیت: toggle()

دستورات مرتبط با RGB LED:

تعریف پایه هایی که RGB به آن ها متصل شده است: led = RGBLED(red=#, green=#, blue=#)
روشن کردن رنگ قرمز: led.red = value
روشن کردن رنگ سبز: led.green = value
روشن کردن رنگ آبی: led.blue = value
روشن کردن تمام رنگ ها: on()
خاموش کردن تمام رنگ ها: off()
تغییر وضعیت: toggle()

دستورات مرتبط با LDR:

تعریف پایه ای که سنسور شدت نور به آن متصل شده است: sensor = LightSensor(# of a pin)
صبر می کند تا محیط تاریک شود و سپس دستورات بعدی را انجام می دهد: wait_for_dark ()
صبر می کند تا محیط روشن شود و سپس دستورات بعدی را انجام می دهد: wait_for_light ()
وقتی محیط تاریک باشد، عملی که برای آن تعریف شده را انجام می دهد: light_detected 
وقتی محیط تاریک باشد، عملی که برای آن تعریف شده را انجام می دهد: when_dark
Pوقتی محیط روشن باشد ، عملی که برای آن تعریف شده را انجام می دهد: when_light

برای اطلاعات بیشتر راجع به این کتابخانه، به این آدرس مراجعه کنید.

کتابخانه ی RPi.GPIO با پایتون

یکی دیگر از کتابخانه های مشهور در راه اندازی پایه های ورودی و خروجی، کتابخانه ی RPi.GPIO است. از این کتابخانه نیز می توانید در برنامه نویسی به زبان پایتون استفاده کنید.

نحوه ی استفاده از RPi.GPIO

این کتابخانه نیز به صورت پیش فرض روی سیستم عامل رزبین نصب شده است. برای استفاده از این کتابخانه باید آن را به محیط برنامه نویسی پایتون import کنید: import RPi.GPIO

دستورات پایه

استفاده از شماره ی BCM پایه ها: GPIO.setmode(GPIO.BCM)
تعریف پایه به عنوان ورودی: GPIO.setup(# of pin, GPIO.IN)
تعریف پایه به عنوان خروجی: GPIO.setup(# of pin, GPIO.OUT)
مقدار دهی اولیه به خروجی: GPIO.setup(# of pin, GPIO.OUT, initial=GPIO.HIGH)
خواندن مقدار پایه ی ورودی: GPIO.input(# of pin)
مقدار دهی به پایه ی خروجی: GPIO.output(# of pin, state)

برای اطلاعات بیشتر راجع به این کتابخانه به این آدرس مراجعه کنید.

Tip
اگر از یک پایه به صورت همزمان در چند اسکریپت (Script) استفاده کرده باشید، در زمان اجرای کد به شما یک هشدار (Warning) داده می شود. برای غیر فعال کردن این هشدار از دستور زیر استفاده کنید: GPIO.setmode(GPIO.BCM)

مثال ها

LED

سیم بندی

برای اتصال LED به GPIO17 از مقاومت استفاده کنید.

raspberry-pi-gpio-led-circuit_fz

کد(Gpiozero)

  • Turning LED on and off with RPi.GPIO

  • Blinking LED w/ Gpiozero

  • Blinking LED w/ RPi.GPIO

  • LED with variable brightness w/ Gpiozero

  • Gpiozero (Method 2)

  • LED with variable brightness w/ RPi.GPIO

کلید

سیم بندی

کلید را به پایه 2 متصل کنید، این پایه بصورت پیشفرض pull-up می باشد.

raspberry-pi-gpio-button-circuit_fz

کد(Gpiozero)

  • Check if a Button is pressed w/ RPi.GPIO

  • Run a function every time the button is pressed and released (w/ Gpiozero)

  • Shutdown Button w/ Gpiozero
    By pressing and holding the button for 2 seconds, your PC will shut down.

کلید + LED

سیم بندی

کنترل یک LED با یک کلید.

raspberry-pi-gpio-button-led-circuit_fz

کد(Gpiozero)

بارگراف

سیم بندی

برخی از بارگراف ها ممکن است به مقاومت نیاز داشته باشند.

raspberry-pi-gpio-bargraph-circuit_fz

کد(Gpiozero)

روشن و خاموش کردن بازر با GPIO رزبری پای

سیم بندی

کد(Gpiozero)

کنترل RGB LED با GPIO رزبری پای

سیم بندی

کد(Gpiozero)

کنترل LDR با GPIO رزبری پای

زمانی که محیط تاریک باشد، LED  روشن و زمانی که محیط روشن باشد، LED خاموش می شود.

سیم بندی

raspberry-pi-gpio-LDR-circuit_fz

کد(Gpiozero)

یک گام جلوتر

  • با دو کلید تعداد LED های روشن در یک بارگراف را کم و زیاد کنید. هر بار که کلید اول فشرده شد، به تعداد LED های روشن یکی اضافه شود و اگر کلید دوم فشرده شد، از تعداد LED های روشن یکی کم شود.
  • با استفاده از یک سنسور حرکت (PIR) ، وجود حرکت را تشخیص دهید و درصورت وجود حرکت، با بازر یک هشدار بدهید.

رزبری پای 3 بخرید

Share this post

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

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