سلام به همه.
امروز در قسمت جدید آموزش رزبری پای با پایتون میخوایم با هم بررسی کنیم چطوری با GPIO رزبری یه LED رو با استفاده از یه دکمه خاموش و روشن کنیم.
توی این نوشته دیدین که چطور میشه توی رزبری پای یه LED رو خاموش و روشن کرد. حالا میخوایم بررسی کنیم ببینیم چطور میشه با استفاده از یه دکمه این کار رو کرد.
وسایل مورد نیاز:
۱− رزبری پای (من از رزبری ۴ استفاده کردم)
۲− یدونه LED (رنگش مهم نیست)
۳− یدونه مقاومت ( من از ۲۲۰ استفاده کردم)
۴− دکمه (من از دکمه Push Up استفاده کردم)
۵− سه عدد سیم نر و ماده (ترجیحا با رنگ های متفاوت)
شاید برای شما مفید باشد: آموزش رزبری پای از 0 تا 100 از مقدماتی تا پیشرفته
۶− دو عدد سیم دو سر نر
۷− برد بورد (کوچیک و بزرگش فرقی نداره)
اول از همه بیاید تا این تصویر که نشون دهنده raspberry pi gpio pinout هست رو نگاه کنیم.
همون طور که میبینید پین شماره ۶ میشه Ground یا همون منفی و پین های شماره ۷ و ۱۱ رزبری پای به ترتیب میشه GPIO 4 و GPIO 17 .
یدونه از سیم های نر و ماده را توی پین شماره ۶ که همون Ground میشه میزنیم و سر دیگه او رو توی پورت ردیف منفی یا همون Ground برد بورد وصل میکنیم.
شاید برای شما مفید باشد: آموزش رزبری پای از 0 تا 100 از مقدماتی تا پیشرفته
حالا LED رو برمیداریم و سر منفی اون رو به پورت شماره G28 و G24 برد بود وصل میکنیم. بعدش یدونه سیم های دو سر نر رو از ردیف منفی برد بورد به پورت F28 برد بورد وصل میکنیم (ینی یه سر سیم توی ردیف منفی و سر دیگه توی شماره F28). نوبت به مقاومت میرسه. مقاومت رو برمیداریم و یه سر اون رو توی پورت H24 و سر دیگه رو توی پورت H18 وصل میکنیم.
حالا یدونه دیگه از سیم های نر و ماده رو برمیداریم و توی پین شماره ۷ رزبری وصل میکنیم و سر دیگه اون رو توی پورت شماره G18 برد بورد وصل میکنیم. دیگه نوبت دکمه شده که اون رو روی بردبورد جایگذاری کنیم. به این عکس دقت کنید:
توی گذاشتن دکمه روی برد بورد باید به این نکته دقت داشت که باید طوری دکمه رو توی برد بورد بزاریم که A و C توی پورت های E6 و E8 برد بورد و B و D توی پورت های شماره F6 و F8 باشه.
بعد از اینکه دکمه رو توی برد بورد گذاشتیم باید یدونه از سیم های نر و ماده رو به پین شماره ۱۱ و سر دیگه اون رو به پورت شماره H6 وصل میکنیم. بعدش یدونه سیم های دوسر نر رو از ردیف منفی به پورت H8 برد بورد وصل میکنیم. تبریک میگم. سیم کشی ها تموم شد. حالا بیاید با هم بریم کد بزنیم.
توی رزبری یه محیط ویرایشگر متن برای برنامه نویسی نیاز داریم که اینجا من از nano استفاده میکنم. شما میتونید از هر ویرایشگر متنی که خواستید استفاده کنید. یه فایل به نام button.py ایجاد کرده و اون رو باز میکنیم و شروع به کد نویسی توی اون میکنیم.
1 2 | import RPi.GPIO as GPIO from time import sleep |
همون طور که از قبل میدونید توی این دو خط کد کتابخونه یا ماژول مربوط بر برنامه نویسی رزبری و کتابخونه تایم رو وارد رزبری کردیم.
1 | GPIO.setmode(GPIO.BCM) |
توی این خط اصطلاحا اومدیم و set mode کردیم رزبری رو.
1 2 3 | sleep_time=0.1 light_pin=4 button_pin=17 |
این سه خط هم به ترتیب گفتیم میخوایم ۰.۱ ثانیه تاخیر داشته باشیم(جلو تر میفهمیم چرا)، LED توی پین شماره ۴ و دکمه توی پین شماره ۱۷ رزبری پای وصله.
1 2 | GPIO.setup(light_pin,GPIO.OUT) GPIO.setup(button_pin,GPIO.IN,pull_up_down=GPIO.PUD_UP) |
خط اول گفتیم اون که LED بهش وصله (همون پین شماره ۷ که میشد GPIO 4 رزبری) رو میخوایم به عنوان خروجی ازش استفاده کنیم و خط بعدی گفتیم که میخوایم از پین که دکمه رو بهش وصل کردیم (همون پین شماره ۱۱ که میشه GPIO 17 ) به عنوان خروجی استفاده کنیم.
1 2 3 4 5 6 7 | while True: if GPIO.input(button_pin): GPIO.output(light_pin,0) else: GPIO.output(light_pin,1) sleep(sleep_time) |
حالا توی یه حلقه اومدیم و هر ۰.۱ ثانیه یکبار چک میکنیم که اگه دکمه فشره شده بود چراغ رو روشن و در غیر این صورت چراغ رو خاموش کن.
دقت کنید که تا زمانی که دکمه پایین نگه داشته شود چراغ روشن مانده و زمانی که دکمه رها شود، چراغ خاموش میشود.
کد کامل که استفاده کردیم به این صورته:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) sleep_time=0.1 light_pin=4 button_pin=17 GPIO.setup(light_pin,GPIO.OUT) GPIO.setup(button_pin,GPIO.IN,pull_up_down=GPIO.PUD_UP) while True: if GPIO.input(button_pin): GPIO.output(light_pin,0) else: GPIO.output(light_pin,1) sleep(sleep_time) |
به همین سادگی و به همین خوشمزگی ما با استفاده از یه دکمه LED رو خاموش و روشن کردیم.
اشکالی که این کد داره اینه که در صورتی که LED روشن باشه و ما برنامه رو از حالت اجرا دربیاریم LED روشن میمونه و اصطلاحا GPIO خالی نمیشه. برای اینکه این مشکل رو حل کنیم کد خودمون رو به صورت زیر تغییر میدیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) sleep_time=0.1 light_pin=4 button_pin=17 GPIO.setup(light_pin,GPIO.OUT) GPIO.setup(button_pin,GPIO.IN,pull_up_down=GPIO.PUD_UP) try: while True: if GPIO.input(button_pin): GPIO.output(light_pin,1) else: GPIO.output(light_pin,0) sleep(sleep_time) finally: GPIO.cleanup() |
همون طور که ما به سادگی هرچه تمام تر ما LED رو با استفاده از یدونه دکمه خاموش و روشن کردیم.
امیدوارم که خوشتون اومده باشه.