کنترل GPIO در ESP8266 و ESP32 — آموزش جامع ورودی، خروجی، PWM و Interrupt
مقدمه: GPIO چیست و چرا مهم است؟
پایههای ورودی/خروجی دیجیتال یا همان GPIO (General Purpose Input Output) مهمترین رابط میان بردهای ESP8266 و ESP32 با دنیای بیرون هستند. هر پروژهای که با ESP انجام میدهید—از روشن کردن یک LED ساده گرفته تا کنترل رلهها، خواندن سنسورها، سیستمهای هوشمند، ارسال داده به اینترنت و …—بسته به GPIO ها اجرا میشود.
به همین دلیل، تسلط کامل بر GPIO اولین قدم برای حرفهای شدن در دنیای ESP است.
اما کنترل GPIO در ESP فقط روشن و خاموش کردن نیست!
شامل موضوعات زیر هم میشود:
-
ورودی دیجیتال (خواندن دکمه، سنسورهای on/off)
-
خروجی دیجیتال (کنترل LED، رله، ماژولها)
-
PWM (کنترل سرعت موتور، نور LED)
-
Interrupt یا وقفه
-
محدودیتهای GPIO ها
-
ویژگیهای خاص GPIO در ESP8266 و ESP32
-
Pull-up و Pull-down داخلی
-
Mapping پایهها در مدلهای مختلف
در این مقاله، تمام این موارد را کاملاً عملی و پروژه محور یاد میگیری.
فصل 1 — تفاوت GPIO در ESP8266 و ESP32
ESP8266 و ESP32 هر دو پایههای ورودی/خروجی دارند، اما ESP32 پیشرفتهتر است. جدول مقایسه زیر کمک بزرگی به انتخاب برد مناسب میکند:
| ویژگی | ESP8266 | ESP32 |
|---|---|---|
| تعداد GPIO واقعی | حدود 11 | حدود 25 |
| قابلیت PWM | دارد (ساده) | پیشرفته (LED PWM) |
| ADC | یک کانال | چندین کانال |
| DAC | ندارد | دو کانال DAC |
| وقفه (Interrupt) | دارد | بسیار قدرتمند |
| Touch Sensor | ندارد | دارد |
فصل 2 — معرفی GPIO های مهم در ESP8266
تمام پایههای ESP8266 قابل استفاده نیستند. برخی از پایهها نقشهای خاص دارند. مهمترین توضیح مربوط به پایههای زیر است:
GPIO0 – GPIO2 – GPIO15
این پایهها هنگام بوت نقش حیاتی دارند. اشتباه در اتصال آنها باعث عدم بوت شدن ESP میشود.
GPIO16
برای interrupt سطح بالا محدودیت دارد.
GPIO6 تا GPIO11
برای ارتباط با حافظه فلش استفاده میشوند؛ هرگز نباید به آنها چیزی وصل شود!
فصل 3 — معرفی GPIO های ESP32
ESP32 تعداد زیادی پایه دارد، اما باز هم برخی پایهها مخصوص هستند:
GPIO34 – GPIO35 – GPIO36 – GPIO39
فقط ورودی هستند. خروجی نیستند.
GPIO0
برای بوت استفاده میشود.
GPIO12
میتواند باعث تغییر تنظیمات داخلی ولتاژ فلش شود. بهتر است از آن دوری کنید.
فصل 4 — نوشتن اولین برنامه کنترل GPIO
قبل از شروع، اگر مقاله آپلود اولین برنامه روی ESP را نخواندهای، بشدت توصیه میکنم آن را مطالعه کنی.
روشن کردن یک LED در ESP8266 و ESP32
فصل 5 — خواندن ورودی دیجیتال (مثلاً دکمه)
اتصال پایهها:
-
یک طرف دکمه → GND
-
طرف دیگر → GPIO + Pull-up داخلی
کد:
نکته سئو و فنی:
Pull-up داخلی باعث میشود نیازی به مقاومت خارجی نباشد و نویز کمتر شود.
فصل 6 — استفاده از PWM برای کنترل شدت نور یا سرعت موتور
در ESP8266
در ESP32
ESP32 PWM بسیار حرفهای دارد:
فصل 7 — وقفه یا Interrupt؛ مهمترین ابزار در پروژههای حرفهای
وقتی با دکمه، سنسور حرکتی، IR و ... کار میکنید، استفاده از وقفه بهترین انتخاب است.
فصل 8 — جدول Mapping پایهها در بردهای مختلف
NodeMCU ESP8266
| شماره روی برد | GPIO واقعی |
|---|---|
| D0 | 16 |
| D1 | 5 |
| D2 | 4 |
| D3 | 0 |
| D4 | 2 |
| D5 | 14 |
| D6 | 12 |
| D7 | 13 |
| D8 | 15 |
ESP32 DevKit
پایهها معمولاً همان شماره GPIO هستند.
فصل 9 — محدودیتهای مهم GPIO که باید همیشه در ذهن داشته باشید
-
GPIO0، GPIO2، GPIO15 در بوت نقش دارند
-
GPIO12 حساس است و باعث بوت نشدن میشود
-
GPIO34-39 فقط ورودی هستند
-
GPIO6-11 در ESP8266 غیرقابل استفادهاند
این موارد باید همیشه در طراحی رعایت شود.
فصل 10 — کنترل چند خروجی و چند ورودی همزمان
مثلاً کنترل 4 رله + خواندن 2 دکمه + یک PWM: