آموزش ESP32آموزش اینترنت اشیا

معرفی برد ESP32-C3 Super Mini + جزئیات پین و امکانات

برد ESP32-C3 Super Mini نشان می دهد که تکنولوژی چقدر می تواند در فضایی بسیار کوچک جای بگیرد. این برد تقریباً به اندازه یک انگشت شست ساخته شده و حول هسته ESP32-C3 از شرکت Espressif طراحی شده است. مهم ترین تغییر معماری نسبت به نسخه های قبلی استفاده از یک پردازنده 32 بیتی RISC-V به جای معماری قدیمی Tensilica Xtensa است.

برای استفاده بهینه از این برد، آشنایی دقیق با پین اوت آن ضروری است. هر پین نقش خاصی دارد و دانستن عملکرد هر یک به شما کمک می کند مدارهای قابل اطمینانی بسازید، اشتباهات را کاهش دهید و بیشترین بهره را از این برد کوچک ببرید.

پین اوت ESP32-C3 Super Mini

ESP32-C3 Super Mini برای نمونه سازی ساده طراحی شده است. در دو ردیف 8 تایی در دو طرف برد، در مجموع 16 نقطه اتصال اصلی وجود دارد. فاصله پین ها 2.54 mm استاندارد است، بنابراین برد به راحتی روی برد بورد استاندارد قرار می گیرد یا با هدرهای معمولی روی PCB سفارشی نصب می شود.

دوره آموزش ESP32 دوره آموزش اینترنت اشیا حرفه ای دوره آموزش اینترنت اشیا مقدماتی دوره آموزش آردوینو

پین اوت در تصویر زیر نمایش داده شده است:

نمای کلی پین اوت برد ESP32-C3 Super Mini

توجه داشته باشید که ممکن است پین اوت بسته به سازنده کمی متفاوت باشد. بنابراین همیشه نقشه پین چاپ شده روی برد (silkscreen) را با پین اوت مرجع تطبیق دهید.

حال نگاهی دقیق تر به پین های ESP32-C3 Super Mini و عملکرد هر یک می اندازیم، از GPIOها شروع می کنیم.

GPIO های ESP32-C3 Super Mini

هدرهای برد 13 پین GPIO قابل استفاده را در اختیار شما قرار می دهند: GPIO 0 تا GPIO 10 و همچنین GPIO 20 و GPIO 21.

نمای نزدیک هدرها و GPIOهای قابل دسترس برد

قانون مهم و بنیادین: میکروکنترلر فقط با منطق 3.3V کار می کند. هرگز پین های GPIO را به منبع 5V متصل نکنید؛ این کار می تواند موجب آسیب دائمی به برد شود.

ماتریس GPIO و IO MUX

یکی از قابلیت های قدرتمند ESP32-C3، GPIO Matrix است. این یک سیستم داخلی مسیردهی است که اجازه می دهد توابع دیجیتال متعددی مانند PWM، I2C، SPI، UART، I2S یا TWAI را تقریباً به هر پین فیزیکی اختصاص دهید تنها از طریق تغییر نرم افزاری.

این انعطاف پذیری محدودیت هایی هم دارد. سیگنال ها از مسیر GPIO Matrix عبور می کنند که اندکی تاخیر اضافه می کند. در اغلب پروژه ها این تأخیر ناچیز است، اما برای سیگنال های بسیار سریع یا سیگنال های حساس آنالوگ که نباید دیجیتالی شوند، ESP32-C3 از مسیر GPIO Matrix عبور نکرده و از IO MUX استفاده می کند.

IO MUX برخی پین ها را مستقیماً به سخت افزارهای مشخص داخل چیپ متصل می کند. بعضی از این اتصالات ثابت بوده و قابل جابه جایی توسط نرم افزار نیستند، در حالی که بعضی دیگر مکان پیش فرضی دارند اما می توان آنها را از طریق GPIO Matrix تغییر مسیر داد. مثال هایی از توابعی که وابسته به IO MUX هستند عبارتند از: کانال های ADC، رابط JTAG داخلی برای دیباگ، کنترلر USB Serial/JTAG و اتصال های SPI با سرعت بالا که برای حافظه فلش داخلی استفاده می شوند.

بنابراین در حالی که می توانید توابعی مانند I2C یا PWM را به اکثر پین ها تخصیص دهید، نمی توان همه توابع را آزادانه جابه جا کرد. ویژگی هایی که به IO MUX وابسته اند، به پین های تعیین شده متکی هستند.

به طور خلاصه، سیگنال های پیرامونی برد را می توان این گونه گروه بندی کرد:

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
نوع مسیردهی نمونه های پیرامونی معنی
ثابت به پین های مشخص از طریق IO MUX ADC1, ADC2 این توابع باید از پین های اختصاصی خود استفاده کنند و با نرم افزار منتقل نمی شوند.
به پین های پیشفرض IO MUX متصل هستند، اما قابلیت روت دوباره از طریق GPIO Matrix وجود دارد UART0, SPI2 این توابع مکان پیشفرض دارند اما در صورت نیاز می توان آنها را به GPIOهای دیگر منتقل کرد.
به طور پیشفرض به پین های مشخص اختصاص ندارند و از طریق GPIO Matrix هدایت می شوند UART1, I2C, I2S, TWAI این توابع انعطاف پذیر هستند و می توان آنها را با نرم افزار به پین های مختلف اختصاص داد.

کدام GPIOها امن هستند؟

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

  • علامت «بله» — اولویت بالا؛ استفاده عادی و ایمن
  • علامت «احتیاط» — در هنگام بوت رفتار غیرقابل پیش بینی ممکن است رخ دهد؛ با احتیاط استفاده کنید
GPIO آیا امن است؟ نوع یادداشت ها
GPIO 0 بله
GPIO 1 بله
GPIO 2 احتیاط Strapping pin باید هنگام بوت در سطح HIGH نگه داشته شود (اگر در ریست LOW باشد، بوت معمولی فلش ممکن است شکست بخورد)
GPIO 3 بله
GPIO 4 احتیاط JTAG در بوت استفاده می شود؛ JTAG TMS برای دیباگ؛ در نسخه های دارای فلش داخلی به عنوان یکی از خطوط Quad-SPI فلش عمل می کند
GPIO 5 احتیاط JTAG در بوت استفاده می شود؛ JTAG TDI برای دیباگ؛ در نسخه های دارای فلش داخلی به عنوان خط write-protect در Quad-SPI فلش عمل می کند
GPIO 6 احتیاط JTAG در بوت استفاده می شود؛ JTAG TCK برای دیباگ؛ در نسخه های دارای فلش داخلی کلاک فلش را فراهم می کند
GPIO 7 احتیاط JTAG در بوت استفاده می شود؛ JTAG TDO برای دیباگ؛ در نسخه های دارای فلش داخلی به عنوان یکی از خطوط داده Quad-SPI فلش عمل می کند
GPIO 8 احتیاط Strapping pin باید هنگام ریست در سطح HIGH نگه داشته شود (اگر LOW باشد، فلش یا بوت از طریق UART ممکن است کار نکند)
GPIO 9 احتیاط Strapping pin در ریست حالت بوت را کنترل می کند (HIGH برای بوت معمولی فلش، LOW ورود به مد serial download)
GPIO 10 بله
GPIO 20 احتیاط UART-RX به عنوان UART0 receive (کنسول/بوتلودر) استفاده می شود؛ بازتخصیص ممکن است برنامه ریزی سریال و لاگ دیباگ را غیر فعال کند
GPIO 21 احتیاط UART-TX به عنوان UART0 transmit (کنسول/بوتلودر) استفاده می شود؛ بازتخصیص ممکن است خروجی کنسول سریال و چاپ ها را غیر فعال کند

تصویر زیر نشان می دهد کدام GPIOها برای استفاده امن تر هستند.

نقشه تصویری نشان دهنده GPIOهای امن برای استفاده

پین های وقفه (Interrupt)

تمام 13 پین GPIO قابل دسترس روی Super Mini از نظر نرم افزاری از قابلیت ایجاد وقفه پشتیبانی می کنند.

نمونه ای از پین های وقفه و توضیح محرک ها

برد چهار حالت محرک مختلف برای وقفه پشتیبانی می کند که تعیین می کنند وقفه دقیقاً در چه زمانی رخ دهد:

حالت شرط تحریک موارد رایج استفاده
RISING گذر از سطح LOW به HIGH شناسایی فشار دکمه (pull-down)
FALLING گذر از سطح HIGH به LOW شناسایی فشار دکمه (pull-up)
CHANGE تغییر وضعیت پین (هر دو جهت) خواندن انکودر، شمارش پالس
LOW پین در سطح LOW باقی می ماند رویدادهای مبتنی بر سطح

پین های RTC GPIO

برخی GPIOها به واحد RTC (سیستم کم مصرف ساعت واقعی) متصل هستند و به آنها RTC GPIO گفته می شود. در Super Mini این پین ها عبارتند از: GPIO 0، GPIO 1، GPIO 2، GPIO 3، GPIO 4 و GPIO 5.

نشانه گذاری پین های متصل به مدار RTC

این پین ها در حالت deep sleep اهمیت دارند؛ آنها می توانند تراشه را با وقوع یک رویداد خارجی بیدار کنند مثل فشار دکمه، تشخیص حرکت توسط سنسور PIR یا سیگنال هشدار از شتاب سنج. سایر GPIOها فقط قادر به بیدار کردن برد از light sleep هستند.

پین های Strapping

سه پین استرپ روی برد وجود دارند: GPIO 2، GPIO 8 و GPIO 9.

پین های استرپ روی برد ESP32-C3 Super Mini

این پین ها تعیین می کنند ESP32 در زمان روشن شدن یا ریست چگونه بوت شود. وضعیت الکتریکی این پین ها در زمان بوت مشخص می کند که برد وارد حالت اجرای معمولی برنامه (BOOT mode) شود یا در حالت دریافت برنامه از کامپیوتر قرار بگیرد (FLASH/serial download mode).

در اغلب مواقع نیازی به دخالت شما نیست چون برد به طور پیشفرض این پین ها را برای استفاده معمولی تنظیم کرده است. با این حال باید مراقب باشید: اگر هنگام راه اندازی قطعه خارجی به این پین ها متصل باشد، ممکن است حالت بوت را تغییر دهد. اگر ESP32 شما ناگهان از آپلود کد امتناع کرد، اول بررسی کنید که چیز خاصی به GPIO 2، 8 یا 9 متصل نباشد.

پین های ADC

ESP32-C3 دو مبدل SAR با کارایی بالا دارد: ADC1 و ADC2. این مبدل ها ولتاژهای آنالوگ را از حسگرهایی مثل پتانسیومتر، سنسور نور یا سنسور دما می خوانند. روی Super Mini شش پین با قابلیت ورودی آنالوگ در دسترس است.

پین های آنالوگ و تخصیص کانالهای ADC

GPIO 0 تا GPIO 4 متعلق به ADC1 هستند و کانال های آنها Channel 0 تا Channel 4 نامیده می شوند. GPIO 5 متعلق به ADC2 و کانال آن Channel 0 است.

پین فیزیکی GPIO واحد ADC اختصاصی تعیین کانال آنالوگ
GPIO 0 ADC1 Channel 0
GPIO 1 ADC1 Channel 1
GPIO 2 ADC1 Channel 2
GPIO 3 ADC1 Channel 3
GPIO 4 ADC1 Channel 4
GPIO 5 ADC2 Channel 0

این ADCها رزولوشن 12 بیت دارند؛ یعنی بازه 0V تا 3.3V را به 4,096 گام مجزا تقسیم می کنند (از 0 تا 4095). بنابراین گام ولتاژ معادل تقریباً 3.3V / 4096 ≈ 0.0008V است، که برابر با حدود 0.8 millivolt می شود.

نکته:

طبق دیتاشیت رسمی، پنج کانال ADC1 به صورت کارخانه ای کالیبره شده اند، در حالی که کانال منفرد ADC2 کالیبره نیست.

همچنین ADC2 زمانی که Wi‑Fi فعال است قابل استفاده نیست. پس اگر پروژه شما همزمان به Wi‑Fi و ورودی آنالوگ نیاز دارد، بهتر است از پین های ADC1 استفاده کنید.

پین های PWM

همه پین های GPIO قابل دسترس روی Super Mini (GPIO 0 تا 10 و همچنین 20 و 21) قادر به تولید سیگنال PWM با رزولوشن بالا هستند.

نمایی از قابلیت PWM و کنترلر LEDC داخلی

این عملکرد توسط کنترلر داخلی به نام LEDC (LED PWM Controller) انجام می شود. LEDC دارای 6 کانال مستقل است که هر کانال می تواند فرکانس و دور کاری (duty cycle) متفاوتی تولید کند. این سخت افزار تنها محدود به LED نیست و برای کنترل موتور، بازر و سایر تجهیزات مبتنی بر PWM نیز کاربرد دارد.

پین های I2C

ESP32-C3 یک کنترلر سخت افزاری I2C دارد که قادر است در حالت استاندارد (100 kbit/s)، حالت سریع (400 kbit/s) و سرعت های بالاتر بسته به خازن باس کار کند.

برخلاف بعضی توابع دیگر، کنترلر I2C به پین های معین وابسته نیست و می توان آن را از طریق GPIO Matrix به هر پینی نگاشت کرد.

هشدار مهم:

در اینترنت منابعی مشاهده می شوند که ادعا می کنند SDA برابر GPIO 8 و SCL برابر GPIO 9 است. این ادعا گمراه کننده است.

طبق دیتاشیت رسمی Espressif، I2C در سطح چیپ به پین های مشخص IO MUX متصل نیست. دلیل اینکه GPIO 8 و 9 در برخی مثال های آردوینو ظاهر می شوند این است که آن مثال ها یا کتابخانه ها از این پین ها استفاده می کنند؛ این به معنی پیشفرض سخت افزاری یا امن بودن آنها نیست.

در واقع GPIO 8 و GPIO 9 انتخاب های پرخطری برای I2C هستند چون هر دو پین استرپ هستند و در زمان بوت بر حالت راه اندازی تاثیر می گذارند.

ارتباط I2C به حضور مقاومت های پول-آپ وابسته است تا خطوط در حالت idle در سطح HIGH نگه داشته شوند. برخی دستگاه های I2C هنگام راه اندازی یا ریست ممکن است برای مدت کوتاهی یکی از خطوط را LOW بکشند. اگر این اتفاق همزمان با بوت برد رخ دهد، وضعیت پین ها ممکن است اشتباه خوانده شود.

برای مثال اگر دستگاه I2C متصل در زمان بوت GPIO 9 را به LOW بکشد، ممکن است ESP32-C3 فکر کند باید وارد مد firmware download شود و به جای اجرای برنامه، وارد آن حالت شود؛ در نتیجه تا زمانی که حسگر را جدا نکنید و برد را مجدداً راه اندازی نکنید، برد به صورت عادی بوت نخواهد شد. به طور مشابه کشیدن GPIO 8 به LOW در زمان راه اندازی می تواند لاگ های دیباگ حیاتی را مسدود کند.

برای جلوگیری از چنین مشکلاتی بهتر است I2C را از پین های 8 و 9 جدا کنید. در آردوینو IDE می توانید با استفاده از تابع Wire.begin() I2C را به پین های امن تری مانند GPIO 0، 1، 3 یا 10 نگاشت کنید.

Wire.begin(SDA_pin, SCL_pin);

هشدار درباره استفاده از GPIO8 و GPIO9 برای I2C

پین های SPI

چیپ ESP32-C3 سه کنترلر SPI دارد: SPI0، SPI1 و SPI2. با این حال SPI0 و SPI1 برای ارتباط با حافظه فلش داخلی 4 MB استفاده می شوند؛ بنابراین تنها رابط SPI قابل استفاده برای کاربر SPI2 است.

به طور پیشفرض SPI2 از طریق IO MUX به پین های زیر نگاشت شده است:

سیگنال SPI نگاشت پیشفرض SPI2
SCK / CLK GPIO6
MOSI GPIO7
MISO GPIO2
CS (Chip Select) GPIO10

نقشه پیشفرض پین های SPI2 روی برد

پین های UART

برد دو رابط سخت افزاری UART دارد:

  1. یک اتصال سریال از طریق پورت USB-C موجود است.
  2. رابط سخت افزاری دیگر از طریق پین های فیزیکی در دسترس است: TX روی GPIO 21 و RX روی GPIO 20.

پورت USB-C و پین های UART فیزیکی روی برد

با این تنظیم دوگانه، باید در آردوینو IDE مشخص کنید که داده سریال به کدام مسیر فرستاده شود؛ این تنظیم تحت عنوان «USB CDC On Boot» وجود دارد.

اگر می خواهید با اتصال USB-C به کامپیوتر پیام های Serial.print() را در سریال مانیتور ببینید، باید «USB CDC On Boot» را فعال کنید. اگر آن را غیرفعال بگذارید، همه داده های سریال به پین های فیزیکی فرستاده می شوند و مانیتور کامپیوتر هیچ پیامی نشان نمی دهد. بالعکس، اگر می خواهید از یک مبدل USB‑to‑Serial خارجی به پین های فیزیکی استفاده کنید باید این تنظیم را غیرفعال کنید.

قاعده کلی ساده است: برای استفاده از سریال روی USB‑C، USB CDC On Boot را فعال کنید؛ برای استفاده از TX/RX فیزیکی، آن را غیر فعال کنید.

تصویر توضیح مسیر سریال بین USB-C و پین های سخت افزاری

در صورتی که پروژه شما نیاز به پورت سریال بیشتری داشته باشد، می توانید با کتابخانه هایی مثل SoftwareSerial پورت های مجازی روی دیگر پین های آزاد بسازید.

پین های تغذیه

ESP32-C3 Super Mini چندین پین تغذیه دارد که هم برای تامین برق برد و هم برای تغذیه حسگرها و ماژول های خارجی کاربرد دارند.

ورودی های تغذیه: USB-C، 5V و خروجی/ورودی 3V3

درگاه Type-C USB راه اصلی تامین برق برد است. وقتی برد را به کامپیوتر یا آداپتور USB متصل می کنید، پورت USB ولتاژ 5V را به یک رگولاتور LDO روی برد می فرستد. این رگولاتور 5V را به 3.3V پایدار تبدیل می کند که برای ESP32‑C3 و سایر قطعات لازم است.

پین 5V امکان تغذیه برد از منبع خارجی مثل پک باتری یا آداپتور دیواری را بدون استفاده از USB فراهم می کند. دامنه ورودی این پین معمولاً بین 4.3V تا 6.0V است. مانند حالت USB، رگولاتور داخلی این ولتاژ را به 3.3V تبدیل می کند.

هشدار مهم:

به دلیل طراحی بسیار جمع و جور و کم هزینه، این برد فاقد مدارهای ایمنی داخلی مثل سوئیچ بار خودکار یا پیکربندی OR-ing با دیودهای شاتکی دوگانه است. هرگز همزمان به پین 5V و پورت USB برق ندهید. تغذیه همزمان از دو منبع می تواند باعث آسیب دائمی به پورت USB کامپیوتر، باتری خارجی یا خود برد شود.

