در آموزش های قبلی از سری آموزش های میکروپایتون با ESP32 به مواردی از قبیل راه اندازی اولیه و نصب میکروپایتون در بردهای ESP32 اشاره کردیم. موارد لازم بطور کامل توضیح داده شد اما در این آموزش قصد کنترل GPIO در بردهای ESP32 به کمک میکروپایتون را داریم. پایه های ورودی و خروجی روی برد را با زبان micropython چگونه بایستی کنترل کنیم؟ در ادامه آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
میکروپایتون MicroPython
تا به امروز زبان برنامه نویسی پایتون Python، زبانی همه منظوره و قدرتمند معرفی شده که البته همینطور است. اما در مواردی این زبان برنامه نویسی میتواند انتخاب اول برای پروژه نباشد. برای مثال در بحث نرم افزارهای Embedded ، زبان C همواره در صدر جدول میباشد. این موضوع دلیلی شد برای متولد شدن زبان برنامه نویسی MicroPython تا جای خالی پایتون را در این موارد پر کند. MicroPython پیاده سازی مجدد پایتون ۳ است که برای میکروکنترلرها و سیستم های امبدد هدف گذاری شده است. MicroPython بسیار شبیه پایتون معمولی است. بنابراین، اگر از قبل می دانید که چگونه در پایتون برنامه نویسی کنید، می دانید که چگونه در MicroPython برنامه نویسی کنید.
GPIO چیست؟
GPIO مخفف General Purpose Input/Output است. در واقه یک رابط استاندارد است که برای اتصال میکروکنترلرها به سایر دستگاه های الکترونیکی استفاده می شود. به عنوان مثال، میتوان از آن با سنسورها، دیودها و در کل قطعات الکترونیکی، نمایشگرها و ماژول های System-on-Chip استفاده کرد. کنترل gpio را می توان در سه حالت استفاده کرد که به ترتیب input ،output ،UART interface است. حالت ورودی یا INPUT حالت پیش فرض GPIO است.
کلاس machine.Pin
یک Object پین برای کنترل پایه های ورودی/خروجی استفاده می شود، همچنین این پین ها به عنوان GPIO نیز شناخته می شوند. پین های ورودی/خروجی یا GPIO برای اهداف عمومی و کنترل کلی لازم در پروژه ها وجود دارند. این Object پین ها معمولا با یک پین فیزیکی مرتبط هستند که می تواند ولتاژ خروجی را درایو کند و ولتاژهای ورودی را بخواند. کلاس pin دارای روشهایی برای تنظیم حالت پین (IN یا OUT و غیره) و روشهایی برای بدست آوردن و تنظیم سطح منطق دیجیتال است. برای کنترل آنالوگ یک پایه، باید به کلاس ADC مراجعه کنیم که در آموزش های آینده به این مورد اشاره خواهد شد. یک شی پین شده با استفاده از یک شناسه ساخته می شود که بدون ابهام یک پین ورودی/خروجی خاص را مشخص می کند. این شناسه از یک integer ،string ،tuple با پورت و شماره PIN تشکیل شده است.
پین های موجود از محدوده های زیر است شامل: ۰-۱۹، ۲۱-۲۳، ۲۵-۲۷، ۳۲-۳۹ با تعداد واقعی پین GPIO تراشه ESP32 مطابقت دارند. توجه داشته باشید که بسیاری از برد های کمکی مانند Nodemcu و Wemos از شماره گذاری پین adhoc مخصوص خود استفاده می کنند به عنوان مثال D0 ،D1.
در این بخش نمونه از کاربرد این کلاس در کد را مشاهده میکنید.
from machine import Pin p0 = Pin(0, Pin.OUT) p0.value(0) p0.value(1) p2 = Pin(2, Pin.IN, Pin.PULL_UP) print(p2.value()) p0.init(p0.IN, p0.PULL_DOWN) p0.irq(lambda p:print(p))
- پایه های ۱ و ۳ به ترتیب REPL UART TX و RX هستند
- پین های ۳۴ الی ۳۹ فقط ورودی هستند و همچنین مقاومت pull up داخلی ندارند.
- پایه های ۶، ۷، ۸، ۱۱، ۱۶ و ۱۷ برای اتصال فلش تعبیه شده استفاده می شود و برای موارد دیگر توصیه نمی شود.
-
مقدار جریانکشی برخی از پین ها را می توان روی Pin.PULL_HOLD تنظیم کرد تا مصرف برق در هنگام خواب عمیق یا deep sleep کاهش یابد.
کنترل GPIO
در این قسمت یک مثال کوچک برای کنترل پین های برد ESp32 بوسیله میکروپایتون را تست خواهیم کرد. که در نتیجه اقدام به ۰ و ۱ کردن یک پایه و در ادامه عامل خاموش و روشن یک LED در پین ۲ برد ESP32 خواهد شد. کد زیر را در برنامه upycraft وارد کنید. در ادامه ابتدا با استفاده گزینه STOP تمام برناتمه های از قبل اجرایی شده متوقف کنید، سپس با گزینه Download and Run button کد را اجرا کنید. همچنین این مورد را فراموش نکنید که از منوی TOOLS پورت و برد مدنظر که ESP32 است را انتخاب کنید.
- کد های نمونه این بخش.
در این کد ابتدا کتابخانه های مربوط را معرفی کردیم، همچنین بجای استفاده از تاخیر زمانی یا Delay در این کد از حالت Sleep برای هربار روشن و خاموش شدن LED استفاده کردهایم. همچینی پین مدنظر معرفی شده و در حالت پیشفرض خروجی قرار دارد.
from machine import Pin from time import sleep led = Pin(2, Pin.OUT) while True: led.value(not led.value()) sleep(0.5)
- شماتیک مربوط به مثال بالا
در این مدار به سادگی از GPIO 2 و همچنین پین زمین GND برای راهاندازی LED استفاده کردیم.
کلام آخر با سایفر
در این آموزش که چهارمین قسمت از آموزش های میکروپایتون با بردهای ESP32 بود، مفهوم GPIO و همچنین روش کنترل آن در برد های ESP32 با استفاده از میکروپایتون را به کمک یک مثال ساده بررسی کردیم. در آموزش های بعدی این مفهوم را گسترده تر با استفاده مثال های پروژه محور بررسی خواهیم کرد.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.