نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
Avatar

پین های ورودی و خروجی رزبری پای raspberry pi gpio tutorial_part1

به امید خدا تو این پست و پست بعدی به راه اندازی پین های ورودی و خروجی رزبری پای ( GPIO ) می پردازیم.

استفاده از پایه های GPIO رزبری پای به عنوان خروجی

رزبری پای 2 و 3 دارای 40 پین خروجی/ورودی  می باشند. که رابط i2c,spi,uart از امکاناتش به حساب میاد. فقط یه adc کم داره که میشه با یه آی سی adc بهش اضافه کرد. نقطه قوت رزبری پای اینه که در عین کامپیوتر بودن، امکانات یک میکرو کنترلر رو در اختیار ما میگذاره. در تصویر زیر، پین های رسپری 2 و 3 رو می بینیم:
پین های ورودی و خروجی رزبری پای raspberry pi gpio tutorial
در مرحله اول، صفر و یک کردن پایه ها رو بررسی می کنیم.(عملیات مشابه PORTA.0=1 که در CV AVR داشتیم رو با رزبری پای پیاده می کنیم.)
نام گذاری پایه های رزبری پای در دو مد مختلف انجام گرفته :

  1. BCM
  2. BOARD

نام گذاری پایه ها در مد BCM برای هر ورژن رزبری پای متفاوت است و برای مثال همان عددی است که در تصاویر بالا مقابل عبارت GPIO نوشته شده است. نام گذاری پایه ها در مد BOARD برای ورژن های مختلف رسپری که تعداد پایه های برابری دارند، مشابه هم است و برای مثال همان عددی است که در تصاویر بالا  زیر ستون pin نوشته شده است.
پورت های رزبری پای
مد BCM زمانی استفاده می شود که نیاز به اجرای برنامه روی نسخه های مختلف رزبری پای باشد.(قابلیت حمل)
در ابتدا، نیاز به یک فضای برنامه نویسی داریم. می توان از ترمینال استفاده کرد ولی ما به دلیل سادگی کار، با python کار میکنیم.

چرا پایتون؟

  1. منابع آموزشی بسیار
  2. پایتون یک مفسر است و به ما امکان خطایابی دقیق را می دهد ( چون برنامه رو خط به خط ترجمه می کنه ولی کامپایلر برنامه رو یکجا ترجمه میکنه. )

ولی عیب مفسر ها در سرعت پایین تر نسبت به کامپایلر است.(در برنامه هایی با حلقه زیاد و پیچیده و عملیات های تکراری مثلا پردازش تصویر این اختلاف سرعت مشهود است.)

برای آشنایی با فضای پایتون در رزبری پای، مسیر زیر رو طی کنید:
آموزش پایتون در رزبری پای
محیط کار پایتون 3 :
محیط کار پایتون 3 رزبری پای
می خوایم یه ال ای دی رو با رسپری روشن و خاموش کنیم.مدار زیر رو می بندیم:
پروژه gpio رزبری پای
آنود ال ای دی رو به پین 36 (GPIO16) وصل می کنیم و با یک مقاومت 220 اهمی سری کرده و سر دوم مقاومت را به یکی از پایه های زمین رزبری پای وصل  می کنیم.
با رعایت حروف بزرگ و کوچک و فاصله ها، کد های زیر رو به ترتیب در پایتون وارد کنید ( بعد از هر خط اینتر بزنید )

کد بالا، کتابخونه مربوط به GPIO رو فراخوانی میکنه ( یه چیزی مثل <include<mega32 تو کد ویژن میمونه )

این یکی مانع وقوع خطا هنگام تنظیم دوباره پایه می شود

کد بالا، مد کاری رو مشخص میکنه.(مد BOARD)

کد بالا، پایه 36 رو به عنوان خروجی تنظیم میکنه.(عملی مشابه دستور DDRA در کد ویژن)
دو قطعه کدی که در زیر میاریم، کار دو خط بالا رو انجام میده.(این بار در مد BCM )

توجه : برای تغییر مد باید پایتون رو ریست کرد.(با فشردن کلید ترکیبی Ctrl+F6)
در ادامه فرض بر این است که مد کاری روی BCM تنظیم شده است.
حالا برای 0 و 1 کردن پایه مورد نظر،از دستور زیر استفاده می کنیم:(ابتدا یک کردن پایه)

دو دستور زیر،هم عملکرد مشابه دستور قبلی دارند:

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

توجه : سطح ولتاژ منطق 1، برابر 3.3 ولت است.
برای اینکه کدهایی که می نویسیم ، دوباره قابل اجرا باشند، پایتون رو ببنید و ترمینال رو باز کنید.در محیط ترمینال،با تایپ کد زیر،یک فایل با پسوند قابل اجرا توسط پایتون باز می شود:

آموزش پایتون در رزبری پای
از این بعد،برنامه های خودمون رو تو این محیط می نویسیم.
می خواهیم برنامه ای بنویسیم که یک ال ای دی که به پایه شماره 36 متصل است رو به مدت 3 ثانیه روشن کرده،سپس دوباره خاموش کنیم:(پایه 36 در مد BCM 16 نام گذاری شده است.)

خط دوم، از کتابخانه time ، تابع sleep  رو به برنامه اضافه می کنه.(مشابه <include <delay.h در کد ویژن) تابع sleep پارامترش رو بر حسب ثانیه میگیره و عدد اعشاری هم قبول می کنه.
بعد از نوشتن کد، کلید های ترکیبی Ctrl+x رو فشار دهید، سپس کلید y رو فشار بدید. بعدش اینتر بزنید تا به صفحه اصلی ترمینال برگردید. بعدش کد زیر رو تایپ و اینتر کنید:

قطعه کدی که نوشتید، اجرا شد.
حالا اگه بخوایم برنامه دائما اجرا بشه، و ال ای دی 3 ثانیه روشن بماند و 1 ثانیه هم خاموش بماند و این روند ادامه داشته باشد در ترمینال تایپ کنید :

و مطابق تصویر زیر دو خط به برنامه اضافه کنید :
یکی

و دیگری

برنامه نویسی رزبری پای
بعدش مثل دفعه قبل، Ctrl+x و بعدش y و سپس اینتر و اجرای برنامه با وارد کردن کد زیر در ترمینال(از این به بعد،نمیگم که اینتر هم می خواد. بدونید که بعد از تایپ هر دستور در ترمینال، باید اینتر بزنید.)

