دسته‌بندی نشده

ESP32 چیست؟ از اولین کد تا ساخت پروژه Wi-Fi با یکی از محبوب‌ترین بردهای IoT

M98 MAKATRONIC98 • EMBEDDED SYSTEMS
میکروکنترلر و اینترنت اشیا • سطح صفر تا پروژه

ESP32 چیست؟ آموزش کامل ESP32 از اولین اتصال تا ساخت یک پروژه واقعی Wi-Fi

اگر آردوینو را دوست دارید اما Wi-Fi، Bluetooth، سرعت بیشتر و امکانات حرفه‌ای‌تر می‌خواهید، ESP32 یکی از جذاب‌ترین نقطه‌های شروع است. در این آموزش از شناخت خود چیپ، ماژول و برد توسعه شروع می‌کنیم و قدم‌به‌قدم به GPIO، ADC، PWM، پروتکل‌ها، Wi-Fi و یک پروژه عملی می‌رسیم.

Wi-Fi Bluetooth Arduino IDE GPIO IoT
سطحمبتدی تا متوسط
نیاز اولیهESP32 + کابل USB
محیط پیشنهادیArduino IDE
پروژه پایانیکنترل LED با Wi-Fi
01شناخت ESP32
02آماده‌سازی IDE
03کار با پایه‌ها
04ارتباطات و Wi-Fi
05ساخت پروژه

ESP32 چیست؟ خیلی ساده شروع کنیم

ESP32 نام خانواده‌ای از میکروکنترلرها و SoCهای شرکت Espressif است که برای ساخت سیستم‌های متصل، پروژه‌های اینترنت اشیا، کنترلرها و محصولات Embedded طراحی شده‌اند. چیزی که ESP32 را بین سازندگان پروژه محبوب کرده، ترکیب پردازنده نسبتاً قدرتمند، تعداد مناسب پایه‌ها و ارتباط بی‌سیم در یک قطعه کوچک است.

در مدل کلاسیک ESP32، Wi‑Fi 2.4GHz و Bluetooth در خود تراشه قرار دارند و پردازنده می‌تواند تا فرکانس 240MHz کار کند. این یعنی برای یک پروژه Wi-Fi معمولاً نیازی نیست مثل بعضی بردهای قدیمی، یک ماژول شبکه جداگانه کنار میکروکنترلر قرار دهید.

ESP32 فقط یک «برد آردوینویی قوی‌تر» نیست. شما می‌توانید آن را با Arduino Core بسیار ساده برنامه‌نویسی کنید، اما در سطح حرفه‌ای‌تر محیط رسمی Espressif یعنی ESP-IDF امکانات کامل‌تری در اختیارتان می‌گذارد.

ESP32 چیپ است، ماژول است یا برد؟

یکی از اولین سردرگمی‌های افراد تازه‌کار همین است. وقتی فروشنده می‌گوید «ESP32»، ممکن است درباره سه چیز متفاوت صحبت کند:

1

چیپ ESP32

خود تراشه اصلی Espressif است؛ همان قسمتی که پردازنده، Wi-Fi، Bluetooth و بسیاری از Peripheralها در آن قرار دارند.

2

ماژول ESP32

چیپ به همراه Flash، کریستال، بخش RF و معمولاً آنتن روی یک ماژول آماده؛ مانند خانواده ESP32-WROOM.

3

برد توسعه

ماژول ESP32 به همراه USB-to-UART، رگولاتور، کلید Boot/Reset و پین‌هدر؛ بهترین گزینه برای شروع آموزش.

برای شروع چه بخریم؟ اگر تازه‌کار هستید، یک برد توسعه ESP32 DevKit انتخاب کنید؛ کار با آن بسیار راحت‌تر از ماژول خام است.

همه ESP32ها یکسان نیستند

