⚖️ ESP32 یا ESP8266؟ مقایسه‌ی کامل دو برد وای‌فای و راهنمای انتخاب

✍️ تیم ووکوی فارسی ·

اگر می‌خواهی پروژه‌ای بسازی که به وای‌فای وصل شود، خیلی زود به این سؤال می‌رسی: ESP32 یا ESP8266؟ هر دو از شرکت اسپرسیف (Espressif) هستند، هر دو با زبان آردوینو برنامه‌نویسی می‌شوند و هر دو وای‌فای دارند. ولی ESP8266 نسل قبلی و ساده‌تر است و ESP32 نسل بعدی و پرامکانات‌تر. در این مقایسه‌ی ESP32 و ESP8266 فرق‌ها را با جدول مشخصات، تفاوت پین‌ها و تفاوت کد توضیح می‌دهیم و در آخر یک برنامه‌ی وب‌سرور می‌نویسیم که بدون تغییر روی هر دو برد کامپایل می‌شود.

دو برد در یک نگاه

ESP8266 معمولاً به شکل بردهای NodeMCU یا Wemos D1 mini فروخته می‌شود و ESP32 به شکل بردهای DevKit با ۳۰ یا ۳۸ پایه. جدول زیر نسخه‌ی کلاسیک هر دو را مقایسه می‌کند:

ویژگیESP8266 (NodeMCU، D1 mini)ESP32 (DevKit)
پردازندهیک هسته، ۸۰ یا ۱۶۰ مگاهرتزدو هسته، تا ۲۴۰ مگاهرتز
رمحدود ۸۰ کیلوبایت (بعد از وای‌فای حدود ۴۰ کیلو آزاد)۵۲۰ کیلوبایت
وای‌فای۲٫۴ گیگاهرتز۲٫۴ گیگاهرتز
بلوتوثنداردبلوتوث کلاسیک و BLE
پین قابل استفادهحدود ۱۱ روی NodeMCUحدود ۲۵ روی DevKit
ورودی آنالوگ (ADC)فقط یکی (A0)، ۱۰ بیتیتا ۱۸ کانال، ۱۲ بیتی
خروجی آنالوگ (DAC)ندارددو کانال (GPIO25 و GPIO26)
PWMنرم‌افزاریسخت‌افزاری (ledc)، ۱۶ کانال
سریال سخت‌افزارییکی کامل و یکی فقط ارسالسه
پین لمسیندارد۱۰ پین
قیمتارزان‌ترکمی گران‌تر

خانواده‌ی ESP32 هم چند عضو دارد: ESP32-S2 (یک هسته، بدون بلوتوث)، ESP32-S3 (دو هسته، مناسب پردازش تصویر و USB) و ESP32-C3 (یک هسته‌ی RISC-V، فقط BLE). وقتی در آموزش‌ها فقط «ESP32» می‌گویند، منظور همان ESP32 کلاسیک روی بردهای DevKit است.

نقطه‌ی قوت ESP8266: ساده و ارزان

ESP8266 بردی بود که اینترنت اشیای ارزان را همه‌گیر کرد. برای یک کلید وای‌فای، یک سنسور دما که هر چند دقیقه عددی به سرور می‌فرستد یا یک چراغ که از گوشی روشن می‌شود، هنوز کاملاً کافی است. Wemos D1 mini خیلی کوچک است و جای کمی در جعبه‌ی پروژه می‌گیرد. آموزش‌ها و کتابخانه‌های قدیمی زیادی هم برایش نوشته شده است.

ولی محدودیت‌هایش زود خودشان را نشان می‌دهند. فقط یک ورودی آنالوگ دارد، پس اگر بخواهی هم‌زمان رطوبت خاک و نور را بخوانی، به یک مبدل جدا نیاز داری. روی خود تراشه ورودی A0 فقط ۰ تا ۱ ولت را می‌خواند؛ بردهای NodeMCU یک تقسیم‌کننده‌ی ولتاژ دارند که این بازه را به ۳٫۳ ولت می‌رساند، ولی ماژول خام چنین چیزی ندارد. چند پین هم هنگام روشن شدن نقش ویژه دارند: GPIO0 و GPIO2 باید HIGH و GPIO15 باید LOW باشند، وگرنه برد بوت نمی‌شود. روی NodeMCU شماره‌های چاپ‌شده (D1، D2، …) با شماره‌ی GPIO فرق دارند؛ مثلاً D4 همان GPIO2 است که LED داخلی رویش است و با LOW روشن می‌شود.

نقطه‌ی قوت ESP32: جا برای بزرگ شدن

ESP32 تقریباً در هر چیزی جلوتر است. دو هسته دارد، پس وای‌فای و برنامه‌ی تو کم‌تر سر وقت پردازنده دعوا می‌کنند. رمش چند برابر است و صفحه‌ی وب بزرگ، WebSocket و JSON را راحت‌تر تحمل می‌کند. ADC دوازده بیتی روی پین‌های زیاد، PWM سخت‌افزاری با واحد ledc، پین‌های لمسی و بلوتوث هم دارد. خواب عمیقش هم راحت‌تر است: ESP32 با تایمر داخلی بیدار می‌شود، ولی ESP8266 برای بیدار شدن با تایمر باید GPIO16 با یک سیم به پین RST وصل شود.

ESP32 هم ریزه‌کاری‌های خودش را دارد: ADC2 وقتی وای‌فای روشن است کار نمی‌کند، پین‌های ۳۴ تا ۳۹ فقط ورودی‌اند و چند پین strapping دارد. همه‌ی این‌ها در پین اوت ESP32 آمده است.

تفاوت کد: کمتر از آن‌چه فکر می‌کنی

هر دو با Arduino IDE برنامه‌نویسی می‌شوند و setup، loop، digitalWrite و Serial در هر دو یکی است. فرق اصلی در اسم کتابخانه‌هاست:

کارESP8266ESP32
وای‌فای#include <ESP8266WiFi.h>#include <WiFi.h>
وب‌سرورESP8266WebServerWebServer
کم و زیاد کردن نورanalogWrite (در هسته‌های جدید ۰ تا ۲۵۵، در قدیمی‌ها ۰ تا ۱۰۲۳)ledcAttach و ledcWrite
ورودی آنالوگanalogRead(A0)، ۰ تا ۱۰۲۳analogRead(34)، ۰ تا ۴۰۹۵

با دستور پیش‌پردازنده‌ی #if defined(ESP32) می‌شود یک برنامه نوشت که روی هر دو برد کامپایل شود. این وب‌سرور کوچک LED داخلی را با یک دکمه در مرورگر روشن و خاموش می‌کند:

// One web server sketch for both boards.
#if defined(ESP32)
  #include <WiFi.h>
  #include <WebServer.h>
  WebServer server(80);
  const int LED = 2;          // DevKit blue LED, HIGH = on
  const bool ON = HIGH;
#elif defined(ESP8266)
  #include <ESP8266WiFi.h>
  #include <ESP8266WebServer.h>
  ESP8266WebServer server(80);
  const int LED = 2;          // NodeMCU / D1 mini LED on GPIO2 (D4), LOW = on
  const bool ON = LOW;
#else
  #error "This sketch is for ESP32 or ESP8266"
#endif

const char* ssid = "Wokwi-GUEST";   // simulator network; use your own on a real board
const char* password = "";

bool ledOn = false;

void sendPage() {
  String html = "<!doctype html><html><head><meta charset='utf-8'>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'></head><body>";
  html += "<h2>LED is " + String(ledOn ? "ON" : "OFF") + "</h2>";
  html += "<a href='/toggle'><button>Toggle</button></a></body></html>";
  server.send(200, "text/html", html);
}

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, !ON);           // start with the LED off
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(300);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Open http://");
  Serial.println(WiFi.localIP());

  server.on("/", sendPage);
  server.on("/toggle", []() {
    ledOn = !ledOn;
    digitalWrite(LED, ledOn ? ON : !ON);
    sendPage();
  });
  server.begin();
}

void loop() {
  server.handleClient();            // answer the browser
}
💡 روی برد واقعی به‌جای Wokwi-GUEST اسم و رمز وای‌فای خودت را بنویس. هر دو برد فقط وای‌فای ۲٫۴ گیگاهرتز را می‌بینند؛ اگر وصل نشد، عیب‌یابی وای‌فای ESP32 را بخوان.

کدام را انتخاب کنم؟

هدف توپیشنهاد
یاد گرفتن اینترنت اشیا از صفرESP32؛ آموزش و مثال بیشتر و جا برای پروژه‌های بزرگ‌تر
یک کلید یا سنسور ساده‌ی وای‌فایESP8266 (D1 mini) کافی و ارزان است
چند سنسور آنالوگ هم‌زمانESP32
بلوتوث یا اتصال به گوشی بدون مودمESP32
داشبورد وب با WebSocket و نمودار زندهESP32 به خاطر رم بیشتر
پروژه‌ی باتری‌خور با خواب عمیقهر دو؛ ESP32 راحت‌تر

اگر هنوز بین آردوینو و ESP32 مردد هستی، مقایسه‌ی ESP32 و آردوینو اونو و پیکو، ESP32 یا آردوینو را هم ببین.

قبل از خرید، در شبیه‌ساز امتحان کن

برد ESP32 در شبیه‌ساز تینکرکد فارسی هست: به شبکه‌ی مجازی Wokwi-GUEST وصل می‌شود، صفحه‌ی وبی که می‌سازد در تب «مرورگر» ویرایشگر باز می‌شود و MQTT هم یک داشبورد آماده دارد. البته این وای‌فای به اینترنت واقعی نمی‌رسد و برای تمرین وب‌سرور و ارتباط داخلی است. ESP8266 در این شبیه‌ساز نیست (در خود Wokwi هم تمرکز روی خانواده‌ی ESP32 است)، ولی برنامه‌ی بالا با همان بلوک #if به‌عنوان ESP32 اجرا می‌شود. باز کردن و خواندن پروژه‌ها رایگان است و اجرای ESP32 به اشتراک Plus نیاز دارد. برای شروع، پروژه‌ی روشن کردن LED از صفحه‌ی وب و درس وصل شدن به وای‌فای مناسب‌اند.

اشتباه‌های رایج در انتخاب و مهاجرت

همه‌ی آموزش‌های این برد در صفحه‌ی ESP32 جمع شده‌اند و اگر دنبال ایده‌ای، ایده‌های پروژه‌ی اینترنت اشیا با ESP32 را ببین.

وب‌سرور ESP32 را در تینکرکد فارسی ببین ⚖️

سؤال‌های رایج

برای شروع اینترنت اشیا ESP32 بخرم یا ESP8266؟

برای بیشتر کسانی که تازه شروع می‌کنند ESP32 انتخاب بهتری است: پین و ADC بیشتر، بلوتوث، PWM سخت‌افزاری و آموزش و شبیه‌ساز بیشتر. ESP8266 برای کارهای خیلی ساده و ارزان، مثل یک کلید وای‌فای، هنوز کافی است.

کد ESP8266 روی ESP32 اجرا می‌شود؟

منطق برنامه بله، ولی اسم چند کتابخانه فرق دارد: ESP8266WiFi.h به WiFi.h و ESP8266WebServer به WebServer تبدیل می‌شود. شماره‌ی پین‌ها و پین ADC را هم باید دوباره بررسی کنی.

ESP8266 را هم می‌شود شبیه‌سازی کرد؟

در شبیه‌ساز فارسی برد ESP8266 نیست، ولی ESP32 هست. چون مفهوم‌ها و بیشتر دستورها یکی است، می‌توانی وای‌فای و وب‌سرور را روی ESP32 تمرین کنی و بعد روی ESP8266 واقعی ببری.

مقاله‌های مرتبط

🆚

آردوینو اونو، نانو یا مگا؟ مقایسه‌ی کامل و راهنمای انتخاب برد

📱

ووکوی روی گوشی: شبیه‌سازی آردوینو و ESP32 با موبایل، بدون نصب برنامه

💾

ذخیره و اشتراک‌گذاری پروژه در ووکوی و شبیه‌ساز فارسی

🏫

پروژه مدرسه با آردوینو: ایده‌های مناسب هر سن، ارائه در جشنواره و نمایشگاه علمی، و نکته‌های ایمنی

همه‌ی آموزش‌های مقایسه و راهنمای انتخاب ← · همه‌ی مقاله‌ها