برد Esp32

راه اندازی و کار با برد ESP32 بخش سوم: معرفی پایه ها و بررسی سخت افزاری

esp32-tutorial-step-three-gpio-and-hardware-digispark
نوشته شده توسط معین صابری

در سلسله آموزش های ماژول ESP32، قسمت سوم به بررسی پایه های سخت افزاری و GPIO ماژول ESP32 می پردازیم. ماژول ESP32 از پایه های GPIO بسیار بیشتری نسبت به ESP8266 بهره می برد. این ماژول همچنین از ۱۸ کانال ADC 12 بیتی بهره می برد. همانطور که در قسمت سوم آموزش ESP8266  مشاهده کردیم، برخی از پایه های GPIO در حالت عادی در دسترس نیستند.؛ در اینجا نیز برخی از پایه های ESP32 در حالت عادی قابلیت استفاده ندارند. در کنار این، برد ESP32CAM تعدادی از پایه های GPIO را برای کارت SD و دوربین رزرو کرده که در این آموزش به این موارد خواهیم پرداخت. در ادامه با مرجع تخصصی ESP32 به زبان فارسی، دیجی اسپارک همراه باشید.

 


وضعیت کلی پایه های GPIO در برد ESP32


در آموزش سوم کار با برد ESP32 قصد بررسی عمیق تری نسبت به پایه های GPIO ماژول ESP32 را داریم. در جدول زیر پایه های ورودی/خروجی و وضعیت آن ها برای استفاده را مشاهده می کنیم.

شرح وضعیت تعریف به صورت خروجی وضعیت تعریف به صورت ورودی نام پایه
جهت قراردادن ماژول در حالت پروگرام، باید این پایه حین بوت به GND متصل گردد. از این رو دقت نظر لازم را در نظر بگیرید که با GND شدن این پایه در هنگام BOOT، ماژول وارد مد پروگرام خواهد شد.

******

این پایه دارای سنسور تاچ است.

با رعایت نکات خاص می توان به عنوان خروجی تعریف کرد.

در هنگام boot این پایه سیگنال pwm تولید می کند.

با رعایت نکات خاص می توان به عنوان ورودی تعریف کرد GPIO0
این پایه، پایه TX ماژول است. در هنگام BOOT عباراتی که مربوط به راه اندازی هستند را در سریال مانیتور قرار می دهد. از این رو برای تعریف این پایه به عنوان خروجی، با توجه به تغییرات ولتاژ در هنگام بوت، دقت نظر لازم را در نظر داشته باشید. تحت شرایط خاص می توان به عنوان خروجی تعریف نمود. به عنوان ورودی نمی توان تعریف کرد. GPIO1
این پایه به LED روی برد نیز متصل شده است.

******

این پایه دارای سنسور تاچ است.

بدون مشکل می توان به عنوان خروجی تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO2
این پایه در هنگام بوت یک منطقی است. به عنوان خروجی نمی توان تعریف کرد. با رعایت نکات خاص می توان به عنوان ورودی تعریف کرد GPIO3
این پایه دارای سنسور تاچ است. بدون مشکل می توان به عنوان خروجی تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO4
بدون مشکل می توان به عنوان خروجی تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO5
این پایه برای اتصالات حافظه SPI FLASH رزرو شده است. به عنوان خروجی نمی توان تعریف کرد. به عنوان ورودی نمی توان تعریف کرد. GPIO6
این پایه برای اتصالات حافظه SPI FLASH رزرو شده است. به عنوان خروجی نمی توان تعریف کرد. به عنوان ورودی نمی توان تعریف کرد. GPIO7
این پایه برای اتصالات حافظه SPI FLASH رزرو شده است. به عنوان خروجی نمی توان تعریف کرد. به عنوان ورودی نمی توان تعریف کرد. GPIO8
این پایه برای اتصالات حافظه SPI FLASH رزرو شده است. به عنوان خروجی نمی توان تعریف کرد. به عنوان ورودی نمی توان تعریف کرد. GPIO9
این پایه برای اتصالات حافظه SPI FLASH رزرو شده است. به عنوان خروجی نمی توان تعریف کرد. به عنوان ورودی نمی توان تعریف کرد. GPIO10
این پایه برای اتصالات حافظه SPI FLASH رزرو شده است. به عنوان خروجی نمی توان تعریف کرد. به عنوان ورودی نمی توان تعریف کرد. GPIO11
در صورتیکه در هنگام boot این پایه یک باشد، ماژول راه اندازی نخواهد شد.

