مهدی اشراقی
مهندس شبکه و Embeded system
0

هیچ محصولی در سبد خرید نیست.

مهدی اشراقی
مهندس شبکه و Embeded system

نوشته بلاگ

نحوه پیکربندی پین های رزبری پای (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 یعنی روشن رو وارد کنید .


 

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

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

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

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

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

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

ورودی در GPIO

راه های مختلفی برای دریافت مقدار از پایه ها GPIO وجود داره . اولین و ساده ترین راه بررسی مقدار در زمان مشخص هست البته معایبی هم وجود داره در این روش که مثلا مقدار رو در زمان اشتباهی بخونید و داده رو از دست بدید . در این حالت مقادیر در بازه رمانی مشخصی به صورت چرخشی خونده میشن . راه دوم خواندن مقادیر ورودی به صورت ‘interrupts’ هست که وابسته به تحریک یک پایه هست و به محض تغییر وضعیت یک پایه مقدار خوانده میشه . در روش دوم حتما باید از مدار مقاومت Pull up / Pull down استفاده کرد تا نتیجه صحیح باشد .

مدار Pull up / Pull down :

فرض کنید در روش دوم ( interrupts ) در ورودی از مقاومت Pull up / Pull down استفاده نکنید و در این حالت پایه در وضعیت شناور قرار دارد و مقداری که از این پایه خوانده میشود در وضعیت تعریف نشده قرار دارد چون مدار نه به زمین و نه به تغذیه متصل شده .

برای رفع این مشکل ، از یک مقاومت با عنوان pull up/down resistors استفاده میکنیم . این مقاومت هم به صورت نرم افزاری و هم به صورت سخت افزاری قابل استفاده میباشد . در حالت سخت افزاری معمولا از یک مقاومت ۱۰K اهمی بین کانال ورودی و ولتاژ تغذیه ۳.۳V یا بین کانال ورودی و زمین استفاده میشود .

برای pull up/down resistors به صورت نرم افزاری به صورت زیر عمل میکنیم :

خروجی در GPIO :

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

۱. تنظیم پایه های مدنظر به عنوان خروجی

۲. برای فعال کردن یک پایه :

۳. برای غیر فعال کردن یک پایه :

۴. برای تغییر مقدار چند پایه به صورت همزمان :

۵. پاکسازی مقادیر پایه ها

توجه داشته باشید که با استفاده از تابع input() می توانید وضعیت فعلی یک کانال راه اندازی شده را به عنوان خروجی بخوانید. به عنوان مثال برای تغییر یک خروجی

استفاده از PWM

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

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

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

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

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

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

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

 

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

 

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

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