PlatformIO Setup
PlatformIO provides an IDE-centric development experience with Arduino or ESP-IDF framework support.
Installation
- Install VS Code
- Open Extensions (
Ctrl+Shift+X) - Search for “PlatformIO IDE”
- Install and restart VS Code
# Using pippip install platformio
# Using uvuv tool install platformioProject Setup
-
Create new project
- Click PlatformIO icon in sidebar
- Select “New Project”
- Name:
esp32s3-devkitc - Board:
esp32-s3-devkitc-1 - Framework: Arduino or ESP-IDF
Terminal window mkdir esp32s3-project && cd esp32s3-projectpio init -b esp32-s3-devkitc-1 -O "framework=arduino" -
Configure for N16R8
Edit
platformio.ini:[env:esp32-s3-devkitc-1]platform = espressif32board = esp32-s3-devkitc-1framework = arduino; Memory configuration for N16R8board_build.flash_mode = qioboard_build.psram_type = opiboard_upload.flash_size = 16MBboard_build.arduino.memory_type = qio_opi; Optional: Upload and monitorupload_speed = 921600monitor_speed = 115200; Optional: Enable PSRAM in Arduinobuild_flags =-DBOARD_HAS_PSRAM-mfix-esp32-psram-cache-issue
N16R8 Memory Configuration
Complete platformio.ini for N16R8
[env:esp32-s3-devkitc-1-n16r8]platform = espressif32board = esp32-s3-devkitc-1framework = arduino
; === Flash Configuration ===board_build.flash_mode = qioboard_upload.flash_size = 16MB
; === PSRAM Configuration (Octal) ===board_build.psram_type = opiboard_build.arduino.memory_type = qio_opi
; === Build Flags ===build_flags = -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1
; === Upload Settings ===upload_speed = 921600upload_port = /dev/ttyUSB0
; === Monitor Settings ===monitor_speed = 115200monitor_port = /dev/ttyUSB0monitor_filters = esp32_exception_decoder
; === Debug (optional) ===debug_tool = esp-builtindebug_init_break = tbreak setupUsing PSRAM in Code
#include <Arduino.h>
void setup() { Serial.begin(115200);
// Check PSRAM availability if (psramFound()) { Serial.printf("PSRAM Size: %d bytes\n", ESP.getPsramSize()); Serial.printf("Free PSRAM: %d bytes\n", ESP.getFreePsram()); } else { Serial.println("PSRAM not found!"); }}
void loop() { // Allocate in PSRAM uint8_t* buffer = (uint8_t*)ps_malloc(1024 * 1024); // 1MB if (buffer) { Serial.println("Allocated 1MB in PSRAM"); free(buffer); } delay(5000);}USB Configuration
The DevKitC-1 has two USB ports. Configure based on your needs:
USB-CDC (Native USB as Serial)
build_flags = -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1USB-OTG (Custom USB Device)
build_flags = -DARDUINO_USB_MODE=0UART Only (CP2102N)
build_flags = -DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT=0Common Libraries
Add to platformio.ini:
lib_deps = ; NeoPixel for RGB LED adafruit/Adafruit NeoPixel@^1.12.0
; FastLED alternative ; fastled/FastLED@^3.6.0
; Wi-Fi Manager tzapu/WiFiManager@^2.0.16
; MQTT knolleary/PubSubClient@^2.8
; HTTP Client ; (included in ESP32 Arduino core)
; JSON bblanchon/ArduinoJson@^7.0.0
; AsyncWebServer me-no-dev/AsyncTCP@^1.1.1 me-no-dev/ESPAsyncWebServer@^1.2.6Build and Upload
- Build: Click checkmark in bottom toolbar or
Ctrl+Alt+B - Upload: Click arrow in bottom toolbar or
Ctrl+Alt+U - Monitor: Click plug icon or
Ctrl+Alt+S
# Buildpio run
# Uploadpio run -t upload
# Monitorpio device monitor
# All in onepio run -t upload && pio device monitorPartition Tables
For 16MB flash, consider a custom partition table:
Create partitions.csv:
# Name, Type, SubType, Offset, Size, Flagsnvs, data, nvs, 0x9000, 0x5000,otadata, data, ota, 0xe000, 0x2000,app0, app, ota_0, 0x10000, 0x300000,app1, app, ota_1, 0x310000, 0x300000,spiffs, data, spiffs, 0x610000, 0x9F0000,Add to platformio.ini:
board_build.partitions = partitions.csvTroubleshooting
PSRAM Not Detected
- Verify
board_build.psram_type = opi - Check
board_build.arduino.memory_type = qio_opi - Add
-DBOARD_HAS_PSRAMto build flags
Upload Fails
; Try slower speedupload_speed = 460800
; Or use explicit portupload_port = /dev/ttyUSB0Serial Monitor Shows Garbage
; Match baud rate to your codemonitor_speed = 115200
; Add decoder for crash tracesmonitor_filters = esp32_exception_decoderBuild Errors After Update
pio pkg updatepio run -t cleanpio runESP-IDF Framework in PlatformIO
For full ESP-IDF access:
[env:esp32-s3-devkitc-1-idf]platform = espressif32board = esp32-s3-devkitc-1framework = espidf
board_build.flash_mode = qioboard_upload.flash_size = 16MBboard_build.psram_type = opiNext Steps
- First Blink Tutorial - RGB LED control
- USB Serial Guide - Understanding USB options
- GPIO Reference - Pin capabilities