******

این پایه دارای سنسور تاچ است.

بدون مشکل می توان به عنوان خروجی تعریف نمود. با رعایت نکات خاص می توان به عنوان ورودی تعریف کرد GPIO12
این پایه دارای سنسور تاچ است. بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO13
در هنگام boot این پایه سیگنال pwm تولید می کند.

******

این پایه دارای سنسور تاچ است.

بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO14
در هنگام boot این پایه سیگنال pwm تولید می کند.

******

این پایه دارای سنسور تاچ است.

بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO15
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO16
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO17
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO18
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO19
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO21
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO22
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO23
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO25
بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO26
این پایه دارای سنسور تاچ است. بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO27
این پایه دارای سنسور تاچ است. بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO32
این پایه دارای سنسور تاچ است. بدون مشکل می توان به عنوان خروجی تعریف نمود. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO33
این پایه را تنها به عنوان ورودی می توان تعریف نمود. این پایه از مقاومت پول آپ و پول داون برخوردار نیست! به عنوان خروجی نمی توان تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO34
این پایه را تنها به عنوان ورودی می توان تعریف نمود. این پایه از مقاومت پول آپ و پول داون برخوردار نیست! به عنوان خروجی نمی توان تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO35
این پایه را تنها به عنوان ورودی می توان تعریف نمود. این پایه از مقاومت پول آپ و پول داون برخوردار نیست! به عنوان خروجی نمی توان تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO36
این پایه را تنها به عنوان ورودی می توان تعریف نمود. این پایه از مقاومت پول آپ و پول داون برخوردار نیست! به عنوان خروجی نمی توان تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO39

 

پس از بررسی پایه های دیجیتال و وضعیت آن ها، نوبت به پایه های آنالوگ و تنظیمات آن می رسد. قسمت بعدی مربوط به این موضوع است.

 


پایه های ADC برد ESP32 خواندن مقادیر و تنظیمات


پس از بررسی پایه های دیجیتال، در این قسمت به پایه های ADC می پردازیم. همانطور که گفته شد، ماژول ESP32 دارای ۱۸ کانال ADC با دقت ۱۲ بیت است. این ۱۸ پایه در دو پورت مجزا ADC قرار گرفته اند. جدول زیر شماره پایه ها و عبارت از پیش تعریف شده برای دسترسی به پایه ها(define) را نمایش می دهد.

شماره پایه ADC مقدار از پیش تعریف شده
GPIO36 ADC1_CH0
GPIO37 ADC1_CH1
GPIO38 ADC1_CH2
GPIO39 ADC1_CH3
GPIO32 ADC1_CH4
GPIO33 ADC1_CH5
GPIO34 ADC1_CH6
GPIO35 ADC1_CH7
GPIO4 ADC2_CH0
GPIO0 ADC2_CH1
GPIO2 ADC2_CH2
GPIO15 ADC2_CH3
GPIO13 ADC2_CH4
GPIO12 ADC2_CH5
GPIO14 ADC2_CH6
GPIO27 ADC2_CH7
GPIO25 ADC2_CH8
GPIO26 ADC2_CH9

 

در ادامه، توابع مربوط به تنظیمات ADC ماژول ESP32 که در کار با برد ESP32موثر است را می توان در جدول زیر مشاهده نمود.

 

