این آموزش به شما نشان میدهد که چگونه میتوانید GPIOها را به عنوان ورودی و خروجیهای دیجیتال در فریمور میکروپایتون کنترل کنید. مثلا شما یاد خواهید گرفت که چگونه مقدار یک دکمهفشاری را بخوانید و مطابق آن یک LED را روشن کنید.
پیشنیازها
برای این که این آموزش را دنبال کنید، نیاز است که فریمور میکروپایتون در برد ESP32/ESP8266 شما نصب باشد. همچنین برای نوشتن و آپلود کد در بردتان، به یک IDE نیاز دارید. پیشنهاد ما این است که از Thonny IDE یا uPyCraft IDE استفاده کنید.
مرور کلی پروژه
برای این که به شما نشان دهیم چگونه از ورودی و خروجیهای دیجیتال استفاده کنید، یک پروژه با دکمهفشاری و LED را مثال زدهایم. ما وضعیت دکمهفشاری را میخوانیم و همان طور که در شکلهای زیر آمده است، بر اساس آن LED را روشن میکنیم.
ورودیهای دیجیتال
برای این که مقدار یک GPIO را بخوانیم، نیاز است که یک آبجکت Pin را ایجاد کنیم و آن را به عنوان ورودی تنظیم کنیم. برای مثال:
button = Pin(4, Pin.IN)
سپس، برای گرفتن مقدار، نیاز دارید که از متد () value در آبجک Pin استفاده کنید.(بدون این که در آرگومان آن چیزی بنویسیم.) برای مثال، برای گرفتن وضعیت یک آبجکت Pin که button نامیده میشود، از عبارت زیر استفاده میکنیم:
button.value()
در مثال پروژه با جزئیات به شما نشان خواهیم داد که هر قسمت چگونه کار میکند.
خروجیهای دیجیتال
برای این که یک GPIO را روشن(on) یا خاموش(off) تنظیم کنیم، نیاز است که ابتدا آن را به عنوان خروجی تنظیم کنیم. برای مثال:
led = Pin(5, Pin.OUT)
برای کنترل GPIO، از متد () value در آبجکت Pin استفاده میکنیم و آرگومان آن را ۰ یا ۱ قرار میدهیم. برای مثال، دستور زیر یک آبجکت Pin (یعنی led) را رو HIGH تنظیم میکند:
led.value(1)
برای تنظیم GPIO روی LOW، آرگومان را ۰ میگذاریم:
led.value(0)
شماتیک
قبل از ادامه کار، نیاز دارید که یک مدار با دکمهفشاری و LED ببندید. LED را به GPIO 5 و دکمهفشاری را به GPIO 4 وصل کنید.
قطعات مورد نیاز
لیستی از قطعاتی که برای ساخت مدار نیاز دارید:
ESP32 یا ESP8266
LED 5 mm
مقاومت ۳۳۰ اهمی
دکمهفشاری
مقاومت ۱۰ کیلواهمی
بردبرد
سیم جامپر
شماتیک ESP32
اگر از برد ESP32 استفاده میکنید، از دیاگرام شماتیک زیر استفاده کنید:
شماتیک ESP8266
اگر از برد ESP8266 استفاده میکنید، از دیاگرام شماتیک زیر استفاده کنید:
در ESP8266، پینی که با D1 مشخص شده، مربوط به GPIO 5 و پینی که با D2 مشخص شده، مربوط به GPIO 4 هستند.
نوشتن کد
کد زیر وضعیت دکمهفشاری را میخواند و مطابق آن LED را روشن میکند. این کد هم برای ESP32 و هم برای ESP8266 کار میکند.
from machine import Pin
from time import sleep
led = Pin(5, Pin.OUT)
button = Pin(4, Pin.IN)
while True:
led.value(button.value())
sleep(0.1)
کد چگونه کار میکند
ما با وارد کردن کلاس Pin از ماژول machine شروع کردیم و همچنین کلاس sleep از ماژول time را هم وارد کردیم:
from machine import Pin
from time import sleep
سپس، آبجکت Pin که led نامیده میشود را روی GPIO 5 ایجاد کردیم. LEDها خروجی هستند پس دومین آرگومان PIn.OUT خواهد بود.
led = Pin(5, Pin.OUT)
همچنین یک آبجکت که button نامیده میشود را روی GPIO 4 ایجاد کردیم. buttonها ورودی هستند؛ پس از Pin.IN استفاده میکنیم:
button = Pin(4, Pin.IN)
از ()button.value برای برگرداندن(خواندن) وضعیت دکمه استفاده کنید؛ سپس ()button.value را به عنوان آرگومان مقدار LED قرار دهید:
led.value(button.value())
در این روش، وقتی دکمه فشار داده میشود، ()button.value مقدار ۱ را برمیگرداند؛ که همان عبارت led.value(1) میباشد. این دستور، وضعیت LED را روی ۱ تنظیم و آن را روشن میکند. وقتی که دکمه فشار داده نشده است،()button.value مقدار ۰ را برمیگرداند؛ بنابراین عبارت led.value(0) را داریم و LED خاموش باقی میماند.
نمایش عملی
با استفاده از Thonny IDE یا uPyCraft IDE کد را در برد ESP ذخیره کنید. وقتی که دکمه را فشار میدهید، LED باید روشن شود و وقتی آن را رها میکنید، LED خاموش میماند.
جمعبندی
برای خواندن مقدار GPIOها، نیاز داریم که از متد ()value در آبجکت Pin استفاده کنیم. برای تنظیم مقدار یک GPIO، آرگومان ()value را ۱ یا ۰ میگذاریم تا LED را (به ترتیب) روشن یا خاموش کنیم.
امیدواریم این آموزش برای شما مفید بوده باشد.