ESP32/Start here/02. Choosing your tools
Your chip
Your language
Start here · 02 of 81

Choosing your tools

Arduino IDE, PlatformIO, or ESP-IDF. They compile the same code for the same chip — what differs is how much of the build you own, and whether any of it is written down.

/esp32/choosing-your-tools · arduino · S3

The three, and who each is for

The same upload, three ways
Arduino IDE
Toolchain
Steps you own
2 of 5
Written to a file
nothing
Arduino IDE. Two decisions, no files, and one button. Every library is one dialog away and nothing is written down — which is fine until you need the same build on another machine.

Arduino IDE if you are starting. Two menus and one button, every library one dialog away, and nothing written down. It is not a toy — plenty of shipped products were built in it — but the configuration lives in your menus, so it cannot travel and it cannot be reviewed.

PlatformIO the moment a project has a second person, a second machine, or a version you need to reproduce. Same compiler underneath; the difference is that platformio.ini says which one.

ESP-IDF when you need something Arduino does not expose — a FreeRTOS setting, a peripheral driver with no wrapper, silicon that shipped last month. It is Espressif's own framework, and Arduino-for-ESP32 is a layer on top of it, so you are not leaving the platform, only the shortcuts.

Arduino C++ or MicroPython

This is a smaller decision than it looks, and it is not the same axis as the one above. Every article here is written in both.

C++ compiles to a binary that boots in milliseconds and uses the RAM you can account for. MicroPython runs an interpreter, so a line you type is a line that runs immediately — which is genuinely faster for exploring a sensor you have never used, and genuinely slower for everything you ship.

Most people end up in Arduino C++ for projects and drop into a MicroPython REPL to work out what a new module is doing. Nothing stops you doing both on the same board on the same afternoon; it is one reflash.

Do not install all three

They each want their own copy of the toolchain, the board packages and the serial driver, and having three means having three that disagree about which core version you are on. Pick one, finish something with it, and change later if the thing you needed was in another.

On your S3
ChipXtensa LX7 · 2 × 240 MHz
Board settingESP32S3 Dev Module
Default I2CSDA 8 · SCL 9
Watch out forThe port vanishes after upload

The code

This is the whole of a PlatformIO project's configuration. Every one of these lines is a decision the Arduino IDE also makes and does not record anywhere.

platformio.ini
[env:esp32dev]
platform = espressif32@6.7.0
board = esp32dev
framework = arduino

monitor_speed = 115200
upload_speed = 921600

lib_deps =
  bblanchon/ArduinoJson@^7.0.4
  knolleary/PubSubClient@^2.8

Commit this file and a colleague gets your build rather than their own — same core version, same library versions, same upload speed. That is the entire pitch.

When it does not work

PlatformIO cannot find my board

The board id in platformio.ini is not the marketing name. "ESP32 Dev Module" is `esp32dev`, an S3 devkit is `esp32-s3-devkitc-1`. Run `pio boards esp32` and copy the id from the first column rather than guessing.

The same sketch builds in one tool and not the other

Almost always different core versions. The IDE installs whatever is newest, PlatformIO installs whatever platform version you pinned. Set the same one in both, or accept that the pinned one is the truth.

MicroPython is missing a module the docs mention

Firmware builds differ per chip and per release. The C6 build gained Wi-Fi 6 flags in 1.25 and the P4 build still has no MIPI drivers. Check `help('modules')` in the REPL before you conclude your code is wrong.

Where this goes next

Pick one and install it. Four things have to be present before a line of code can reach the board, and the errors do not name which one is missing.

Install the toolchain

Edit this page — content/esp32/choosing-your-tools.mdx

Discuss this article

Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.

Browse ESP32 on the forum