به آموزش پایه های ESP32 خوش آمدید.
در این قسمت به معرفی پین های ورودی و خروجی ESP32 می پردازیم:
تراشه ESP32 48 تا پین داره که عملیات مختلفی رو میشه با اون پین ها انجام داد که البته بعضی از پین ها در بعضی از مدلهای این تراشه قابل استفاده نیستن.
تو شکل زیر میتونید پین های ESP-WROOM-32 رو ببینید:
پریفرال های ESP32
پریفرالهای ESP32 شامل موارد زیر است:
- ۱۸ تا کانال مبدل آنالوگ به دیجیتال
- ۳ تا اینترفیس SPI
- ۳ تا اینترفیس UART
- ۲ تا اینترفیس I2C
- ۱۶ تا کانال خروجی PWM
- ۲ تا مبدل دیجیتال به آنالوگ
- ۲ تا اینترفیس I2S
- ۱۰ تا GPIO حسگر خازنی
مبدل های دیجیتال به آنالوگ و آنالوگ به دیجیتال به پین های خاصی اختصاص داده شده اند. به خاطر خاصیت مالتی پلکسینگ ESP32، داخل کد هم می تونید بقیه پین ها رو به پریفرال های دیگه اختصاص بدید.
مشخصات پین ها رو میتونید در نرم افزار مشخص کنید اما بعضی از اونها به صورت پیش فرض اختصاص داده شده اند. (شکل زیر نمونه ۳۶ پین ESP32 DEVKIT V1 DOIT board هست که جای پین ها بر اساس تولید کننده این تراشه میتونه تغییر کنه.)
همچنین بعضی از این پین ها بر اساس مشخصاتی که دارن میتونن برای یک کار خاصی استفاده بشن. جدول زیر میگه کدوم پین ها بهتره به عنوان ورودی، خروجی و یا اینکه با احتیاط استفاده بشه رو توضیح میده :
پین های با رنگ سبز محدودیتی برای استفاده ندارن، پین های با رنگ زرد برای استفاده مناسب هستن اما باید مراقب بود چون ممکنه عملکردی غیر قابل پیش بینی در بوت داشته باشن. از پین های با رنگ قرمز هم پیشنهاد میشه که به عنوان ورودی و خروجی استفاده نکنید.
پین هایی که فقط باید ورودی باشن :
پین های GPIO 34 تا ۳۹ GPI هستن و هیچ مقاومت پول آپ و پول داون داخلشون ندارن. و نمیتونن به عنوان خروجی استفاده بشن:
GPIO34
GPIO35
GPIO36
GPIO39
ارتباط SPI در ESP-WROOM-32
پین های GPIO6 تا GPIO11 در بعضی برد های ESP32 قرار دارن اما اینها به تراشه ESP-WROOM-32 متصل هستند پس از اونها در پروژه ها تون استفاده نکنید.
GPIO 6 (SCK/CLK)
GPIO 7 (SDO/SD0)
GPIO 8 (SDI/SD1)
GPIO 9 (SHD/SD2)
GPIO 10 (SWP/SD3)
GPIO 11 (CSC/CMD)
GPIO های لمسی خازنی
ESP32 10 تا سنسور داخلی لمسی داره. این سنسورها هرگونه تغییراتی رو تو هرچیزی که شارژ الکتریکی نگه دارن ، مثل پوست انسان، اندازه گیری میکنن. پس با لمس GPIOها با انگشت میتونن این تغییرات رو تشخیص بدن. پس به جای استفاده از دکمه های مکانیکی، این پین ها به راحتی در پدهای خازنی میتونن گنجانده و استفاده بشن . میتونید ازاینجا یاد بگیرید.
اون سنسورهای لمسی به این GPIO ها متصل هستن :
T0(GPIO4)
T1(GPIO0)
T2(GPIO2)
T3(GPIO15)
T4(GPIO13)
T5(GPIO12)
T6(GPIO14)
T7(GPIO27)
T8(GPIO33)
T9(GPIO32)
استفاده از این پین ها در آردوینو رو از اینجا ببینید.
مبدل آنالوگ به دیجیتال
ESP32 دارای ۱۸ تا کانال ورودی ۱۲ بیتی برای مبدل آنالوگ به دیجیتال است(در حالیکه ESP8266 فقط یک کانال ۱۰ بیتی دارد). GPIO هایی که میتونن در مبدل آنالوگ به دیجیتال استفاده بشن به شرح زیر هستند :
ADC1-CH0(GPIO36)
ADC1-CH1(GPIO37)
ADC1-CH2(GPIO38)
ADC1-CH3(GPIO39)
ADC1-CH4(GPIO32)
ADC1-CH5(GPIO33)
ADC1-CH6(GPIO34)
ADC1-CH7(GPIO35)
ADC2-CH0(GPIO4)
ADC2-CH1(GPIO0)
ADC2-CH2(GPIO2)
ADC2-CH3(GPIO15)
ADC2-CH4(GPIO13)
ADC2-CH5(GPIO12)
ADC2-CH6(GPIO14)
ADC2-CH7(GPIO27)
ADC2-CH8(GPIO25)
ADC2-CH9(GPIO26)
کانالهای ورودی ADC رزولوشن ۱ بیتی دارن. به این معنی که میتونید رنج ورودی آنالوگ را از ۰ تا ۴۰۹۵ قرار بدین . ۰ یعنی صفر ولت و ۴۰۹۵ یعنی ۳.۳ ولت . پس محدوده ولتاژ ورودی آنالوگ از ۰ تا ۳.۳ ولت میتونه باشه. همچنین میتونید این محدوده رو در کد تعیین کنید.
پین های ADC در ESP32 رفتاری خطی ندارن بنابراین نمیتونید ولتاژی بین ۰ تا ۰.۱ ولت یا ۳.۲ تا ۳.۳ ولت رو تشخیص بدین. پس وقتی دارین از این پین ها استفاده میکنید ولتاژ هایی که به این شکل هستن رو باید مقدار اون رو به حافظه بسپارید. رفتار این پین ها مطابق شکل زیر است :
مبدل دیجیتال به آنالوگ
دو تا کانال ۸ بیتی برای تبدیل خروجی های دیجیتال به آنالوگ وجود داره:
DAC1(GPIO25)
DAC2(GPIO26)
GPIO های RTC
GPIO های که منتهی به زیرسیستم RTC کم توان هستند در مواقعی که ESP32 در حالت SLEEP عمیقی قرار داره استفاده میشن.با این پین ها میشه وقتی پردازنده ULP داره کار میکنه و ESP32 به حالت SLEEP عمیق میره ، از این GPIO های RTC میتونید استفاده کنید و از SLEEP خارجشون کنید. اونها میتونن به عنوان GPIO های خارجی برای این کار استفاده بشن.
RTC_GPIO0(GPIO36)
RTC_GPIO3(GPIO39)
RTC_GPIO4(GPIO34)
RTC_GPIO5(GPIO35)
RTC_GPIO6(GPIO25)
RTC_GPIO7(GPIO26)
RTC_GPIO8(GPIO33)
RTC_GPIO9(GPIO32)
RTC_GPIO10(GPIO4)
RTC_GPIO11(GPIO0)
RTC_GPIO12(GPIO2)
RTC_GPIO13(GPIO15)
RTC_GPIO14(GPIO13)
RTC_GPIO15(GPIO12)
RTC_GPIO16(GPIO14)
RTC_GPIO17(GPIO27)
PWM
کنترلر ال ای دی PWM در ESP32 ، ۱۶ تا کانال داره که با پیکربندی شدن میشه سیگنالهای PWM با ویژگی های مختلفی تولید کرد. همه پین هایی که میتونن خروجی باشن، به عنوان پین های PWM قابل استفاده هستن (GPIO های ۳۴ تا ۳۹ نمیتونن PWM تولید کنن)
برای اینکه یک PWM درست کنید باید این پارامترها رو در کد قرار بدین :
- فرکانس سیگنال
- سیکل وظیفه
- کانال PWM
- GPIO ای که از اون خروجی گرفته میشه.
I2C
ESP32 دو تا کانال I2C داره و هر پینی میتونه به صورت SDA یا SCL تنظیم بشه. وقتی که ESP32 رو با آردوینو استفاده میکنید پین های پیش فرض I2C اینها هستن :
GPIO21(SDA)
GPIO22(SCL)
اما اگر قصد استفاده از پین دیگه ای رو دارید، وقتی از کتابخونه WIRE استفاده میکنید، فقط باید این کد رو فراخوانی کنید:
Wire.begin(SDA, SCL);
SPI
پین هایی که به صورت پیش فرض برای SPI هستن در زیر قرار داده شده :
وقفه ها
همه GPIO ها میتونن به عنوان پین وقفه پیکربندی بشن .
پین های استرپ
پین های استرپ در ESP32 :
GPIO0
GPIO2
GPIO4
GPIO5 (زمان بوت شدن باید در حالت HIGH باشد)
GPIO12 (زمان بوت شدن باید در حالت LOW باشد)
GPIO15 (زمان بوت شدن باید در حالت HIGH باشد)
این پین ها برای قرار دادن ESP32 در بوت لودر و یا حافظه فلش استفاده می شوند. در اکثر بردهایی که پورت USB سریال روی خود دارند نیازی به نگرانی در مورد این پین ها ندارید زیرا خود برد این پین ها را در وضعیت مناسب مود فلش و یا بوت قرار می دهد.
درصورتیکه پریفرال هایی متصل به این پین ها داشته باشید ممکنه زمان آپلود کردن کد جدید ، فلش کردن ESP32 و یا ریست کردن برد به مشکل برخورد کنید دلیلش اینه که این پریفرال ها مانع این میشن که ESP32 در مد مناسبی قرار بگیره.
پین های HIGH در بوت
بعضی از GPIO ها وضعیت خود را در بوت و ریست به حالت HIGH و یا خروجی PWM تغییر می دهند. یعنی اگر خروجی هایی به این GPIO ها دارید در زمان بوت و یا ریست شدن ESP32 ممکن است با نتایج غیر قابل پیش بینی مواجه بشین.
GPIO1
GPIO3
GPIO5
GPIO6 تا GPIO11 (متصل به SPI )
GPIO14
GPIO15
Enable (En)
En در واقع پین ۳.۳ ولت رگولاتوره که اگر به زمین مدار متصل بشه غیر فعال میشه. مثلا اگه این پین رو به یه push button وصل کنید میشه برای ریست کردن esp32 ازش استفاده کرد.
جریان کشی GPIO
مقدار ماکزیمم جریان کشی هر GPIO برابر 40 میلی آمپره.
سنسور داخلی HALL EFFECT در ESP32
تغییرات میدان مغناطیسی در اطراف ESP32 با این سنسور قابل تشخیصه .
پایان معرفی پایه های ESP32
ماژول ESP32 دارای وای فای و بلوتوث
ماژول ESP32 دارای وای فای و بلوتوث