ESP32 امروز فقط یک تراشه نیست و چندین خانواده مختلف دارد. بنابراین وقتی می‌گوییم «ESP32»، قبل از خرید باید دقیقاً مدل چیپ یا برد را ببینیم.

ESP32 کلاسیک Xtensa LX6

Wi-Fi + Bluetooth Classic + BLE؛ انتخاب بسیار رایج برای آموزش و پروژه‌های عمومی.

ESP32-S2 Xtensa LX7

تمرکز بر Wi-Fi و USB؛ Bluetooth داخلی ندارد. برای بعضی پروژه‌های USB جذاب است.

ESP32-S3 Dual-core LX7

Wi-Fi + BLE، USB و امکانات بهتر برای پردازش‌های برداری و پروژه‌های رابط کاربری/AI سبک.

ESP32-C3 RISC-V

کم‌هزینه و کم‌مصرف با Wi-Fi و BLE؛ گزینه جذاب برای محصولات IoT ساده‌تر.

ESP32-C6 RISC-V

Wi-Fi 6 در 2.4GHz، BLE و 802.15.4 برای فناوری‌هایی مانند Thread و Zigbee.

نکته خرید: کدی که برای یک ESP32 کلاسیک نوشته شده لزوماً بدون تغییر روی S2، S3، C3 یا C6 اجرا نمی‌شود. تعداد GPIO، نوع USB، Bluetooth و بعضی Peripheralها بین خانواده‌ها تفاوت دارند.

ESP32 بهتر است یا Arduino Uno؟

پاسخ وابسته به پروژه است. Uno برای شروع مفاهیم پایه بسیار ساده و دوست‌داشتنی است، اما اگر پروژه شما به شبکه، سرعت بیشتر یا امکانات جانبی بیشتری نیاز دارد، ESP32 معمولاً فضای رشد بیشتری می‌دهد.

ویژگیESP32 کلاسیکArduino Uno R3
معماری پردازنده32-bit8-bit AVR
فرکانس CPUتا 240MHz16MHz
Wi-Fi داخلیداردندارد
Bluetooth داخلیداردندارد
منطق GPIO3.3V5V
کاربری پیشنهادیIoT، شبکه، پروژه‌های پیشرفتهآموزش پایه و پروژه‌های ساده
هشدار بسیار مهم برای مهاجرت از Arduino Uno: GPIOهای ESP32 منطق 3.3V دارند. نباید صرفاً چون قبلاً یک سنسور را مستقیم به Uno وصل می‌کردید، خروجی 5V همان سنسور را بدون بررسی به ESP32 متصل کنید.

ESP32 چه امکاناتی در اختیار ما می‌گذارد؟

📶 Wi-Fi

ساخت Web Server، ارسال اطلاعات سنسور، IoT و ارتباط شبکه بدون ماژول Wi-Fi جداگانه.

📱 Bluetooth

در مدل‌های سازگار برای ارتباط با موبایل، تجهیزات BLE و بعضی کاربردهای Bluetooth Classic.

🎛️ GPIO

خواندن کلید و سنسور و کنترل LED، رله، درایور موتور و تجهیزات دیجیتال.

📈 ADC

تبدیل ولتاژ آنالوگ سنسورها به مقدار دیجیتال برای پردازش داخل برنامه.

〰️ PWM

کنترل شدت نور LED، سرعت موتور و تولید سیگنال PWM با Peripheral داخلی LEDC.

🔗 I2C / SPI / UART

اتصال نمایشگر، سنسور، حافظه، ADC خارجی، GPS و ده‌ها ماژول دیگر.

🎵 I2S

ارتباط دیجیتال صوتی با DAC، ADC، میکروفون و تجهیزات پردازش صوت.

🌙 Sleep Modes

Light-sleep و Deep-sleep برای پروژه‌های باتری‌خور و سنسورهای کم‌مصرف.

پایه‌های ESP32؛ قسمتی که باید با دقت یاد بگیرید

روی بسیاری از DevKitهای ESP32 تعداد زیادی پایه دیده می‌شود، اما معنی این موضوع این نیست که همه پایه‌ها در هر شرایطی یکسان و آزاد هستند. بعضی پایه‌ها قابلیت آنالوگ دارند، برخی ورودی‌فقط هستند و بعضی پایه‌ها در فرآیند Boot یا اتصال Flash نقش دارند.

GPIO عادیبرای ورودی و خروجی دیجیتال
ADCبرای اندازه‌گیری سیگنال آنالوگ
Touchدر مدل کلاسیک روی بعضی GPIOها ورودی لمسی خازنی
UART / I2C / SPIبسیاری از سیگنال‌ها با GPIO Matrix قابل مسیردهی هستند
یک دام معروف در ESP32 کلاسیک: طبق مستندات Espressif، ADC2 هنگام استفاده Wi-Fi محدودیت دارد. اگر پروژه شما هم‌زمان Wi-Fi و خواندن آنالوگ نیاز دارد، معمولاً استفاده از پایه‌های ADC1 انتخاب مطمئن‌تری است.

همچنین در ESP32 کلاسیک GPIOهای متصل به Flash و برخی پایه‌های Boot نیاز به توجه ویژه دارند. بهترین کار این است که همیشه Pinout دقیق همان برد توسعه‌ای را که خریده‌اید بررسی کنید.

ESP32 را با چه نرم‌افزاری برنامه‌نویسی کنیم؟

پیشنهاد برای شروع

Arduino IDE + Arduino Core for ESP32

اگر از آردوینو می‌آیید یا اولین تجربه‌تان است، این مسیر سریع، ساده و دارای مثال‌ها و کتابخانه‌های فراوان است.

مسیر حرفه‌ای

ESP-IDF

فریم‌ورک رسمی Espressif با دسترسی عمیق‌تر به FreeRTOS، درایورها، شبکه و امکانات سخت‌افزار.

نصب ESP32 در Arduino IDE

  1. Arduino IDE را نصب و اجرا کنید.
  2. در بخش Boards Manager عبارت esp32 را جست‌وجو کنید.
  3. پکیج رسمی esp32 by Espressif Systems را نصب کنید.
  4. برد ESP32 را با کابل USB مناسب متصل کنید.
  5. از منوی Board مدل نزدیک به بردتان را انتخاب کنید.
  6. Port صحیح را انتخاب کنید و یک Example ساده Upload کنید.
برد دیده نمی‌شود؟ کابل USB فقط شارژ ممکن است داده نداشته باشد. در بعضی DevKitها نیز درایور USB-to-UART مانند CP210x یا CH340 لازم می‌شود.

اولین برنامه؛ روشن و خاموش کردن LED

اگر برد شما LED داخلی دارد، پایه آن بسته به مدل برد می‌تواند متفاوت باشد. در بسیاری از DevKitهای کلاسیک GPIO2 رایج است، اما قبل از استفاده Pinout برد خودتان را بررسی کنید.

Arduino C++اولین Blink در ESP32
const int LED_PIN = 2;

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(500);

  digitalWrite(LED_PIN, LOW);
  delay(500);
}

ساختار برنامه برای کسی که قبلاً Arduino کار کرده آشناست: setup() یک بار بعد از شروع اجرا می‌شود و loop() دائماً تکرار می‌شود.

ورودی و خروجی‌هایی که خیلی زود به کارتان می‌آیند

GPIO دیجیتال؛ کلید، LED و رله

با pinMode() جهت پایه و با digitalRead() یا digitalWrite() وضعیت آن را کنترل می‌کنید.

برای ورودی کلید معمولاً Pull-up داخلی می‌تواند مدار را ساده‌تر کند.

ADC؛ خواندن سنسورهای آنالوگ

ADC ولتاژ آنالوگ را به عدد تبدیل می‌کند. در ESP32 کلاسیک ADC دارای رفتار و محدودیت‌هایی است و برای اندازه‌گیری دقیق باید کالیبراسیون و محدوده ورودی را جدی بگیرید.

در پروژه‌های Wi-Fi، محدودیت ADC2 را فراموش نکنید.

PWM؛ کنترل LED و موتور

ESP32 از Peripheral موسوم به LEDC برای تولید PWM استفاده می‌کند. با PWM می‌توان متوسط توان تحویلی را کنترل کرد؛ مثلاً شدت نور LED یا ورودی یک درایور موتور.

I2C، SPI و UART

I2C برای سنسورها و نمایشگرهایی با دو خط ارتباطی بسیار رایج است.

SPI معمولاً سرعت بالاتری دارد و در نمایشگر، حافظه و مبدل‌ها استفاده می‌شود.

UART همان ارتباط سریال معروف است و برای GPS، ماژول‌ها و دیباگ بسیار کاربرد دارد.

Wi-Fi و Bluetooth؛ دلیل اصلی محبوبیت ESP32

مدل کلاسیک ESP32 Wi-Fi استاندارد 802.11 b/g/n در باند 2.4GHz را در خود دارد و می‌تواند در سناریوهای مختلف مثل Station یا Access Point استفاده شود. به زبان ساده، ESP32 می‌تواند به مودم شما وصل شود یا خودش یک شبکه بی‌سیم بسازد.

🌡️ سنسور آنلاینارسال دما و رطوبت به شبکه
💡 خانه هوشمندکنترل روشنایی و رله
📊 داشبوردنمایش اطلاعات در مرورگر
📲 کنترل موبایلWi-Fi یا BLE

Bluetooth در خانواده ESP32 یکسان نیست. ESP32 کلاسیک Bluetooth Classic و BLE دارد، اما برای مثال ESP32-S3 از BLE استفاده می‌کند و خانواده‌هایی مانند S2 اصلاً Bluetooth داخلی ندارند. هنگام انتخاب برد باید این تفاوت را با نیاز پروژه تطبیق دهید.

ESP32 و مصرف انرژی

اگر قرار است پروژه با باتری کار کند، فقط ظرفیت باتری مهم نیست. Wi-Fi مصرف انرژی قابل توجهی دارد و طراحی نرم‌افزار تعیین می‌کند دستگاه چند ساعت یا چند ماه کار کند. ESP32 حالت‌های Light-sleep و Deep-sleep دارد تا در زمانی که پردازش لازم نیست، مصرف کاهش پیدا کند.

مثال: یک سنسور محیطی لازم نیست 24 ساعت Wi-Fi روشن داشته باشد. می‌تواند از Deep-sleep بیدار شود، سنسور را بخواند، اطلاعات را ارسال کند و دوباره بخوابد.

پروژه عملی: کنترل LED با مرورگر و Wi-Fi

حالا تمام صحبت‌ها را به یک پروژه واقعی تبدیل کنیم. ESP32 را به شبکه Wi-Fi وصل می‌کنیم، یک Web Server بسیار ساده می‌سازیم و از داخل مرورگر LED را روشن و خاموش می‌کنیم.

PROJECT 01

Wi-Fi LED Controller

قطعاتESP32 DevKit، LED، مقاومت 220Ω، بردبورد
دانش لازمGPIO + Wi-Fi + مرورگر
سطحمقدماتی
خروجیکنترل LED از موبایل یا لپ‌تاپ

اتصال ساده

  • آند LED → مقاومت 220Ω → GPIO2
  • کاتد LED → GND
اگر برد شما LED داخلی روی GPIO2 دارد، می‌توانید برای تمرین اولیه از همان استفاده کنید. در غیر این صورت LED خارجی ببندید و Pinout برد را کنترل کنید.
Arduino C++Web Server ساده برای کنترل LED
#include <WiFi.h>

const char* ssid = "YOUR_WIFI_NAME";
const char* password = "YOUR_WIFI_PASSWORD";

WiFiServer server(80);

const int LED_PIN = 2;

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("ESP32 IP: ");
  Serial.println(WiFi.localIP());

  server.begin();
}

void loop() {
  WiFiClient client = server.available();

  if (!client) return;

  String request = client.readStringUntil('\r');

  if (request.indexOf("/ON") != -1) {
    digitalWrite(LED_PIN, HIGH);
  }

  if (request.indexOf("/OFF") != -1) {
    digitalWrite(LED_PIN, LOW);
  }

  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html; charset=UTF-8");
  client.println("Connection: close");
  client.println();

  client.println("<html><body style='font-family:sans-serif;text-align:center'>");
  client.println("<h2>ESP32 LED Control</h2>");
  client.println("<p><a href='/ON'><button>LED ON</button></a></p>");
  client.println("<p><a href='/OFF'><button>LED OFF</button></a></p>");
  client.println("</body></html>");

  client.stop();
}

چطور پروژه را اجرا کنیم؟

  1. نام و رمز Wi-Fi خودتان را در کد وارد کنید.
  2. کد را روی ESP32 Upload کنید.
  3. Serial Monitor را روی 115200 باز کنید.
  4. IP نمایش‌داده‌شده را یادداشت کنید.
  5. موبایل یا لپ‌تاپ را به همان شبکه متصل کنید.
  6. IP را در مرورگر باز کنید و LED را روشن یا خاموش کنید.
مرحله بعدی پروژه

بعداً می‌توانید LED را با رله جایگزین کنید، صفحه وب را زیباتر کنید، سنسور اضافه کنید یا اطلاعات را به MQTT/Home Assistant بفرستید.

ESP32 در چه پروژه‌هایی استفاده می‌شود؟

🏠 خانه هوشمند

کنترل چراغ، رله، پرده، سنسور و تجهیزات متصل به شبکه.

🤖 رباتیک

کنترل ربات، ارسال Telemetry و ارتباط بی‌سیم بین کنترلرها.

🌱 کشاورزی هوشمند

سنسور رطوبت خاک، کنترل آبیاری و ارسال اطلاعات به سرور.

📡 IoT

ارسال داده با HTTP، MQTT و پروتکل‌های شبکه در محصولات متصل.

🖥️ نمایشگر و HMI

ساخت رابط کاربری با OLED، TFT و در مدل‌های مناسب پروژه‌های گرافیکی سنگین‌تر.

🔋 دیتالاگر کم‌مصرف

بیدار شدن دوره‌ای، خواندن سنسور، ذخیره/ارسال داده و بازگشت به Sleep.

اشتباهات رایج هنگام شروع با ESP32

01

اتصال مستقیم 5V به GPIO

ESP32 منطق 3.3V دارد. قبل از اتصال خروجی هر سنسور یا ماژول، سطح ولتاژ را بررسی کنید.

02

انتخاب برد اشتباه در IDE

ESP32، S2، S3، C3 و C6 یکسان نیستند. مدل چیپ و برد را از روی ماژول بررسی کنید.

03

استفاده از ADC2 هم‌زمان با Wi-Fi

در ESP32 کلاسیک این مورد می‌تواند باعث مشکل شود. ADC1 معمولاً انتخاب مناسب‌تری است.

04

تغذیه ضعیف

فعالیت Wi-Fi می‌تواند جریان لحظه‌ای را بالا ببرد. منبع ضعیف یا کابل بد ممکن است باعث Resetهای تصادفی شود.

05

نادیده گرفتن پایه‌های Boot

اتصال نامناسب بعضی GPIOها هنگام روشن شدن ممکن است در فرآیند Boot اختلال ایجاد کند.

برای شروع چه وسایلی بخریم؟

کیت ساده پیشنهادی:
  • یک برد ESP32 DevKit مناسب
  • کابل USB دیتا
  • بردبورد
  • سیم جامپر
  • LED و مقاومت‌های 220Ω و 1kΩ و 10kΩ
  • کلید فشاری
  • یک سنسور I2C ساده
  • نمایشگر OLED I2C برای مراحل بعدی

ESP32 را با Arduino IDE یاد بگیریم یا ESP-IDF؟

برای فرد مبتدی، پیشنهاد منطقی این است که ابتدا با Arduino Core مفاهیم GPIO، سنسور، Wi-Fi و پروتکل‌ها را یاد بگیرد. وقتی پروژه‌ها جدی‌تر شدند و نیاز به مدیریت دقیق Taskها، Memory، Network Stack، Power Management یا امکانات سطح پایین پیدا کردید، ESP-IDF ارزش بیشتری پیدا می‌کند.

اگر تازه‌کاریArduino IDE
اگر پروژه حرفه‌ای‌تر شدESP-IDF
اگر پروژه بزرگ و تیمی استESP-IDF + ابزارهای توسعه حرفه‌ای

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

آیا ESP32 برای مبتدی مناسب است؟

بله. با Arduino IDE می‌توان بسیار ساده شروع کرد، اما چون امکانات زیادی دارد بهتر است مباحث را مرحله‌ای یاد بگیرید.

آیا ESP32 جای Arduino Uno را می‌گیرد؟

در بسیاری از پروژه‌ها می‌تواند، اما همیشه «قوی‌تر» به معنی «بهتر برای هر پروژه» نیست. Uno هنوز برای آموزش پایه و بعضی کاربردهای 5 ولتی بسیار ساده است.

آیا ESP32 با 5 ولت کار می‌کند؟

بسیاری از بردهای توسعه از ورودی USB یا 5V تغذیه می‌شوند و رگولاتور روی برد ولتاژ را کاهش می‌دهد، اما منطق GPIO خود ESP32 برابر 3.3V است.

کدام مدل ESP32 را برای شروع بخریم؟

برای آموزش عمومی، یک DevKit معتبر بر پایه ESP32 کلاسیک هنوز انتخاب ساده و پرمنبعی است. اگر USB داخلی، BLE جدیدتر یا قابلیت‌های خاص می‌خواهید، S3/C3/C6 را بر اساس پروژه بررسی کنید.

آیا می‌توان ESP32 را با گوشی برنامه‌نویسی کرد؟

راهکارهایی وجود دارد، اما برای یادگیری اصولی و دیباگ راحت‌تر، کامپیوتر با Arduino IDE یا ESP-IDF پیشنهاد می‌شود.

جمع‌بندی؛ از اینجا به بعد چه یاد بگیریم؟

ESP32 برای کسی که می‌خواهد از پروژه‌های ساده میکروکنترلری وارد دنیای IoT و سیستم‌های متصل شود، یکی از بهترین پلتفرم‌های آموزشی است. قدرت واقعی آن فقط در سرعت پردازنده نیست؛ ترکیب Wi-Fi، Bluetooth، GPIO، ADC، PWM و پروتکل‌های مختلف در یک برد کوچک، امکان ساخت پروژه‌های بسیار متنوعی را فراهم می‌کند.

اگر این مقاله اولین قدم شما بود، مسیر بعدی پیشنهادی این است: GPIO → ADC و PWM → I2C → Wi-Fi → Web Server → MQTT → Deep Sleep → پروژه کامل IoT.

پین‌های ESP32 و کاربرد هر GPIO راه‌اندازی ESP32 در Arduino IDE آموزش Wi-Fi و Web Server Bluetooth و BLE در ESP32 I2C، SPI و UART در ESP32 Deep Sleep و کاهش مصرف انرژی

منابع فنی

مشخصات و نکات فنی این مقاله با مستندات رسمی Espressif تطبیق داده شده و متن با نگارش مستقل برای آموزش فارسی MAKATRONIC98 تدوین شده است.

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

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