شرح تابع
به کمک این تابع رزولوشن(دقت) تبدیل تعیین می گردد. دقت اندازه گیری در ورودی تعیین می گردد. عدد ۹ برای ۹ بیت(مقادیر بین ۰ الی ۵۱۱) و عدد ۱۲ برای دقت ۱۲ بیت(مقادیر بین ۰ الی ۴۰۹۵) تعیین می گردد. مقدار پیشفرض بدون تنظیم این تابع، ۱۲ بیت است. analogReadResolution(resolution)
به کمک این تابع تعداد سیگل هایی که cpu برای خواندن ADC مصرف می کند تعیین می گردد. مقدار ورودی بین ۱ الی ۲۵۵ بوده و پیشفرض ۸ است. analogSetCycles(cycles)
به کمک این تابع نرخ نمونه برداری تعیین می گردد.  نرخ نمونه برداری در وردی قرار می گیرد. مقدار پیشفرض ۱ است. مقدار قابل قبول در بازه ۱ الی ۲۵۵ است. analogSetSamples(samples)
این تابع تقسیم فرکانسی کلاک برای ADC را تعیین می کند. این مقدار در ورودی قرار می گیرد. مقدار پیشفرض یک بوده و بازه قابل قبول بین ۱ الی ۲۵۵ است. analogSetClockDiv(attenuation)
این تابع ولتاژ مرجع ADC را تعیین می کند. ولتاژ مرجع در ورودی تابع  قرار می گیرد. ورودی های معتبر به همراه مقادیر آن ها عبارتند از:

ADC_0db= ولتاژ مرجع ۸۰۰ میلی ولت

ADC_2_5db=ولتاژ مرجع ۱۱۰۰ میلی ولت

ADC_6db=ولتاژ مرجع ۱۳۵۰ میلی ولت

ADC_11db=ولتاژ مرجع ۲۶۰۰ ولت

توجه: مقدار پیشفرض برابر با ADC_11db  است.

analogSetAttenuation(attenuation)

 

در ادامه، طی یک برنامه مقدار ADC را از ورودی خوانده و در سریال مانیتور قرار می دهیم.

 

 

در برنامه فوق مقدار ADC از پایه های ۳۶ و ۳۷ خوانده شده و در سریال مانیتور قرار می گیرد.

 


خواندن مقادیر سنسور تاچ در برد ESP32


همانطور که پیشتر گفته شد، ماژول ESP32 دارای سنسور تاچ بر روی برخی از پایه های GPIO است. این پایه ها در جدول وضعیت ورودی خروجی مشخص شده است. برنامه زیر نحوه خواندن تاچ سنسور را نمایش می دهد.

 

در برنامه فوق، مقدار تاچ پایه GPIO4 خوانده شده و در سریال مانیتور چاپ می گردد.

 


برنامه نویسی PWM در ماژول ESP32


همانطور که گفته شد، ماژول ESP32 دارای امکانات جانبی مختلفی است. در رابطه با PWM نکات زیر را در نظر بگیرید.

۱-بر روی کلیه پایه های ماژول غیر از پایه های ۳۴ الی ۳۹ نمی توان PWM تولید نمود.

۲-ایجاد پالس PWM در ماژول ESP32 با تابعی متفاوت نسبت به analogWrite صورت می گیرد.

۳-قبل از ایجاد پالس PWM، می بایست تنظیمات را انجام دهید.

جدول زیر توابع مربوط به تنظیمات PWM را نشان می دهد.

شرح تابع
به کمک این تابع، پایه ای که قصد ایجاد PWM روی آن داریم تعیین می گردد. ورودی اول شماره پایه GPIO که قصد ایجاد PWM داریم، تعیین شود. ووردی دوم نیز کانال PWM را تعیین می کند. شماره کانال بین ۰ الی ۱۵ قرار می گیرد. ledcAttachPin(GPIO, channel)
این تابع نوشتن سیگنال PWM روی پایه را تعیین می کند. ورودی اول کانال PWM و ورودی دوم dutycycle را مشخص می کند. ledcWrite(channel, dutycycle)
به کمک این تابع تنظیمات مربوط به کانال و فرکانس و دقت مشخص می شود. ورودی اول کانال pwm، ورودی دوم فرکانس pwm و ورودی سوم دقت را تعیین می کند. بیشینه فرکانس ۷۸۱۲۵ هرتز و دقت ۱۰ بیت است. ledcSetup(ledChannel, freq, resolution);

 

 