برنامه شروع به کار می کنه و تا زمانی که کلید های ترکیبی Ctrl+z رو نزدید،به کارش ادامه میده.
توجه : در پایتون، بعد از دستورات شرطی، تعدادی از برنامه های زیر شرط اجرا می شوند که از یک ستون شروع می شوند. برای مثال اگر خط آخر ( (sleep(1 ) رو به اول سطر ببریم، دیگه جزو عملیات شرط نخواهد بود و اجرا نمیشه. و ال ای دی همواره روشن دیده می شه. و پایان while جایی هست که به اول سطر برگردیم.
برنامه نویسی رزبری پای
برای تنظیمات چند پین به صورت هم زمان فقط یه مثال میزنم:
پروژه gpio رزبری پای
برای مثال،می خواهیم سه پایه GPIO16  و GPIO20 و GPIO21 رو به صورت همزمان تغییر بدیم.
 

این کد، ابتدا پایه های GPIO16  و GPIO20 و GPIO21 رو به عنوان خروجی تنظیم میکنه. بعدش مقدار 1 رو به هر سه تاشون میده و 3 ثانیه بعد،سه تاشون رو 0 می کنه.
اگر بخوایم به هر کدوم از پایه ها رو جداگانه مقدار بدیم،اینجوری می نویسیم:
 

این کد هم سه تا پایه رو به عنوان خروجی مقدار دهی می کنه و مقدار 1 رو به پایه GPIO16 و GPIO21 و مقدار 0 رو به GPIO20 میده و سه ثانیه بعد معکوسشون می کنه.
توجه : برای اینکه در استفاده های بعدی از خطاهای احتمالی جلوگیری شود،بهتر است در انتهای کد،از تابع زیر استفاده کنیم:

 
به امید خدا در مطلب بعدی، نحوه تنظیم PWM رو خواهیم داشت و راه اندازی سرو موتور SG90
جهت هر چه مستحکم تر شدن مقام ولایت فقیه و تعجیل درظهور بابای خوبمون مهدی(عج) صلوات

پسورد فایل های سایت :
www.dmf313.ir
Avatar دانش آموخته (فارغ التحصیل سابق) کارشناسی الکترونیک هستم. سه سال اول دانشگاه رو به نحو احسن هدر دادم رفت!! تا پایان ترم هفتم داشتم فکر می کردم که چی کار کنم و چی کار نکنم؟ ترم هشتم اساتید خوبی داشتم و تصمیم گرفتم،یه تکونی به خودم بدم. الان هم در حال یاد گیری علایقم هستم...
ارسال دیدگاه
15

1) تعداد حروف غیر فارسی از حروف فارسی بیشتر باشه دیدگاه به صورت خودکار حذف میشه.

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. Avatar

    مهمان

    moreza

    سلام اکر بخواهیم برای ریست کردن یه میکرو از رزبری استفاده کنیم چه پابه ای به کار میاد

    1396/09/14
    03:32
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      سلام اگر منظورتون راست کردن خود رزبریه
      تو لینک زیر یه آموزش گذاشته (البته بنده امتحان نکردم!!)
      دکمه ریست برای رزبری پای
      اما اگه منظورتون ریست کردن یه میکرو دیگه با رزبری هست،باید یکی از پایه های رزبری رو به پایه ریست میکرو وصل کنید .

      1396/09/14
      10:55
  2. Avatar

    مهمان

    محمد

    درود
    من برنامه شما رو با استفاده فایل سیستم و پایتون اجرا کردم البته با برد pine64 به این صورت
    def unexport_pins(pins):
    try:
    f = open(“/sys/class/gpio/unexport”,”w”)
    f.write(str(pins))
    f.close()
    except IOError:
    print “GPIO %s is not found, so skipping unexport gpio” % (str(pins), )
    def setpindirection(pin_no, pin_direction):
    gpiopin = “gpio%s” % (str(pin_no), )
    pin = open(“/sys/class/gpio/”+gpiopin+”/direction”,”w”)
    pin.write(pin_direction)
    pin.close()
    def writepins(pin_no, pin_value):
    gpiopin = “gpio%s” % (str(pin_no), )
    pin = open(“/sys/class/gpio/”+gpiopin+”/value”,”w”)
    if pin_value == 1:
    pin.write(“1”)
    else:
    pin.write(“0”)
    pin.close()
    def readpins(pin_no):
    gpiopin = “gpio%s” % (str(pin_no), )
    pin = open(“/sys/class/gpio/”+gpiopin+”/value”,”r”)
    value = pin.read()
    print “The value on the PIN %s is : %s” % (str(pin_no), str(value))
    pin.close()
    return int(value)
    if __name__ == ‘__main__’:
    from time import sleep
    export_pins(32)
    setpindirection(32, “out”)
    while(1):
    writepins(32, 1)
    sleep(1)
    writepins(32, 0)
    sleep(1)

    1396/09/02
    09:38
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      سلام
      خیلی ممنون .
      pin64 نسبت به سری رزبری پای چه مزایایی داره؟

      1396/09/02
      01:31
      • Avatar

        مهمان

        محمد

        درود
        Pine64 یه پردازنده 4 هسته ای 64 بیتی داره (a64 allwinner) که همانند رزبری پای ۳ از معماری cortex a53 استفاده میکنه و دارای خروجی مشابه رزبری پای 2 هست . از سیستم عامل های android و لینوکس هم پشتیبانی میکنه .
        به لحاظ قیمت بسیار ارزون تر هست نسبت به رزبری ولی به لحاظ منابع آموزشی و نرم افزارهای موجود قطعا رزبری حرف اول رو میزنه و من پیشنهاد میکنم واسه کسایی که میخوان با این سیستما کار کنن اول با رزبری شروع کنن به دلیل منابع آموزشی خوب .
        مشابه رزبری کتابخانه RPi_GPIO هم میشه روش نصب کرد (البته باید از گیت های دانلودش کنید) که مثل gpio های رزبری میشه به پایه ها تو مد bcm و board مقدار داد.

        1396/09/02
        04:59
  3. Avatar

    مهمان

    آرین

    زبان پایتون یه زبان سطح بالاه و به همین دلیل بیش از حد آبخوردن تشریف داره و به نظر شما زیاد جالب نیست مخصوصا نحوه حلقه گذاری و رعایت اصول در حلقه و تب ها نبود goto
    و در مورد برنامه نویسی با زبان های دیگه هم اگه کتاب خونش باشه چرا که نه ولی راحت ترین و روش اصلی همین پایتونه
    مطمئن باشید اگه پایتون زبان مسخره ای بود به طور پیش فرض در تمامی لینوکس ها قرار نمی گرفت
    باز ممنون از سایت خوبتون

    1395/06/30
    12:32
    • مهدی دمرچیلو

      مدیر سایت

      مهدی دمرچیلو

      نه کسی که با خونواده C کار کنه یه جورایی بهش وابسته میشه و نه این که بیشتر کار ما با زبون سی هستش تو الکترونیک یکم سخته بریم سمت پایتون – برا من حداقل این طوری هستش.

      1395/06/30
      01:00
  4. Avatar

    مهمان

    farzad

    سلام. بهتر نیست با c++ و کیوت برنامه ها رو نوشت.
    این قسمت هم برای مدیر سایت و دوستانی که c++ کار میکنن.
    اسم کتابخونه مربوط به gpio
    wiringPi هستش. که راحت روی کیوت نصب میشه.

    1395/06/29
    05:22
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      تا حالا کار نکردم .

      1395/06/29
      05:23
      • Avatar

        نویسنده این مطلب

        محمدرضا اسلامی

        البته الان دیگه کار کردم!!!

        1395/06/30
        03:11
  5. Avatar

    مهمان

    keivanjan

    خیلی عالی بود- منتظر قسمت pwm هستیم

    1395/06/28
    07:53
  6. مهدی دمرچیلو

    مدیر سایت

    مهدی دمرچیلو

    آقا ممنون ولی
    1) کاش شماتیک پروژه رو هم میزاشتی.
    2) این پایتون که مثل برنامه نویسی مطلب هستش، به شخصه از پایتون در نگاه اول خوشم نیومد.
    نمیشه به زبون c برنامه نوشت؟ خیلی دوست دارم تو رزبری پای از qt و c استفاده کنم.

    1395/06/27
    08:07
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      با سلام
      1_یه چیزی شبیه شماتیک برای قسمت اول گذاشتم.برای قسمت دوم هم می خواستم بذارم.گفتم الکی مطلب شلوغ میشه.
      2_شدن که میشه ولی تا حالا با رسپری قسمت نشده برم سمت C از خداوند می خوام راه C رو به سمت بنده کج بفرماید ما که حالشو نداریم بریم سمت C

      1395/06/27
      09:45
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      یه سوال:
      چجوری می تونم شماتیکی مثل شکل زیر برای رسپری بسازم؟
      http://dmf313.ir/wp-content/uploads/VIEW24.png

      1395/06/27
      09:54
      • مهدی دمرچیلو

        مدیر سایت

        مهدی دمرچیلو

        به کمک نرم افزار Fritzing که برا رزبری هم فک کنم جواب بده

        1395/06/27
        10:32