مهدی اشراقی
طراح و مهندس شبکه های کامپیوتری ، برنامه نویس
مهدی اشراقی
طراح و مهندس شبکه های کامپیوتری ، برنامه نویس

نوشته های بلاگ

نحوه پیکربندی پین های رزبری پای (Raspberry GPIO) در پایتون

نحوه پیکربندی پین های رزبری پای (Raspberry GPIO) در پایتون

سلام. در این پست قصد دارم آموزش بدم که روی raspberry Pi تحت سیستم عامل Linux Ubuntu چطوری میتونید از GPIO ها یا پایه های برد خودتون در python استفاده کنید .

در پست های قبل توضیح دادم که چطور میتونید روی Raspberry PI خودتون Ubuntu Linux نصب کنید . در این پست نصب کتابخانه رو یاد میگیریم و با چند مثال ساده یه برنامه مینویستم .اگر شما هم برنامه ای برای اولین بار نوشتید اعلام کنید تا به اسم خودتون تو سایت بزارمش .

  • این مقاله هنوز در مرحله ترجمه و ویرایش میباشد.

نصب کتابخانه رزبری پای در پایتون:

اول باید کتابخانه پایتون رو نصب کنیم .

 

کتابخانه تخصصی (برنامه نویسان ارشد ):

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

حذف کتابخانه :

برای حذف کتابخانه ها میتونید از دستورات زیر استفاده کنید :

پیکربندی اولیه پایتون در رزبری پای :

فراخانی کتابخانه :

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

شماره پایه ها :

پایه های gpio در رسپبری پای

برای فراخوانی پایه ها ۲ روش متفاوت وجود داره .

  1. ساختار شماره پایه ها مشخص شده برای برد (توضیه شده ) ،این شماره ها همون شماره های استفاده شده بر روی برد هاست که از ۱ تا ۴۰ هست و استفاده از اون خیلی راحته
  2. ساختار BCM ،در این روش که برای برنامه های سطح پایین (برعکس اسمش اصلا سطح پایین نیست D: )استفاده میشه به جای شماره پایه از شماره کانال استفاده میشه .

مثال :

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

و برای اینکه متوجه بشید هر پایه رو به چه سیستمی تعیین کردید از دستور زیر استفاده کنید

نتیجه به ۲ حالت میتونه باشه GPIO.BOARD و یا GPIO.BCM

پیکربندی نوع پابه ها به صورت تکی(استفاده به عنوان ورودی و یا خروجی )

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

منظور از ورودی اینه که  پایه مد نظر شما قرار اطلاعات رو دریافت کنه مثلا وصلش کنید به یه کلید که مقدار کلید رو که ۰ یا ۱ هست بخونه و خروجی هم مثلا قرار به یه لامپ وصل بشه و اطلاعات رو ارسال کنه

برای پیکربندی پایه رزبری پای به عنوان ورودی از دستور زیر استفاده میکنیم و به جای کلمه channel شماره پایه مدنظر رو وارد میکنیم .

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

در ضمن اگر میخواید مقدار پیش فرزی برای یک پایه تعیین کنید عبارت initial=GPIO.HIGH رو اضافه میکنیم به صورت زیر :

پیکربندی نوع پایه ها به صورت گروهی

برای پیکربندی نوع پایه های رزبری پای به صورت گروهی از دستور زیر استفاده میکنیم :

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

کنترل وضعیت پایه ورودی :

فرض کنید شما یک کلید به یکی از GPIO  رزبری پای خودتون متصل کردید و میخواید وضعیت اون کلید رو متوجه بشید ، با استفاده از دستور زیر میتونید وضعیت پایه مدنظر خودتون رو متوجه بشید . فقط کافیه به جای channel شماره GPIO مد نظر خودتون رو وارد کنید .


 

بعد از وارد کردن مقدار برگشتی به صورت ۰ و یا ۱ برگشت داده میشه .

کنترل وضعیت پایه خروجی :

حالا میخوایم لامپ LED که به یکی از پایه های رزبری پای متصل کردیم رو با پایتون روشن کنیم . از دستور زیر استفاده کنید و به جای channel پایه GPIO که لامپ LED بهش متصل شده رو وارد کنید و به جای state مقدار ۰ یا false یعنی خاموش و ۱ یا true یعنی روشن رو وارد کنید .


 

کنترل وضعیت پایه ها خروجی به صورت گروهی :

حالا فرض کنید میخواید با یه دستوز تعدادی پایه رو کنترل کنید ، از دستور زیر استفاده کنید

پاک سازی وضعیت پایه های رزبری پای در پایتون

At the end any program, it is good practice to clean up any resources you might have used. This is no different with RPi.GPIO. By returning all channels you have used back to inputs with no pull up/down, you can avoid accidental damage to your RPi by shorting out the pins. Note that this will only clean up GPIO channels that your script has used. Note that GPIO.cleanup() also clears the pin numbering system in use.

To clean up at the end of your script:

It is possible that don’t want to clean up every channel leaving some set up when your program exits. You can clean up individual channels, a list or a tuple of channels:

ورودی در GPIO

There are several ways of getting GPIO input into your program. The first and simplest way is to check the input value at a point in time. This is known as ‘polling’ and can potentially miss an input if your program reads the value at the wrong time. Polling is performed in loops and can potentially be processor intensive. The other way of responding to a GPIO input is using ‘interrupts’ (edge detection). An edge is the name of a transition from HIGH to LOW (falling edge) or LOW to HIGH (rising edge).

Pull up / Pull down resistors

If you do not have the input pin connected to anything, it will ‘float’. In other words, the value that is read in is undefined because it is not connected to anything until you press a button or switch. It will probably change value a lot as a result of receiving mains interference.

To get round this, we use a pull up or a pull down resistor. In this way, the default value of the input can be set. It is possible to have pull up/down resistors in hardware and using software. In hardware, a 10K resistor between the input channel and 3.3V (pull-up) or 0V (pull-down) is commonly used. The RPi.GPIO module allows you to configure the Broadcom SOC to do this in software:

(where channel is the channel number based on the numbering system you have specified – BOARD or BCM).

خروجی در GPIO :

۱. First set up RPi.GPIO

۲. To set an output high:

۳. To set an output low:

۴. To output to several channels at the same time:

۵. Clean up at the end of your program

Note that you can read the current state of a channel set up as an output using the input() function. For example to toggle an output:

استفاده از PWM

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

برای شروع ایجاد سیگنال PWM :

تغییر فرکانس خروجی :

برای تغییر چرخه کار ( duty cycle ) از دستور زیر استفاده کنید .

توقف سیگنال pwm :

با اجرای دستور فوق ارسال دستور PWM متوقف میشود .

مثال : چشمک LED یه مرتبه در هر ۲ ثانیه :

 

مثال :برای تغییر نور LED به وسیله سیگنال PWM :

 

منبع : https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/

برچسب ها:
درج دیدگاه