پس از بررسی توابع، نوبت به اجرای یک نمونه برنامه می رسد. کد زیر مقدار pwm دلخواه را با فرکانس تعیین شده در خروجی می نویسد.

 


پورت های SPI و I2C و وقفه های خارجی


همانطور که گفته شد، ماژول ESP32 دارای یک پورت I2C و ۴ پورت SPI است. دو پورت SPI ماژول از پیش جهت برقراری ارتباط با حافظه فلش SPI رزرو شده است. دو پورت دیگر نیز در دسترس قرار دارد. پایه های I2C برای ماژول عبارتند از:

 

برای راه اندازی نیز از توابع کتابخانه wire استفاده می گردد. همچنین جدول زیر پایه های مربوط به دو پورت SPI را نمایش می دهد. کتابخانه SPI نیز برای راه اندازی، در این ماژول استفاده می گردد.

 

SPI MOSI MISO CLK
VSPI GPIO 23 GPIO 19 GPIO 18
HSPI GPIO 13 GPIO 12 GPIO 14

 

در رابطه با وقفه، کلیه پایه های ماژول ESP32 قابلیت تبدیل شدن به وقفه را دارند. برنامه نویسی وقفه همانند دستورات آردوینو در ماژول ESP8266 است.

 


پایه های GPIO در ماژول ESP32CAM


همانطور که پیشتر در رابطه با ماژول ESP32-CAM صحبت کردیم، این ماژول بر روی خود از دوربین و یک ماژول کارت SD بهره می برد.  ماژول دورین و ماژول کارت SD به پایه های GPIO برد ESP32 متصل هستند. در هنگام استفاده و فراخوانی توابع SD، پایه های زیر مورد استفاده قرار می گیرند.

 

MicroSD card ESP32
CLK GPIO 14
CMD GPIO 15
DATA0 GPIO 2
DATA1 GPIO 4
DATA2 GPIO 12
DATA3 GPIO 13

 

پایه های GPIO فوق در ماژول ESP32-CAM در دسترس بوده و می توانید از آن ها استفاده نمایید. اما در صورتیکه کارت SD در برنامه فراخوانی شود، دیگر قابل استفاده نخواهند بود. همچنین سایر پایه ها توسط دوربین اشغال شده و دسترسی به آن ها روی برد وجود ندارد.

توجه: بر روی ماژول ESP32-CAM یک LED جهت فلش دوربین هنگام عکس برداری تعبیه شده است. این فلش به پایه GPIO4 متصل شده است.

 


لوازم متناسب با آموزش


ماژول ESP32

برد ESP32ACM

مبدل سریال به USB

 


جمع بندی


در سلسله آموزش های ماژول ESP32 قسمت دوم به طور مفصل و جامع به پایه های GPIO این ماژول کاربردی پرداختیم. ماژول ESP32 بر خلاف ماژول ESP8266 از پایه های GPIO به مراتب بیشتری برخوردار است. همچنین این ماژول دارای ۱۸ کانال ADC با دقت ۱۲ بیت است. در این آموزش ابتدا به بررسی پایه ها و قابلیت های هر پایه پرداختیم. سپس پایه های آنالوگ و نحوه کار با آن ها را مورد بررسی قرار دادیم. سپس سایر قابلیت ها نظیر PWM، SPI و I2C تحلیل و بررسی شد. در هر قسمت ضمن بررسی، به ارائه مثال برنامه نویسی پرداختیم. در نهایت به بررسی ماژول ESP32CAM و پایه های آن پرداختیم. در قسمت های بعدی این سلسله آموزش، با ورود به بحث های شبکه ای، امکانات وای فای و بلوتوث ماژول را بررسی خواهیم نمود.

 

چنانچه مطالب این آموزش را گنک یافتید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در مطالب درج شده و یا کدها وجود دارد می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه