
ESP32 در ابعاد مینیاتوری! شروع کار با ESP32-C3 Super Mini
راهنمای جامع شروع کار با برد ESP32-C3 Super Mini: از معرفی تا پیادهسازی پروژههای عملی
برد توسعهی ESP32-C3 Super Mini یک برد فشرده مبتنی بر تراشهی Espressif ESP32-C3 از خانوادهی ESP32 است. مزایای اصلی آن نسبت به سایر بردهای ESP32، اندازه کوچک و مصرف برق پایین در حالت خواب عمیق (Deep Sleep) است. در این راهنما، ESP32-C3 Super Mini را معرفی کرده، ویژگیها و پیناوت آن را بررسی میکنیم، نحوه برنامهنویسی آن با Arduino IDE را نشان داده و چند مثال برای تست برد اجرا میکنیم.
فهرست مطالب
در این راهنما موضوعات زیر را پوشش میدهیم:
- معرفی ESP32-C3 Super Mini
- مشخصات فنی ESP32-C3 Super Mini
- پروتکل های ارتباطی ESP32-C3 Super Mini
- پیناوت ESP32-C3 Super Mini
- برنامهنویسی ESP32-C3 Super Mini با Arduino IDE
- تست وایفای روی ESP32-C3 Super Mini (وب سرور)
- حالتهای خواب با ESP32-C3 Super Mini
- خواب عمیق ESP32-C3 Super Mini با بیدارشدن تایمری
- مصرف برق در حالت خواب عمیق
معرفی ESP32-C3 Super Mini
ESP32-C3 Super Mini یک برد توسعه فشرده با تراشه ESP32-C3 مجهز به وایفای و بلوتوث داخلی است. برخلاف سایر مدلهای برد ESP32، این تراشه تکهستهای است. اندازه بسیار کوچکی دارد و برای مصرف برق پایین بهینهسازی شده است که طبق دیتاشیت فقط ≈۴۳ میکروآمپر در حالت خواب عمیق مصرف میکند. برد دارای ۱۶ پین با ۱۱ GPIO قابل برنامهریزی است که از ADC، PWM، UART، I2C و SPI پشتیبانی میکنند.
این برد شامل دو دکمه RST (ریست) و BOOT است. دکمه BOOT برای قرار دادن برد در حالت بوتلودر جهت آپلود کد استفاده میشود، درحالی که دکمه RST برد را ریست میکند – که برای راهاندازی مجدد و اجرای کد آپلودشده جدید مفید است.
برد همچنین دارای اینترفیس USB-C است که میتواند برای تغذیه برد، آپلود کد یا ارتباط سریال استفاده شود. همچنین میتوانید برد را با استفاده از منبع خارجی 5V از طریق پینهای 5V و GND تغذیه کنید – اما توجه داشته باشید که نباید همزمان از پورت USB-C و منبع تغذیه خارجی استفاده کنید.
مانند بسیاری از مدلهای دیگر برد ESP32، این برد مجهز به LED داخلی است. اما در این مورد، به GPIO 8 متصل شده است (به جای GPIO 2 در اکثر بردها).
مشخصات فنی ESP32-C3 Super Mini
خلاصهای از مشخصات فنی ESP32-C3:
- پردازنده: CPU 32-bit RISC-V با سرعت تا 160 MHz
- پروتکلهای وایفای IEEE 802.11b/g/n و بلوتوث 5 (LE)
- 400KB SRAM، 384KB ROM و فلش داخلی 4M
- آنتن فشرده SMD
- 11 GPIO که از رابطهای زیر پشتیبانی میکنند:
- 4 پین ADC
- PWM
- UART
- I2C
- SPI
- LED داخلی روی GPIO 8
- دکمههای ریست و بوت
- مصرف برق فوقالعاده پایین: تا 43μA در حالت خواب عمیق
- فرم فاکتور کوچک
همچنین میتوانید به جدول زیر مراجعه کنید:
پارامتر | مقدار |
---|---|
میکروکنترلر (پردازنده) | Espressif ESP32-C3 (32-bit RISC-V تکهسته، تا 160 MHz) |
حافظه فلش | 4 مگابایت (فلش SPI روی برد) |
SRAM | 400 کیلوبایت |
ROM | 384 کیلوبایت |
وایفای | 802.11 b/g/n، 2.4 گیگاهرتز، تا 150 مگابیت بر ثانیه |
بلوتوث | بلوتوث 5.0 LE |
پینهای GPIO | 11 GPIO قابل دسترسی |
ورودیهای آنالوگ (ADC) | 2 × مبدلهای ۱۲-بیتی SAR، تا ۶ کانال |
کانالهای PWM | 6 کانال |
SPI | 3 × رابط SPI (SPI0، SPI1 رزرو شده) |
I2C | 1 × رابط I2C |
UART | 2 × رابط UART |
I2S | 1 × رابط I2S |
اینترفیس USB | USB-C، پشتیبانی از USB CDC |
منبع تغذیه | 5V از طریق USB-C یا 3.3V–6V از طریق پین VIN (5V)؛ رگولاتور 3.3V روی برد (تا 500 میلیآمپر) |
ولتاژ کاری | 3.3V (سطح منطقی برای GPIOها) |
حالت خواب عمیق | 43μA |
دکمهها | 1 × دکمه ریست، 1 × دکمه بوت (روی GPIO9) |
LED | 1 × LED روی برد (روی GPIO8، فعال با LOW) |
برنامهنویسی | Arduino IDE، ESP-IDF، MicroPython، PlatformIO/pioarduino |
خرید ESP32-C3 Super Mini
پروتکل های ESP32-C3 Super Mini
برد ESP32-C3 Super Mini دارای 16 پین است که 11 تای آنها GPIOهای قابل برنامهریزی هستند و میتوانید از آنها برای کنترل تجهیزات جانبی و خواندن سنسورها استفاده کنید. از پروتکل های زیر پشتیبانی میکند:
- I/O دیجیتال
- PWM
- ADC
- UART
- I2C
- SPI
پیناوت ESP32-C3 Super Mini
تصویر زیر پیناوت برد ESP32-C3 Super Mini را نشان میدهد. لطفاً توجه داشته باشید که پیناوت بسته به سازنده ممکن است کمی متفاوت باشد. بنابراین، پیناوت را با نقشه پین روی چاپ سیلک اسکرین برد خود دوباره بررسی کنید.
جدول زیر عملکرد پینها را توصیف میکند:
پین | عملکرد |
---|---|
3V3 | خروجی/ورودی 3.3V (3.3V را از رگولاتور روی برد خروجی میدهد، یا ورودی برای منبع تغذیه خارجی 3.3V است) |
5V | ورودی/خروجی 5V (به USB-C 5V یا منبع تغذیه خارجی 5V متصل میشود) |
GND | پین زمین |
GPIO 0 | I/O عمومی، ADC1، PWM |
GPIO 1 | I/O عمومی، ADC1، PWM |
GPIO 2 | I/O عمومی، ADC1، پین تنظیمکننده (حالت بوت) (برای استفاده عمومی توصیه نمیشود) |
GPIO 3 | I/O عمومی، PWM |
GPIO 4 | I/O عمومی، PWM، پین پیشفرض SPI SCK |
GPIO 5 | I/O عمومی، PWM، پین پیشفرض MISO SPI |
GPIO 6 | I/O عمومی، PWM، پین پیشفرض SPI MOSI |
GPIO 7 | I/O عمومی، PWM، پین پیشفرض SPI SS |
GPIO 8 | به LED روی برد متصل است (فعال با LOW)؛ پین تنظیمکننده (برای استفاده عمومی توصیه نمیشود)؛ پین پیشفرض SDA I2C |
GPIO 9 | به دکمه BOOT متصل است (LOW برای ورود به بوتلودر)، پین تنظیمکننده (برای استفاده عمومی توصیه نمیشود)؛ پین پیشفرض SCL I2C |
GPIO 10 | I/O عمومی، PWM |
GPIO 20 | I/O عمومی، PWM، پین پیشفرض RX UART |
GPIO 21 | I/O عمومی، PWM، پین پیشفرض TX UART |
پینهای تنظیمکننده (Strapping Pins)
- GPIO 2: تنظیمکننده برای ورود به حالت بوتلودر – برای استفاده عمومی توصیه نمیشود.
- GPIO 8: به LED آبی روی برد متصل است (منطق معکوس/فعال با LOW)؛ همچنین یک پین تنظیمکننده است.
- GPIO 9: به دکمه BOOT متصل است – برای استفاده عمومی توصیه نمیشود.
هنوز هم میتوانید از پینهای تنظیمکننده در پروژههای خود استفاده کنید، اما باید تغییرات وضعیت این GPIOها را هنگام ریست شدن ESP32 یا ورود به حالت بوتلودر در نظر بگیرید.
پینهای تغذیه
در مورد پینهای تغذیه، شما یک پین 5V، یک پین 3V3 و یک پین GND دارید.
پین 3V3، 3.3V را از رگولاتور روی برد تأمین میکند یا 3.3V را از منبع تغذیه خارجی میپذیرد. بهطور مشابه، پین 5V میتواند برای ورودی جهت تغذیه برد استفاده شود، یا 5V را از منبع تغذیه USB خروجی میدهد.
PWM
تمامی GPIOهای عمومی میتوانند سیگنال PWM خروجی دهند.
پینهای آنالوگ (ADC)
GPIOهای 0، 1، 2، 3، 4 و 5 از خوانش آنالوگ پشتیبانی میکنند:
- GPIO 0: ADC1_CH0
- GPIO 1: ADC1_CH1
- GPIO 2: ADC1_CH2
- GPIO 3: ADC1_CH3
- GPIO 4: ADC1_CH4
- GPIO 5: ADC1_CH5
UART، I2C و PWM
با توجه به ویژگی مالتیپلکسینگ ESP32، رابطهای UART، SPI و I2C را میتوان به تقریباً هر GPIO اختصاص داد.
با این حال، هنگام استفاده از Arduino IDE و با فرض انتخاب برد ESP32-C3 در منوی Boards، پینهای پیشفرض زیر در نظر گرفته میشوند:
- UART: پیشفرض روی GPIO 20 (RX) و GPIO21 (TX)
- SPI: پیشفرض روی GPIO6 (MISO)، GPIO7 (MOSI)، GPIO10 (SCK) و GPIO 5 (SS)
- I2C: پیشفرض روی GPIO 8 (SDA) و GPIO 9 (SCL)
دیتاشیت برد
برای اطلاعات بیشتر در مورد برد، میتوانید دیتاشیت آن را در لینک زیر بررسی کنید:
دیتاشیت ESP32-C3 Super Mini
برنامهنویسی ESP32-C3 Super Mini با Arduino IDE
میتوانید ESP32-C3 Super Mini را مانند هر ماژول ESP32 دیگری با استفاده از Arduino IDE برنامهریزی کنید. برای این کار مراحل زیر را دنبال کنید.
1) نصب Arduino IDE
ابتدا Arduino IDE و بوردهای ESP32 را نصب کنید.
به وبسایت Arduino بروید و نسخه مناسب سیستم عامل خود را دانلود کنید.
- ویندوز: فایل دانلود شده را اجرا کنید و دستورالعملهای راهنمای نصب را دنبال کنید
- مک OS X: فایل دانلود شده را در پوشه برنامههای خود کپی کنید.
- لینوکس: فایل دانلود شده را استخراج کنید و فایل arduino-ide را که IDE را راهاندازی میکند، باز کنید.
2) نصب بوردهای ESP32 در Arduino IDE
برای نصب بوردهای ESP32 در Arduino IDE، این دستورالعملها را دنبال کنید.
- مدیر بوردها را باز کنید. میتوانید به مسیر Tools > Board > Boards Manager… بروید یا به سادگی روی نماد Boards Manager در گوشه سمت چپ کلیک کنید.
- برای ESP32 جستجو کنید و دکمه نصب را برای نسخه 3.X از esp32 توسط Espressif Systems فشار دهید.
- همین! باید پس از چند ثانیه نصب شود.
3) قرار دادن ESP32-C3 Super Mini در حالت بوتلودر
ESP32-C3 Super Mini را در حالت بوتلودر (آماده برای آپلود کد از طریق USB) به کامپیوتر خود وصل کنید. ممکن است لازم باشد این کار را اولین باری که برد خود را به کامپیوتر وصل میکنید انجام دهید.
مراحل:
- دکمه BOOT را نگه دارید.
- دکمه RESET را فشار داده و رها کنید (در حالی که هنوز BOOT را نگه داشتهاید).
- سپس دکمه BOOT را رها کنید.
4) آپلود کد به ESP32-C3 Super Mini
کد زیر را در Arduino IDE خود کپی کنید. این کد به سادگی LED روی برد (متصل به GPIO 8) را چشمک میزند و وضعیت فعلی GPIO را در Serial Monitor چاپ میکند.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
جزئیات کامل پروژه در https://RandomNerdTutorials.com/getting-started-esp32-c3-super-mini/
*********/
// LED روی برد ESP32 C3 Super Mini (با منطق معکوس کار میکند)
const int ledPin = 8;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
Serial.begin(115200);
digitalWrite(ledPin, HIGH);
Serial.println("LED OFF");
delay(1000);
digitalWrite(ledPin, LOW);
Serial.println("LED ON");
delay(5000);
}
حالا بورد و پورت COM را انتخاب کنید. روی منوی کشویی در بالا کلیک کنید و ESP32C3 Dev Module را انتخاب کنید. سپس پورت COM مربوطه را انتخاب کنید.
سپس گزینه زیر را در منوی Tools > USB CDC on Boot فعال کنید.
در نهایت، دکمه آپلود را برای آپلود کد کلیک کنید.
دکمه RST برد را فشار دهید تا کد آپلود شده جدید را اجرا کند.
LED روی برد هر ثانیه چشمک میزند.
در همان زمان، میتوانید Serial Monitor را با نرخ باود 115200 باز کنید. وضعیت فعلی LED را در پنجره چاپ میکند.
تست وایفای روی ESP32-C3 Super Mini (وب سرور)
برای تست وایفای ESP32-C3 Super Mini، یک وب سرور آماده کردهایم که LED روی برد را کنترل میکند.
1) کد زیر را در Arduino IDE خود کپی کنید.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
جزئیات کامل پروژه در https://RandomNerdTutorials.com/getting-started-esp32-c3-super-mini/
اجازه کپیبرد رایگان برای هر شخصی جهت تهیه یک کپی از این نرمافزار و اسناد مرتبط داده میشود.
اطلاعیه کپیرایت بالا و این اجازهنامه باید در تمام کپیها یا بخشهای قابل توجه نرمافزار گنجانده شود.
*********/
#include <WiFi.h>
#include <WebServer.h>
// با اعتبار شبکه خود جایگزین کنید
const char* ssid = "SSID_خود_را_اینجا_قرار_دهید";
const char* password = "رمز_عبور_خود_را_اینجا_قرار_دهید";
// اختصاص متغیر خروجی به پین GPIO
const int output = 8;
String outputState = "OFF";
// ایجاد یک شیء وب سرور
WebServer server(80);
// تابع برای روشن کردن GPIO
void handleGPIOOn() {
outputState = "ON";
digitalWrite(output, LOW);
handleRoot();
}
// تابع برای خاموش کردن GPIO
void handleGPIOOff() {
outputState = "OFF";
digitalWrite(output, HIGH);
handleRoot();
}
// تابع برای مدیریت URL ریشه و نمایش وضعیت فعلی
void handleRoot() {
String html = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
html += "<link rel=\"icon\" href=\"data:,\">";
html += "<style>";
html += "html { font-family: Helvetica; text-align: center; background: #f5f7fa; margin: 0; padding: 20px; }";
html += "body { max-width: 600px; margin: 0 auto; background: white; padding: 20px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }";
html += "h1 { color: #333; font-size: 28px; margin-bottom: 20px; }";
html += "p { color: #555; font-size: 18px; margin: 10px 0; }";
html += ".button { background: #4CAF50; border: none; color: white; padding: 12px 24px; text-decoration: none; font-size: 20px; border-radius: 8px; cursor: pointer; transition: background 0.2s ease; display: inline-block; width: 120px; box-sizing: border-box; }";
html += ".button:hover { background: #45a049; }";
html += ".button2 { background: #555555; }";
html += ".button2:hover { background: #666666; }";
html += "</style></head>";
html += "<body><h1>وب سرور ESP32</h1>";
// نمایش کنترلهای GPIO
html += "<p>GPIO - وضعیت " + outputState + "</p>";
if (outputState == "ON") {
html += "<p><a href=\"/off\"><button class=\"button button2\">خاموش</button></a></p>";
} else {
html += "<p><a href=\"/on\"><button class=\"button\">روشن</button></a></p>";
}
html += "</body></html>";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
// مقداردهی اولیه متغیر خروجی به عنوان خروجی
pinMode(output, OUTPUT);
// تنظیم LED روی برد به LOW (منطق معکوس)
digitalWrite(output, HIGH);
// اتصال به شبکه Wi-Fi
Serial.print("در حال اتصال به ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("وایفای متصل شد");
Serial.println("آدرس IP: ");
Serial.println(WiFi.localIP());
// تنظیم وب سرور برای مدیریت مسیرهای مختلف
server.on("/", handleRoot);
server.on("/on", handleGPIOOn);
server.on("/off", handleGPIOOff);
// راهاندازی وب سرور
server.begin();
Serial.println("سرور HTTP شروع به کار کرد");
}
void loop() {
// مدیریت درخواستهای کلاینت ورودی
server.handleClient();
}
2) نام و رمز شبکه وایفای خود را در خطوط زیر وارد کنید.
const char* ssid = "SSID_خود_را_اینجا_قرار_دهید";
const char* password = "رمز_عبور_خود_را_اینجا_قرار_دهید";
3) کد را به برد خود آپلود کنید.
4) Serial Monitor را با نرخ باود 115200 باز کنید.
5) دکمه RST برد را فشار دهید.
6) آدرس IP آن در Serial Monitor چاپ میشود.
7) در شبکه محلی خود یک مرورگر وب باز کنید و آدرس IP را وارد کنید. باید به وب سرور دسترسی پیدا کنید. برای کنترل LED روی برد روی دکمه کلیک کنید.
حالتهای خواب با ESP32-C3 Super Mini
یکی از بزرگترین مزیتهای ESP32-C3 Super Mini، علاوه بر اندازه کوچک آن، مصرف کمتر آن در حالت خواب است.
خواب عمیق ESP32-C3 Super Mini با بیدارشدن تایمری
مثال زیر یک کد ساده است که ESP32 را برای یک دقیقه در حالت خواب عمیق قرار میدهد. پس از هر دقیقه، بیدار میشود و LED متصل به GPIO 4 را چشمک میزند.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
جزئیات کامل پروژه در https://RandomNerdTutorials.com/getting-started-esp32-c3-super-mini/
*********/
#define uS_TO_S_FACTOR 1000000ULL // فاکتور تبدیل میکروثانیه به ثانیه
#define TIME_TO_SLEEP 60 // مدت زمان خواب عمیق بر حسب ثانیه
#define LED_PIN 4 // LED متصل به GPIO4
void setup() {
delay(100);
pinMode(LED_PIN, OUTPUT);
// چشمک زدن LED
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
// تنظیم تایمر خواب عمیق
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
// ورود به خواب عمیق
esp_deep_sleep_start();
}
void loop() {}
برای قرار دادن ESP32 در حالت خواب عمیق و بیدار کردن آن با تایمر، تابع esp_sleep_enable_timer_wakeup()
را فراخوانی کنید و تعداد میکروثانیههای خواب را به عنوان آرگومان قرار دهید.
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
پس از تنظیم منبع بیدار شدن، میتوانید ESP32 را با استفاده از esp_deep_sleep_start()
در حالت خواب عمیق قرار دهید.
esp_deep_sleep_start();
برای تست این کد، مطمئن شوید که یک LED به GPIO 4 متصل کردهاید.
توجه: من نتوانستم از Serial Monitor با ESP32-C3 Super Mini در حالت خواب عمیق استفاده کنم زیرا پس از بیدار شدن بهطور خودکار به Serial Monitor متصل نمیشد.
مهم: پس از آپلود کد خواب عمیق به برد، برای برنامهریزی مجدد آن، باید مراحل زیر را برای قرار دادن آن در حالت بوتلودر انجام دهید:
- دکمه BOOT را نگه دارید.
- دکمه RESET را فشار داده و رها کنید (در حالی که هنوز BOOT را نگه داشتهاید).
- سپس دکمه BOOT را رها کنید.
میزان مصرف انرژی در حالت خواب
با استفاده از مثال قبلی روی ESP32-C3 Super Mini، مصرف برق خواب عمیق را حدود 600 میکروآمپر اندازهگیری کردم. این مقدار بیشتر از 40 میکروآمپر مشخص شده در دیتاشیت است. این احتمالاً به دلیل پیکربندیهای بهینهسازی نشده، مانند GPIOهای شناور است؛ یا باید از ESP-IDF برای استفاده از توابع کارآمدتر استفاده کنید.
مصرف برق ESP32-C3 Super Mini در حالت خواب عمیق
مصرف برق برد ESP32 DOIT در حالت خواب عمیق
هنوز هم، در مقایسه با ESP32 معمولی که حدود 10mA در خواب عمیق مصرف میکند، 600 میکروآمپر اندازهگیری شده برای ESP32-C3 بدون هیچ تغییری در کد، باز هم کارآمدتر و یک بهبود بزرگ است.
نتیجهگیری
امیدواریم این راهنمای شروع کار با ESP32-C3 Super Mini برای شما مفید بوده باشد.