پین 3V3 بسته به نحوه استفاده دو نقش دارد. معمولاً وقتی برد از طریق USB یا پین 5V تغذیه می شود، پین 3V3 به عنوان خروجی عمل کرده و 3.3V پایدار در اختیار سنسورها و ماژول های کوچک قرار می دهد. اما اگر منبع خارجی 3.3V بسیار پایداری داشته باشید می توانید پین 3V3 را به عنوان ورودی استفاده کنید؛ در این حالت رگولاتور برد دور زده شده و تغذیه مستقیم به مدارهای منطقی میکروکنترلر داده می شود.

پین های با عملکرد ویژه

ال ای دی وضعیت، دکمه BOOT و RESET روی برد

ال ای دی وضعیت روی برد (GPIO 8) یک LED کوچک آبی رنگ به صورت سخت افزاری به GPIO 8 متصل شده است و برای دیباگ بصری بسیار مفید است. توجه کنید که منطق LED معکوس است: قرار دادن پین در سطح LOW باعث روشن شدن LED و قرار دادن در سطح HIGH آن را خاموش می کند.

در کنار پورت USB دو دکمه فشاری کوچک وجود دارد که برای ریست برد و ورود دستی به بوتلودر کاربرد دارند:

دکمه BOOT (GPIO 9) به صورت فیزیکی به GPIO 9 متصل است. نگه داشتن این دکمه پین را به LOW فیزیکی می کشد و منطق استرپ را مجبور به ورود به مد بوتلودر می کند.

دکمه RESET (CHIP_PU) به خط enable چیپ (CHIP_PU) متصل است. فشردن کوتاه این دکمه تغذیه منطق دیجیتال اصلی را قطع می کند و میکروکنترلر را فوراً ریست می کند.

برای قرار دادن دستی برد در Bootloader Mode از این دو دکمه می توانید به صورت زیر عمل کنید:

  1. ابتدا دکمه BOOT را فشار داده و نگه دارید.
  2. سپس دکمه RESET را کوتاه فشار داده و رها کنید.
  3. در نهایت دکمه BOOT را رها کنید.

معمولاً این کار فقط دفعه اول اتصال برد به کامپیوتر لازم است، اما بعضی کاربران ممکن است برای هر بار آپلود نیاز به تکرار این فرایند داشته باشند.

سوالات متداول

کدام پین ها به عنوان پین های استرپ شناخته می شوند و چرا باید مراقب آنها باشم؟

پین های استرپ روی Super Mini عبارتند از GPIO 2، GPIO 8 و GPIO 9. وضعیت این پین ها هنگام روشن شدن یا ریست تعیین می کند برد در چه حالتی بوت شود (بوت عادی یا مد دریافت فریمور). اتصال قطعه خارجی یا تغییر سطح این پین ها در زمان بوت می تواند مانع بوت شدن عادی یا جلوگیری از آپلود برنامه شود، بنابراین هنگام اتصال سخت افزار به این پین ها احتیاط کنید.

آیا می توانم کانال ADC2 را همزمان با Wi‑Fi استفاده کنم؟

خیر. ADC2 توسط دیتاشیت به عنوان واحدی ذکر شده که هنگام فعال بودن Wi‑Fi قابل استفاده نیست. علاوه بر این، کانال های ADC1 به صورت کارخانه ای کالیبره شده اند، در حالی که کانال ADC2 کالیبره نشده است؛ بنابراین برای ورودی های آنالوگ همزمان با Wi‑Fi بهتر است از کانال های ADC1 استفاده کنید.

چطور مشخص کنم سریال از USB خوانده شود یا از پین های فیزیکی؟

برد دارای دو مسیر سریال است: یکی از طریق USB‑C و دیگری از طریق پین های فیزیکی TX (GPIO 21) و RX (GPIO 20). در آردوینو IDE باید تنظیم «USB CDC On Boot» را مدیریت کنید. فعال بودن این گزینه باعث می شود پیام های Serial.print() از طریق USB‑C ارسال شوند؛ غیرفعال بودن آن، سریال را به پین های فیزیکی هدایت می کند.

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *