آموزش عیب‌یابی بوت ESP8266 / ESP32

آموزش عیب‌یابی بوت ESP8266 / ESP32

راهنمای جامع شناسایی و رفع مشکلات بوت، نصب و استفاده از esptool

چرا این آموزش؟

میکروکنترلرهای ESP8266 و ESP32 از محبوب‌ترین تراشه‌های WiFi/IoT هستند، اما بسیاری از کاربران با مشکلات بوت، پروگرام نشدن و ریست‌های مکرر دست‌وپنجه نرم می‌کنند. این راهنما تمام حالت‌های بوت، ابزار esptool و رایج‌ترین خطاها را به زبان ساده توضیح می‌دهد.

! نکات مهم قبل از شروع

  • تمام پین‌های ESP 3.3V هستند و تحمل 5V ندارند (لاین دیتایی که بین سنسور ها وصل میشود مشکلی ندارد چون جریان بسیار پایینی دارند)
  • برای پروگرام کردن نیاز به USB-TTL Converter با درایور نصب‌شده دارید
  • از کابل USB دیتا (نه شارژ) استفاده کنید
  • پین‌های Strapping در زمان بوت نباید به اشتباه HIGH/LOW شوند

۱ مبدل USB به TTL چیست؟

تعریف ساده

USB-TTL Converter یک مبدل سریال است که ارتباط USB کامپیوتر را به پروتکل UART (سریال TTL) تبدیل می‌کند. چیپ‌های ESP8266/ESP32 از طریق این پروتکل پروگرام می‌شوند.

انواع رایج چیپ‌های مبدل

چیپ سازنده ویژگی‌ها لینک دانلود درایور
CH340/CH341 WCH چین ارزان، رایج در بردهای چینی، نیاز به نصب دستی درایور راهنمای نصب CH340
CP2102/CP2104 Silicon Labs پایدار، درایور داخلی در اکثر سیستم‌عامل‌ها دانلود درایور CP210x
FT232RL/FT231X FTDI باکیفیت، قابلیت تنظیم ولتاژ I/O، گران‌تر دانلود درایور FT232
PL2303 Prolific قدیمی، گاهی مشکل در ویندوز ۱۰/۱۱ دانلود درایور PL2303

! نکته مهم در نصب درایور

اگر برد شما توسط ویندوز شناسایی نمی‌شود یا پورت COM نمایش داده نمی‌شود، ابتدا درایور مربوطه را نصب کنید.

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

اتصال USB-TTL به ESP8266

نکته برای کاربران برد توسعه (Dev Board):

اگر از بردهای توسعه آماده مانند NodeMCU، Wemos D1 Mini یا ESP32 DevKit استفاده می‌کنید، این بردها معمولاً چیپ USB-TTL (معمولاً CH340 یا CP2102) را روی خود برد دارند و نیازی به مبدل جداگانه نیست. کافی است برد را مستقیماً با کابل USB به کامپیوتر وصل کنید.

پین USB-TTL پین ESP8266 توضیحات
TXD RX (GPIO3) TX مبدل به RX میکرو (متقاطع)
RXD TX (GPIO1) RX مبدل به TX میکرو (متقاطع)
GND GND زمین مشترک (اجباری)
3.3V 3.3V تغذیه (در صورت عدم استفاده از USB)
DTR/RTS EN + GPIO0 اتوماتیک کردن پروگرام (اختیاری)

اتصال USB-TTL به ESP32

پین USB-TTL پین ESP32 توضیحات
TXD RX (GPIO3) TX مبدل به RX میکرو (متقاطع)
RXD TX (GPIO1) RX مبدل به TX میکرو (متقاطع)
GND GND زمین مشترک (اجباری)
3.3V 3.3V تغذیه (در صورت عدم استفاده از USB)
DTR/RTS EN + GPIO0 اتوماتیک کردن پروگرام (اختیاری)

توجه: پین‌های GPIO1 (TX) و GPIO3 (RX) در ESP8266 و ESP32 یکسان هستند. تفاوت اصلی در پین‌های کنترل بوت (GPIO0، GPIO2، GPIO15) است که در بخش‌های بعدی توضیح داده می‌شود.

۲ نصب و راه‌اندازی esptool

esptool چیست؟

esptool.py ابزار رسمی پایتونی شرکت Espressif برای پروگرام کردن، خواندن، پاک کردن و عیب‌یابی تراشه‌های ESP8266 و ESP32 است. این ابزار تمام حالت‌های بوت را مدیریت می‌کند و قدرتمندترین روش برای کار با فلش ESP است.

روش نصب در ویندوز

  1. ابتدا Python 3.7 (به بالا) را از python.org نصب کنید. هنگام نصب، گزینه "Add Python to PATH" را تیک بزنید.
  2. CMD (Command Prompt) را به صورت Administrator باز کنید (کلیک راست روی Start → Windows Terminal (Admin))
  3. دستور زیر را اجرا کنید:
pip install esptool pyserial

راهنمای کاربران ویندوز:

اگر دستور pip شناسایی نشد، مسیر Python را به PATH اضافه کنید یا از py -m pip install esptool pyserial استفاده کنید.

نکته: در Linux ممکن است نیاز به pip3 یا اجرا با sudo داشته باشید.

نکته مهم:

در نسخه‌های قدیمی‌تر esptool از دستور esptool.py version استفاده می‌شد. در نسخه‌های جدیدتر (4.x به بالا) دستور صحیح esptool version است (بدون .py). اگر دستور اول کار نکرد، دستور دوم را امتحان کنید.

بررسی نصب

esptool version

خروجی باید نسخه نصب‌شده را نشان دهد (مثلاً 4.8.1).

نصب در Arduino IDE

اگر از Arduino IDE استفاده می‌کنید، esptool به صورت خودکار همراه با بردهای ESP نصب می‌شود:

  1. Arduino IDE را باز کنید
  2. به File → Preferences بروید
  3. در قسمت Additional Board Manager URLs این لینک را اضافه کنید:
    https://dl.espressif.com/dl/package_esp32_index.json
  4. به Tools → Board → Board Manager بروید
  5. "ESP32" یا "ESP8266" را جستجو و نصب کنید
  6. esptool به صورت خودکار نصب می‌شود و در پوشه C:\Users\[Username]\AppData\Local\Arduino15\packages\ قرار می‌گیرد

۳ حالت‌های بوت ESP8266

پین‌های تعیین‌کننده بوت

ESP8266 با سه پین GPIO0، GPIO2 و GPIO15 حالت بوت خود را در زمان روشن یا ریست تعیین می‌کند. این پین‌ها در لحظه ریست نمونه‌برداری می‌شوند.

GPIO15 GPIO0 GPIO2 حالت بوت کاربرد
LOW (0V) LOW (0V) HIGH (3.3V) UART Bootloader پروگرام کردن (Download Mode)
LOW (0V) HIGH (3.3V) HIGH (3.3V) SPI Flash Boot اجرا از فلش (Normal Mode)
HIGH (3.3V) X X SDIO Mode حالت SDIO (غیرمعمول)

توجه: GPIO2 دارای مقاومت Pull-up داخلی است و نیازی به مقاومت خارجی ندارد. GPIO15 باید همیشه LOW باشد (مقاومت Pulldown خارجی 10K).

تفسیر لاگ بوت ESP8266

در بادریت 74880 در Serial Monitor لاگ بوت قابل مشاهده است:

ets Jan 8 2013,rst cause:2, boot mode:(3,6) load 0x40100000, len 1856, room 16 tail 0 chksum 0x63

جدول مقادیر rst cause:

مقدار معنی علت احتمالی
0 Undefined نامشخص
1 Power reboot روشن شدن مجدد برق
2 External reset / Deep-sleep wake فشار دکمه RST یا بیدار شدن از Deep-sleep
3 Software reset ریست نرم‌افزاری
4 Hardware WDT reset ریست سخت‌افزاری Watchdog
5 Deep-sleep ورود به حالت Deep-sleep
6 Hardware reset ریست سخت‌افزاری

مقدار boot mode (m,n) - توضیح کامل:

الگوی بوت: boot mode : (m,n) که در آن m وضعیت سه پین GPIO (15, 0, 2) را نشان می‌دهد و n محل فایل بوت را نشان می‌دهد.

جدول مقادیر m (وضعیت پین‌ها):

مقدار m GPIO15 GPIO0 GPIO2 حالت
0 0 0 0 Invalid (نامعتبر)
1 0 0 1 UART Bootloader (Download Mode)
2 0 1 0 Invalid (نامعتبر)
3 0 1 1 SPI Flash Boot (Normal Mode)
4 1 0 0 SDIO Mode
5 1 0 1 SDIO Mode
6 1 1 0 SDIO Mode
7 1 1 1 SDIO Mode

جدول مقادیر n (محل فایل بوت):

مقدار n SD_sel != 3 SD_sel == 3
0 Remapping -
1 UART boot -
2 Jump boot -
3 Flash boot -
4 SDIO LowSpeed V2 IO UART1 booting
5 SDIO HighSpeed V1 IO UART1 booting
6 SDIO LowSpeed V1 IO UART1 booting
7 SDIO HighSpeed V2 IO UART1 booting

مثال تفسیر:

boot mode:(3,6) → GPIO15=LOW, GPIO0=HIGH, GPIO2=HIGH → بوت از فلش (Normal Mode). SDIO LowSpeed V1 IO, UART1 booting.

boot mode:(1,6) → GPIO15=LOW, GPIO0=LOW, GPIO2=HIGH → UART Bootloader (Download Mode). SDIO LowSpeed V1 IO, UART1 booting.

۴ حالت‌های بوت ESP32

پین‌های Strapping ESP32

ESP32 دارای 5 پین Strapping است که در زمان ریست نمونه‌برداری می‌شوند. این پین‌ها با مقاومت‌های داخلی Weak Pull-up/down همراه هستند.

پین مقدار بیت حالت LOW حالت HIGH
GPIO5 0x01 - باید HIGH باشد
GPIO15 (MTDO) 0x02 خاموش کردن لاگ بوت خروجی لاگ عادی
GPIO4 0x04 - بدون تاثیر در حالت‌های پشتیبانی‌شده
GPIO2 0x08 باید LOW یا Floating باشد برای Download در بوت عادی نادیده گرفته می‌شود
GPIO0 0x10 Download Boot Mode SPI Fast Flash Boot
GPIO12 (MTDI) 0x20 VDD_SDIO = 3.3V (پیش‌فرض) VDD_SDIO = 1.8V (خطرناک!)

! هشدار مهم GPIO12

اگر GPIO12 در زمان بوت HIGH شود، ولتاژ فلش به 1.8V تغییر می‌کند و چیپ نمی‌تواند بوت شود! این پین دارای Pull-down داخلی است، اما از اتصال مقاومت Pull-up به آن خودداری کنید.

تفسیر لاگ بوت ESP32

ets Jun 8 2016 00:22:57 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:2 load:0x3fff0018,len:4 entry 0x400806ac

جدول مقادیر rst:0xNN:

Hex نام توضیحات
0x1 POWERON_RESET روشن شدن برق (Vbat power on)
0x3 SW_RESET ریست نرم‌افزاری دیجیتال
0x4 OWDT_RESET Legacy Watchdog reset
0x5 DEEPSLEEP_RESET بیدار شدن از Deep Sleep
0x7 TG0WDT_SYS_RESET Timer Group0 Watchdog reset
0x8 TG1WDT_SYS_RESET Timer Group1 Watchdog reset
0x9 RTCWDT_SYS_RESET RTC Watchdog reset
0xC SW_CPU_RESET Software reset CPU
0xD RTCWDT_CPU_RESET RTC Watchdog reset CPU
0xE EXT_CPU_RESET APP CPU توسط PRO CPU ریست شده
0xF RTCWDT_BROWN_OUT_RESET ریست به دلیل افت ولتاژ (Brownout)

مقادیر boot:0xNN:

  • 0x13 (00010011): SPI_FAST_FLASH_BOOT - بوت عادی از فلش
  • 0x03 (00000011): DOWNLOAD_BOOT - حالت پروگرام (GPIO0=LOW)
  • 0x01: SDIO_REI_FEO_V1_BOOT - حالت SDIO

۵ دستورات پرکاربرد esptool

۱. شناسایی چیپ و اطلاعات اولیه

# شناسایی خودکار چیپ esptool --port COM3 chip_id # خواندن MAC Address esptool --port COM3 read_mac # خواندن اطلاعات فلش esptool --port COM3 flash_id

۲. پاک کردن فلش

# پاک کردن کل فلش esptool --port COM3 erase_flash # پاک کردن یک ناحیه خاص esptool --port COM3 erase_region 0x10000 0x40000

۳. نوشتن فریمور (Flash Write)

# پروگرام ساده ESP8266 esptool --port COM3 --baud 460800 write_flash 0x0 firmware.bin # پروگرام ESP32 با پارامترهای کامل esptool --chip esp32 --port COM3 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 app.bin # حالت‌های فلش: qio, qout, dio, dout # فرکانس: 40m, 26m, 20m, 80m # سایز: 1MB, 2MB, 4MB, 8MB, 16MB

! تفاوت حالت‌های فلش:

  • QIO (Quad I/O): 4 خط داده - سریع‌ترین
  • QOUT (Quad Output): 4 خط خروجی
  • DIO (Dual I/O): 2 خط داده - سازگارتر
  • DOUT (Dual Output): 2 خط خروجی - سازگارترین

اگر برد شما با QIO کار نکرد، از DIO یا DOUT استفاده کنید.

۴. خواندن فلش

# خواندن کل فلش 4MB و ذخیره در فایل esptool --port COM3 read_flash 0 0x400000 backup.bin # خواندن یک ناحیه کوچک esptool --port COM3 read_flash 0x10000 0x10000 section.bin

۵. بررسی و تحلیل فایل باینری

# اطلاعات فایل باینری esptool --chip esp32 image_info firmware.bin # تبدیل ELF به BIN esptool --chip esp32 elf2image firmware.elf # ادغام چند فایل باینری esptool --chip esp32 merge_bin -o merged.bin --flash_mode dio --flash_size 4MB 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 app.bin

۶. دستورات پیشرفته

# بررسی صحت نوشتن esptool --port COM3 verify_flash 0x10000 app.bin # خواندن RAM esptool --port COM3 read_mem 0x400C0000 # نوشتن در RAM esptool --port COM3 write_mem 0x400C0000 0xabad1dea # دامپ کردن حافظه esptool --port COM3 dump_mem 0x40000000 65536 rom.bin # اجرای کد از RAM esptool --port COM3 --no-stub load_ram program.bin

۶ رایج‌ترین خطاها و راه‌حل‌ها

خطا: "Failed to connect to ESP32/ESP8266: Timed out waiting for packet header"

علت: چیپ وارد حالت Download Mode نشده است.

راه‌حل:

  • دکمه BOOT (GPIO0) را نگه دارید، دکمه EN (RST) را فشار دهید و رها کنید، سپس BOOT را رها کنید
  • خازن 10µF بین پین EN و GND لحیم کنید (برای اتوماتیک شدن)
  • سرعت باد را کم کنید: --baud 115200
  • کابل USB را عوض کنید
  • مقاومت Pulldown 10K روی GPIO0 و GPIO15 بررسی کنید
نمایش در Arduino IDE: Failed to connect to ESP32: Timed out waiting for packet header A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

خطا: "Wrong boot mode detected (0x13)! The chip needs to be in download mode"

علت: GPIO0 HIGH است و چیپ در حالت Normal Boot است.

راه‌حل:

  • GPIO0 را به GND وصل کنید و دوباره ریست کنید
  • مدار Auto-reset (DTR/RTS) را بررسی کنید
  • مقاومت‌های Pull-up روی GPIO0 را بررسی کنید
نمایش در Arduino IDE: Wrong boot mode detected (0x13)! The chip needs to be in download mode. A fatal error occurred: Failed to connect to ESP8266: Wrong boot mode detected (0x13)! The chip needs to be in download mode.

خطا: "Invalid head of packet (0xXX): Possible serial noise or corruption"

علت: نویز سریال یا مشکل اتصال.

راه‌حل:

  • کابل USB کوتاه و باکیفیت استفاده کنید
  • برد را از بردبورد جدا کنید (ممکن است پین‌های فلش اتصال کوتاه شده باشند)
  • سرعت باد را کم کنید: --baud 9600
  • منبع تغذیه را بررسی کنید (FTDI داخلی 3.3V برای ESP کافی نیست)
نمایش در Arduino IDE: Invalid head of packet (0x46) A fatal error occurred: Invalid head of packet (0x46): Possible serial noise or corruption.

خطا: "A serial exception error occurred: read failed"

علت: مشکل درایور یا دسترسی به پورت.

راه‌حل:

  • درایور USB-TTL را نصب یا بروزرسانی کنید (راهنمای CH340)
  • پورت صحیح را انتخاب کنید
  • در Linux کاربر را به گروه dialout اضافه کنید: sudo usermod -a -G dialout $USER
  • نرم‌افزار دیگری پورت را اشغال نکرده باشد
نمایش در Arduino IDE: A serial exception error occurred: read failed [Errno 5] Input/output error A fatal error occurred: Failed to write to target RAM (result was 01070000)

چگونه برنامه‌ای که پورت سریال را اشغال کرده پیدا کنیم؟

در ویندوز:

برای پیدا کردن سریع و آسان برنامه‌ای که پورت COM را اشغال کرده، از نرم‌افزار COM Port Monitor استفاده کنید:

  1. نرم‌افزار را از GitHub دانلود کنید: github.com/DMohammed/COM-Port-Monitor
  2. فایل COM Port Monitor.exe را اجرا کنید (نیاز به نصب ندارد)
  3. پورت مورد نظر (مثلاً COM3) را انتخاب کنید
  4. نرم‌افزار به صورت خودکار نشان می‌دهد کدام برنامه در حال استفاده از آن پورت است
  5. حالا می‌دانید کدام برنامه پورت شما را اشغال کرده و می‌توانید آن را ببندید

نکته:

رایج‌ترین برنامه‌هایی که پورت COM را اشغال می‌کنند:

  • Arduino IDE (Serial Monitor باز)
  • PlatformIO (VS Code)
  • Putty, Tera Term, RealTerm
  • ESP-IDF یا esptool در حال اجرا
  • نرم‌افزار چاپگر (اگر پورت COM به چاپگر متصل شده)

در لینوکس:

# پیدا کردن پروسه‌ای که از پورت استفاده می‌کند lsof /dev/ttyUSB0 # یا fuser /dev/ttyUSB0 # بستن پروسه sudo kill -9 $(fuser /dev/ttyUSB0 2>/dev/null)

خطا: "Brownout detector was triggered" (ESP32)

علت: افت ولتاژ ناگهانی.

راه‌حل:

  • کابل USB کوتاه و باکیفیت استفاده کنید
  • از هاب USB با تغذیه خارجی استفاده کنید
  • رگولاتور 3.3V برد را بررسی کنید
  • بارهای سنگین (رله، سروو، LED) را از منبع جداگانه تغذیه کنید
  • خازن Decoupling 100nF + 10µF نزدیک پین تغذیه اضافه کنید
نمایش در Arduino IDE: Brownout detector was triggered rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:2 load:0x3fff0018,len:4 load:0x3fff001c,len:1044 load:0x40078000,len:8896 load:0x40080400,len:5816 entry 0x400806ac Brownout detector was triggered

خطا: "rst cause:4, boot mode:(3,6)" - ریست مکرر ESP8266

علت: Watchdog سخت‌افزاری به دلیل هنگ کردن.

راه‌حل:

  • کد را بررسی کنید - حلقه‌های بی‌نهایت یا delay طولانی
  • تابع ESP.wdtFeed() در loop اضافه کنید
  • مقدار تغذیه را بررسی کنید (WiFi جریان زیادی مصرف می‌کند)
  • از yield() یا delay(0) در حلقه‌های طولانی استفاده کنید
نمایش در Arduino IDE: ets Jan 8 2013,rst cause:4, boot mode:(3,6) wdt reset load 0x4010f000, len 1384, room 16 tail 8 chksum 0x2d csum 0x2d v60000608 ~ld

خطا: "Invalid header at 0x1000" (ESP32)

علت: بوت‌لودر خراب یا در آدرس اشتباه فلش شده.

راه‌حل:

  • فلش را کاملاً پاک کنید: erase_flash
  • بوت‌لودر صحیح را در آدرس 0x1000 بنویسید
  • GPIO2 را بررسی کنید (نباید HIGH باشد در زمان GPIO0=LOW)
  • ولتاژ VDD_SDIO را بررسی کنید (GPIO12 نباید HIGH باشد)
نمایش در Arduino IDE: Invalid header at 0x1000 A fatal error occurred: Invalid head of packet (0x46)

مشکل: پروگرام می‌شود اما برنامه اجرا نمی‌شود

علت‌های احتمالی:

  • حالت فلش اشتباه (QIO به جای DIO) - با --flash_mode dio تست کنید
  • سایز فلش اشتباه انتخاب شده
  • بوت‌لودر موجود نیست یا خراب است
  • پین‌های GPIO6-GPIO11 به فلش داخلی متصل هستند و نباید استفاده شوند
نمایش در Arduino IDE: Sketch uses 234567 bytes (22%) of program storage space. Writing at 0x00010000... (100%) Wrote 234567 bytes (100%) successfully. # اما بعد از ریست: # هیچ خروجی در Serial Monitor دیده نمی‌شود # یا LED چشمک نمی‌زند

۷ پروگرام کردن دستی (بدون Auto-Reset)

اگر برد شما مدار Auto-Reset ندارد، باید به صورت دستی چیپ را وارد Download Mode کنید:

نکته برای کاربران برد توسعه:

بردهای توسعه مانند NodeMCU، Wemos D1 Mini و ESP32 DevKit معمولاً دکمه‌های BOOT (یا FLASH) و EN (یا RST) را روی برد دارند. از این دکمه‌ها استفاده کنید.

روش صحیح (دو دکمه):

  1. دکمه BOOT (یا FLASH) را نگه دارید - این GPIO0 را LOW می‌کند
  2. دکمه EN (یا RST) را فشار دهید و رها کنید - این یک پالس ریست می‌دهد
  3. دکمه BOOT را رها کنید
  4. حالا چیپ در Download Mode است و می‌توانید پروگرام کنید

روش با سیم‌کشی برای ESP8266:

پین ESP8266 اتصال توضیحات
GPIO0 GND (از طریق دکمه) برای ورود به Download Mode
EN (CHIP_PU) 3.3V (Pull-up) فعال‌سازی چیپ
GPIO2 Floating یا HIGH برای Download Mode باید HIGH باشد
GPIO15 GND (Pull-down) همیشه باید LOW باشد

روش با سیم‌کشی برای ESP32:

پین ESP32 اتصال توضیحات
GPIO0 GND (از طریق دکمه) برای ورود به Download Boot Mode
EN (CHIP_PU) 3.3V (Pull-up) فعال‌سازی چیپ
GPIO2 Floating یا LOW برای Download Mode باید LOW یا Floating باشد
GPIO12 (MTDI) LOW (Pull-down) مهم! HIGH = ولتاژ فلش 1.8V (خطرناک)
GPIO5 HIGH (Pull-up) باید HIGH باشد

تبریک! با تمرین این روش، می‌توانید هر برد ESP را حتی بدون دکمه‌های اختصاصی پروگرام کنید.

۸ راهنمای Arduino IDE برای کاربران ویندوز

تنظیمات صحیح در Arduino IDE

  1. Tools → Board → برد مناسب را انتخاب کنید:
    • ESP8266: "NodeMCU 1.0 (ESP-12E Module)" یا "Generic ESP8266 Module"
    • ESP32: "ESP32 Dev Module" یا "DOIT ESP32 DEVKIT V1"
  2. Tools → Port → پورت COM صحیح را انتخاب کنید (مثلاً COM3)
  3. Tools → Upload Speed → 115200 یا 921600
  4. Tools → Flash Size → 4MB (32Mb) برای اکثر بردها
  5. Tools → Flash Mode → DIO (اگر QIO کار نکرد)

پیدا کردن پورت COM در ویندوز

  1. برد را به USB وصل کنید
  2. کلیدهای Win + X را فشار دهید → Device Manager
  3. به بخش Ports (COM & LPT) بروید
  4. برد شما باید با نامی مانند "USB-SERIAL CH340 (COM3)" یا "Silicon Labs CP210x (COM4)" نمایش داده شود
  5. اگر نمایش داده نشد، درایور را نصب کنید

نکته مهم برای کاربران ویندوز:

اگر Arduino IDE نمی‌تواند برد را پروگرام کند اما esptool کار می‌کند، ممکن است نسخه esptool داخلی Arduino IDE قدیمی باشد. از Tools → Board → Boards Manager بردها را بروزرسانی کنید.

مشکل رایج: "esptool.py not found" در Arduino IDE

خطا: esptool.py not found A fatal error occurred: esptool.py not found

راه‌حل:

  1. Arduino IDE را کاملاً ببندید و دوباره باز کنید
  2. برد را از Boards Manager حذف و دوباره نصب کنید
  3. اگر مشکل حل نشد، esptool را به صورت دستی نصب کنید (بخش 2)

برای سوالات بیشتر به انجمن مراجعه بفرمایید.