مقدمه
ویژگیها و قابلیتهای جذاب ESP32، این میکروکنترلر را به گزینه بسیار مناسبی برای انجام انواع پروژهها و کاربردهای مربوط به اینترنت اشیا (Internet of Thing یا به اختصار IoT) تبدیل کرده است. برای استفاده بهینه از این ویژگیها و تواناییهای ESP32، شناخت کافی از پایه های آن الزامیست. هدف در این آموزش، معرفی انواع پایه های موجود در این میکروکنترلر و ویژگیهای مربوط به هر کدام از آن پایه هاست. پس تا انتهای آموزش با ما باشید!
آنچه در این آموزش یاد می گیرید
- انواع پایه های ESP32 و ویژگیهای آنها
معرفی کامل پایه ها (Pinout) میکروکنترلر ESP32 (ESP-WROOM-32)
انواع مختلفی از میکروکنترلرهای ESP32 تولید شده و در بازار موجود است. میکروکنترلری که در این آموزش به بررسی و توضیح پایه های آن پرداختهایم، میکروکنترلر ESP32-WROOM-32 است که به اختصار آن را WROOM32 نیز مینامند. این میکروکنترلر از معروفترین و پر استفادهترین میکروکنترلرهای سری ESP32 بوده و در بسیاری از بردهای توسعه مبتنی بر ESP32 استفاده شده است. از جمله این بردهای توسعه میتوان به ماژول ESP32 Wemos Lolin32 و ESP32-CoreBoard اشاره کرد. همچنین در صورتی که از برد توسعهای مبتنی بر میکروکنترلرهای ESP32 غیر از WROOM32 استفاده میکنید نیز این آموزش میتواند مفید باشد، چرا که انواع دیگر میکروکنترلرهای ESP32 نیز پایه های بسیار مشابه و با کاربرد یکسان با WROOM32 دارند.
در عکس زیر میتوانید انواع پایه های میکروکنترلر ESP32-WROOM-32، شماره پایه و کاربردهای آن را مشاهده کنید.
در ادامه به شرح جزئیتر پایه های این میکروکنترلر میپردازیم.
پایه های ESP32 به تفکیک
میکروکنترلر ESP32 در یک نگاه اجمالی دارای پایه های زیر است:
- 18 پایه مبدل آنالوگ به دیجیتال (ADC) 12 بیتی
- 2 پایه مبدل دیجیتال به آنالوگ (DAC) 8 بیتی
- 3 رابط SPI
- 2 رابط I2C
- 3 رابط UART
- 16 پایه PWM
- 2 رابط I2S
- 10 پایه حسگر لمسی
انواع پایه های ESP32 به شرح زیر است.
پایه های همهجانبه ورودی خروجی (GPIOs)
میکروکنترلر ESP32 دارای پایه های همهجانبه ورودی خروجی زیر است.
پایه های ADC
در مجموع 18 پایه مبدل آنالوگ به دیجیتال (ADC) 12 بیتی در میکروکنترلر ESP32 وجود دارد. 12 بیتی بودن این مبدلها به این معناست که میتوانند ولتاژ ورودی را به عددی بین 0 تا 4095 تبدیل کنند. 0 برای ورودی 0 ولت و 4095 برای ورودی 3.3 ولت.
این 18 پایه ADC به شرح زیر است.
- ADC1-CH0 (GPIO 36)
- ADC1-CH1 (GPIO 37)
- ADC1-CH2 (GPIO 38)
- ADC1-CH3 (GPIO 39)
- ADC1-CH4 (GPIO 32)
- ADC1-CH5 (GPIO 33)
- ADC1-CH6 (GPIO 34)
- ADC1-CH7 (GPIO 35)
- ADC2-CH0 (GPIO 4)
- ADC2-CH1 (GPIO 0)
- ADC2-CH2 (GPIO 2)
- ADC2-CH3 (GPIO 15)
- ADC2-CH4 (GPIO 13)
- ADC2-CH5 (GPIO 12)
- ADC2-CH6 (GPIO 14)
- ADC2-CH7 (GPIO 27)
- ADC2-CH8 (GPIO 25)
- ADC2-CH9 (GPIO 26)
توجه
توجه داشته باشید که کانالهای مرتبط با ADC2 با عملکرد Wifi تداخل دارند و در صورت راهاندازی Wifi ماژول ESP32 بهتر است در صورت نیاز به مبدل آنالوگ به دیجیتال، از پایه ADC1 استفاده کنید.
پایه های DAC
میکروکنترلر ESP32 دارای 2 پایه مبدل دیجیتال به آنالوگ (DAC) 8 بیتی است. رزولوشن 8 بیتی مبدلها نشان میدهد که میتوانند در خروجی، ولتاژی بین 0 تا 3.3 ولت با دقت 3.3/255 ولت تولید کنند.
این 2 پایه DAC به شرح زیر است.
- DAC1 (GPIO 25)
- DAC2 (GPIO 26)
پایه های لمسی خازنی
همانطور که پیشتر اشاره شد، میکروکنترلر ESP32 دارای 10 پایه است که میتوانند به صورت یک حسگر لمسی عمل کنند. همچنین کاربرد دیگر این پایه ها خارج کردن میکرو از حالت خواب عمیق است. برای اطلاع از حالت خواب عمیق میکروکنترلر ESP، میتوانید به لینک زیر مراجعه کنید.
لینک آموزش حالت خواب عمیق ESP32
10 پایه لمسی میکروکنترلر ESP32 به شرح زیر است.
- T0 (GPIO 4)
- T1 (GPIO 0)
- T2 (GPIO 2)
- T3 (GPIO 15)
- T4 (GPIO 13)
- T5 (GPIO 12)
- T6 (GPIO 14)
- T7 (GPIO 27)
- T8 (GPIO 33)
- T9 (GPIO 32)
پایه های ساعت (RTC)
میکروکنترلر ESP32 در مجموع دارای 16 پایه RTC است که این پایه ها عمدتا در حالت خواب عمیق میکروکنترلر استفاده میشوند. همچنین این پایه ها در بیدار کردن میکروکنترلر از خواب عمیق نیز کاربرد دارند.
پایه های ساعت (RTC) ESP32 به شرح زیر است.
- RTC_GPIO0 (GPIO 36)
- RTC_GPIO3 (GPIO 39)
- RTC_GPIO4 (GPIO 34)
- RTC_GPIO5 (GPIO 35)
- RTC_GPIO6 (GPIO 25)
- RTC_GPIO7 (GPIO 26)
- RTC_GPIO8 (GPIO 33)
- RTC_GPIO9 (GPIO 32)
- RTC_GPIO10 (GPIO 4)
- RTC_GPIO11 (GPIO 0)
- RTC_GPIO12 (GPIO 2)
- RTC_GPIO13 (GPIO 15)
- RTC_GPIO14 (GPIO 13)
- RTC_GPIO15 (GPIO 12)
- RTC_GPIO16 (GPIO 14)
- RTC_GPIO17 (GPIO 27)
پایه های SPI
میکروکنترلر ESP-WROOM-32 دارای 3 رابط پیشفرض SPI است. یکی از این 3 رابط، برای ارتباط SPI حافظه فلش میکروکنترلر تعبیه شده است و استفاده از آن توصیه نمیشود. پایه های این رابط به شرح زیر است.
- SCK/CLK (GPIO 6)
- SDO/SD0 (GPIO 7)
- SDI/SD1 (GPIO 8)
- SHD/SD2 (GPIO 9)
- SWP/SD3 (GPIO 10)
- CSC/CMD (GPIO 11)
همانطور که گفته شد، میکروکنترلر ESP32 دارای 3 رابط SPI است و بجز یکی از آنها که در بالا به آن اشاره شد و برای ارتباط با حافظه فلش استفاده میشود، میتوان از 2 رابط Spi دیگر استفاده کرد. این دو رابط Spi با عنوانهای HSpi (Hardware SPI) و دیگری VSPI (Virtual SPI) شناخته میشوند. پایه های مربوط به این دو رابط را میتوانید در جدول زیر مشاهده کنید.
CS | CLK | MOSI | MISO | SPI |
---|---|---|---|---|
GPIO 15 | GPIO 14 | GPIO 13 | GPIO 12 | HSPI |
GPIO 5 | GPIO 18 | GPIO 23 | GPIO 19 | VSPI |
نکته
دقت کنید که محدود به استفاده از دو رابط معرفی شده در بالا نیستید و در صورت نیاز میتوانید هر پایه دیگر esp32 را نیز به عنوان SPI تعریف کنید.
پایه های I2C
میکروکنترلر ESP32 دارای دو کانال داخلی I2C است و همچنین یک جفت پایه پیشفرض برای پروتکل ارتباطی I2C دارد. همچون SPI، در صورت نیاز میتوانید هر کدام از پایه های دیگر میکروکنترلر را نیز به عنوان I2C تعریف کنید.
پایه های I2C پیشفرض ESP32 به شرح زیر است.
- SDA (GPIO 21)
- SCL (GPIO 22)
پایه های ارتباط سریال (UART)
در این میکروکنترلر، 3 رابط سریال به صورت پیشفرض وجود دارد و مابقی پایه ها را نیز میتوان در کد به عنوان سریال تعریف کرد.
پایه های مربوط به این دو رابط را میتوانید در جدول زیر مشاهده کنید.
CST | RTS | TXD | RXD | UART |
---|---|---|---|---|
GPIO 19 | GPIO 22 | GPIO 3 | GPIO 1 | UART0 |
GPIO 6 | GPIO 11 | GPIO 10 | GPIO 9 | UART1 |
GPIO 8 | GPIO 7 | GPIO 17 | GPIO 16 | UART2 |
پایه های PWM
ESP32 یک کنترلر تولید کننده PWM دارد که میتوان به کمک آن در 16 کانال متفاوت سیگنال PWM تولید و هر کدام را به طور مستقل کنترل کرد.
برای تولید موج PWM، لازم است که ابتدا مقادیر
- فرکانس سیگنال
- پهنای پالس
- کانال PWM
را تنظیم کنید.
در ادامه این سیگنال PWM را میتوانید به عنوان خروجی هر پایه دلخواه ESP32 که توانایی تنظیم به عنوان خروجی دارد، قرار دهید. (پایه های GPIO 34-39 نمیتوانند به عنوان خروجی تنظیم شوند، در نتیجه نمیتوان از آنها برای تولید سیگنال PWM استفاده کرد.)
پایه های وقفه (Interrupt)
میتوانید از تمام پایه های GPIO به عنوان وقفه استفاده کنید.
پایه های تغذیه
پایه های مربوط به تغذیه در برد ESP32 به شرح زیر است.
پایه 3.3 ولت
پایه شماره 2 میکروکنترلر ESP32 همانطور که در عکس مشخص است، پایه اصلی تغذیه آن است. از آن جایی سطح منطقی که این میکروکنترلر در آن کار میکند، 3.3 ولت است، لازم است که یک ولتاژ دقیق در همین حدود برای تغذیه آن استفاده شود تا احتمال آسیب رسیدن به قطعه را کم کند.
پایه های GND
پایه های شماره 1، 15 و 38، پایه های زمین میکروکنترلر ESP32 محسوب میشوند. هنگام تغذیه میکروکنترلر، لازم است که هر سه به پایه زمین منبع تغذیه خارجی متصل شوند.
پایه EN
پایه شماره 3، پایه فعالسازی ماژول است. این پایه اصطلاحا Active High بوده و برای فعال کردن میکروکنترلر لازم است که به ولتاژ 3.3 ولت وصل شود.
یک گام جلوتر
- در ادامه پایه های حسگر لمسی ESP32 را راهاندازی کرده و یک LED را با آن کنترل کنید.
Comments (14)
سلام قسمت UART0 شماره پین های RX و TX جابه جا گذاشتین
با سلام
ممنون از اطلاع رسانی شما دوست عزیز.
اصلاح می شود
سلام و عرض ادب
چرا قسمت PWM رو کامل توضیح ندادید؟
من میخوام الان بدونم کدوم پایه های esp32 قابلیت PWM دارند ؟
این قسمت رو خوب توضبح ندادید
با سلام
تمام پایه های ESP می توانند به صورت PWM کار کنند. فقط چند پین خاص که فقط می توانند به عنوان ورودی کار کنند نمی توانند به عنوان PWM عمل کنند
سلام کیفیت آموزش تون خیلی بالا بود ولی حیف که ناقص هست و نتونستم استفاده کنم ، لطفا توضیحات مربوط به PWM رو کامل کنید چون لازم دارم بدونم که از کدوم پایه هاش به راحتی میشه برای تنظیم خروجی PWM استفاده کرد؟! من 4 تاشون رو نیاز دارم
با سلام
در توضیحات آماده است تمامی پایه ها را می توانید به عنوان خروجی تنظیم کنید به جز پایه های GPIO 34-39 نمیتوانند به عنوان خروجی تنظیم کرد.
ممنون از اطلاع رسانی شما.
حتما عکس مربوط به این موضوع را نیز اضافه خواهیم کرد.
سلام و عرض خسته نباشید
در میکرو کنترلر esp32wrom32d
از کدام پایه ها میتوان هم به عنوان ورودی استفاده کرد هم به عنوان خروجی
چون دیتاشیت خیلی از پایه ها رو به عنوان ورودی خروجی معرفی کرده ولی نمیشه از همشون استفاده روش تشخصیش چطور هست؟
با سلام
در میکرو های ESP32 برعکس میکرو های ATMega که هر پایه برای کار خاصی ساخته شده است. همه پایه ها را می توان برای هر کاری تخصیص داد.
فقط چند نکته می باشد که باید در نظر داشته باشید. پایه های 36و39و34و35 فقط ورودی می توانند باشند. پایه های 6,7,8,9,10,11 هم به حافظه داخلی میکرو وصل شده اند و نمیتوانید از این پایه ها استفاده کنید.
مورد دیگر نیز این می باشد که بعضی از پایه ها را در زمان روشن شدن نباید در حالت های خاصی قرار بگیرند وگرنه میکرو روشن نمی شود. که به اسم Strapping Pins شناخته میشوند. که به صورت زیر می باشد.
GPIO 0 (must be LOW to enter boot mode)
GPIO 2 (must be floating or LOW during boot)
GPIO 4
GPIO 5 (must be HIGH during boot)
GPIO 12 (must be LOW during boot)
GPIO 15 (must be HIGH during boot)
با سلام و خسته نباشید چگونه میتوانم دو عدد از پایه های مورد نظر را به عنوان رابط سریال تعریف کنم در اردوینو اینکار با کتابخانه software serial براحتی انجام میشود ولی برای esp32 نتواستم انجام دهم خیلی ممنون میشوم منو کمک کنید
با سلام
میکرو های ESP32 همگی دارای 3 عدد سریال داخلی هستند و نیازی به سریال مجازی نیست
برای مثال
Serial1.begin(115200, SERIAL_8N1, 14, 15, false);
Serial2.begin(115200, SERIAL_8N1, 16, 17, false);
می توانید 2 عدد سریال به جز سریال اصلی که برای پروگرام می باشد را ایجاد کنید.
پایه های مربوطه را نیز میتوانید بر روی هر پایه ای که دوست دارید قرار بدهید (بر روی پایه های SPI Flash قرار ندهید)
سلام وقت بخیر. این موضوع برای همه ESP32 ها صادق هست؟میخوام از ESP32 PICO MINI 02 استفاده کنم. دلیل اینکه در دیتاشیت بعضی از پایه ها به طور مثال Uart تعریف شده اند چیه؟
دقت بکنید در ESP تقریبا همه پایه ها برای هر کاری میشود تعریف بشود و محدودیت زیادی در این باره وجود ندارد. و بله برای همه نسخه های ESP این کار را میتوانید انجام بدهید. شماره پایه مورد نظر خود را در کدی که اعلام شده است قرار بدهید و ماژول خود را به پین های مربوطه وصل بنمایید.
سلام
لطفا یک آموزش برای پروگرام کردن این ماژول از طریق USB/TTL در برنامه Arduino IDE قرار دهید.
ممنون
https://thecaferobot.com/store/esp32-module-wifi-bluetooth-dual-mode
https://thecaferobot.com/store/eesp32-wroom-development-board
با سلام
به صورت کلی برای پروگرام کردن همه مدل های ESP ابتدا باید پکیج مورد نیاز آردوینو را نصب بکنید برای این کار طبق آموزش راه اندازی ماژول وای فای و بلوتوث ESP32 با استفاده از IDE آردوینو میتوانید انجام بدهید.
در مورد سیم کشی پروگرام کردن نیز کافی است یک تغذیه 3.3 ولتی را ایجاد بکنید (3.3 ولت روی ماژول های USB/TTL کافی نمی باشد) و تمامی سیم ها را وصل بنمایید.
سپس سریال مانیتور را باز کرده و بر بادریت 115200 قرار بدهید و یکبار دکمه ریست را بزنید، و مطالبی برای شما چاپ باید بگردد که نشانه سالم بودن ماژول و درست بودن سیم کشی می باشد. در این لحظه پایه IO0 را به GND وصل بکنید و دوباره دکمه ریست را بزنید و ماژول آماده پروگرام می باشد و با قطع کردن سریال مانیتور دستور پروگرام را بدهید و منتظر پروگرام شدن باشید.
اگر در این کار مبتدی هستید پیشنهاد میکنم از برد های توسعه ESP32 استفاده بکنید که همه این موارد در آنها انجام شده است.