مقدمه
پس از آشنایی و معرفی کامل برد esp32 و نصب و راه اندازی آن در arduino IDE, اکنون قصد داریم با پین های ورودی و خروجی تراشه ESP32 آشنا شویم. در این مطلب همچنین با کاربرد پایه های ESP32 آشنا خواهید شد.
پین های ESP-WROOM-32
از بردهای کمکی که برای این چیپ ESP32 وجود دارند, می توان NodeMCU را نام برد. تراشه ESP32 در سه تایپ wroom , wrover و solo عرضه می شود.در شکل زیر پین های ESP-WROOM-32 را مشاهده می کنید:
لوازم جانبی ESP32
- مبدل 18 کاناله آنالوگ به دیجیتال (ADC)
- 3 رابط SPI
- 3 رابط UART
- 2 رابط I2C
- PWM با خروجی 16 کاناله
- 2 مبدل دیجیتال به آنالوگ (DAC)
- 2 رابط I2S
- 10پین GPIO لمسی
پین های ESP32 DEVKIT V1
توضیح پایه های ESP32
در جدول زیر تمامی پین ها را به ترتیب اعداد برای شما جمع آوری کردیم.
راهنمای جدول
سبز | استفاده از این پین ها مجاز است |
زرد | استفاده از این پین ها مجاز است،اما توجه و احتیاط لازم را در هنگام بوت (راه اندازی) داشته باشید. |
قرمز | چه به عنوان ورودی یا خروجی, کار با این پایه ها توصیه نمی شود. |
GPIO | ورودی | خروجی | توضیح |
0 | pulled up | OK | outputs PWM signal at boot |
1 | TX pin | OK | debug output at boot |
2 | OK | OK | connected to on-board LED |
3 | OK | RX pin | HIGH at boot |
4 | OK | OK | |
5 | OK | OK | outputs PWM signal at boot |
6 | x | x | connected to the integrated SPI flash |
7 | x | x | connected to the integrated SPI flash |
8 | x | x | connected to the integrated SPI flash |
9 | x | x | connected to the integrated SPI flash |
10 | x | x | connected to the integrated SPI flash |
11 | x | x | connected to the integrated SPI flash |
12 | OK | OK | boot fail if pulled high |
13 | OK | OK | |
14 | OK | OK | outputs PWM signal at boot |
15 | OK | OK | outputs PWM signal at boot |
16 | OK | OK | |
17 | OK | OK | |
18 | OK | OK | |
19 | OK | OK | |
20 | OK | OK | |
21 | OK | OK | |
22 | OK | OK | |
23 | OK | OK | |
24 | OK | OK | |
25 | OK | OK | |
26 | OK | OK | |
27 | OK | OK | |
28 | OK | OK | |
29 | OK | OK | |
30 | OK | OK | |
31 | OK | OK | |
32 | OK | OK | |
33 | OK | OK | |
34 | OK | input only | |
35 | OK | input only | |
36 | OK | input only | |
39 | OK | input only |
در ادامه به بررسی بیشتر پین های ورودی و خروجی ESP32 می پردازیم.
پین های مختص ورودی / input only
پین های 34 تا 39 تنها به عنوان ورودی ست می شوند. این پین ها ورودی مقاومت pull-up یا pull-down ندارند:
- GPIO 34
- GPIO 35
- GPIO 36
- GPIO 39
حافظه فلش داخلی SPI در ESP-WROOM-32
GPIO 6 تا GPIO 11 در برخی از بردهای توسعه ESP32 وجود دارد. این پایه ها به حافظه فلش داخلی SPI در چیپ 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)
پایه های حسگر خازنی
برد ESP32 دارای 10 سنسور خارنی داخلی می باشد. این حسگرها می توانند تغییرات اعمال شده ای که دارای بار الکتریکی است، را تشخیص دهد. (مانند پوست انسان)
⇐ از پین های حسگر خازنی برای بیدار کردن برد ESP32 از حالت deep sleep نیز می توانید استفاده کنید.
حسگرهای لمسی داخلی به GPIOهای زیر متصل هستند:
- 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)
مبدل آنالوگ به دیجتال ADC
ESP32 دارای کانال های ورودی ADC 18 x 12 می باشد. (در حالیکه ESP8266 تنها 1x 10 ADC دارد. در لیست زیر GPIO های که می توانند به عنوان 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)
↵ کانال های ورودی ADC دارای رزولوشن 12 بیتی می باشند. نتیجتاً مقادیر خوانده شده آنالوگ را در بازه ی 0 تا 4095 می توانید دریافت کنید:
- 0 مربوط به ولتاژ 0
- 4095 مربوط به 3.3 ولت
پایه های ADC برد ESP32 دارای رفتار خطی نیستند. بدین معنا که؛ مقادیر بین 0 تا 0.1 ولت و یا 3.2 تا 3.3ولت را نمی توان جدا کرد.
برای درک بیشتر این مطلب به نمودار زیر در سایت گیت هاب توجه فرمایید:
مبدل دیجیتال به آنالوگ DAC
2 کانال DAC 2×8 بیتی در برد ESP32 داریم. که سیگنال های دیجیتال را به آنالوگ در خروجی تبدیل می کند. اسامی این کانال ها به صورت زیر است:
- DAC1 (GPIO25)
- DAC2 (GPIO26)
GPIO های RTC
GPIO های ماژول RTC (ساعت فوق دقیق) در برد ESP32 وجود دارند که می توان از آن ها برای بیدار کردن ESP32 از deep sleep در حالت (ULP) فوق کم مصرف، استفاده کرد. 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 دارای 16 کانال مستقل است. که می تواند برای تولید سیگنال های PWM با ساختارهای مختلفی پیکربندی شود.
برای ست کردن یک سیگنال PWM؛ پارامترهای زیر را باید در کدنویسی تعریف کنید:
- فرکانس سیگنال
- Duty cycle یا دوره کاری
- کانال PWM
- GPIO ای که می خواهید سیگنال خروجی برای آن تعریف شود
پروتکل I2C
ESP32 دارای 2 کانال I2C می باشد که هر پین می تواند به عنوان SDA یا SCL ست شود. وقتی که از برد ESP32 با نرم افزار Arduino IDE استفاده می کنید، پین های I2C به صورت پیش فرض عبارتند از:
- GPIO 21 (SDA)
- GPIO 22 (SCL)
اگر می خواهید از پین های دیگری استفاده کنید، در دستور کد مربوط به کتابخانه wire, باید آن را فرا بخوانید:
Wire.begin(SDA, SCL);
پروتکل SPI
جدول زیر, پین هایی هستند که به صورت پیش فرض برای پروتکل SPI تعریف شده اند:
CS | CLK | MISO | MOSI | SPI |
GPIO 5 | GPIO 18 | GPIO 19 | GPIO 23 | VSPI |
GPIO 15 | GPIO 14 | GPIO 12 | GPIO 13 | HSPI |
وقفه یا Interrupt
همه پایه های ESP32 می توانند به عنوان وقفه عمل کنند.
پایه های HIGH at Boot
بعضی از GPIOها باعث حالت HIGH یا reset می شوند. بدین معنا که نتایج در خروجی ها تحت تاثیر اتصال این پایه ها, غیر قابل پیش بینی خواهند بود:
- GPIO 1
- GPIO 3
- GPIO 5
- GPIO 6 to GPIO 11
- GPIO 14
- GPIO 15
فعال سازی (Enable)
enable؛ پایه فعال ساز و تنظیم کننده است که pull up می باشد. بنابراین با اتصال به زمین (ground), تنظیم کننده 3.3v غیر فعال می شود. به عنوان مثال؛ با اتصال این پین به یک دکمه فشاری، می توانید از پایه EN برای ری استارت کردن ESP32 استفاده کنید.
برای آموزش های بیشتر و تکمیلی با ادامه مجموعه ESP32 همراه باشید.🙂