ESP32-S3-DevKitC-1 First Blink: Why the Official ESP-IDF Example Says GPIO38 (and When It's 48)
Build Espressif's official esp-idf blink example on an ESP32-S3-DevKitC-1: the on-board LED is an addressable RGB LED on GPIO38 (v1.1) or GPIO48 (v1.0), plus variant, USB-port and Octal-PSRAM pin pitfalls. Includes an affiliate-disclosed eBay board link.

ESP32-S3-DevKitC-1 First Blink: Why the Official ESP-IDF Example Says GPIO38 (and When It's 48)
The quickest honest test of a new ESP32-S3-DevKitC-1 is the blink example that ships inside Espressif's own SDK, not a random sketch. It is also where most people get their first "my board is dead" scare, because the on-board LED is not a plain LED and its pin changed between board revisions.
Everything below comes from open-source, Espressif-maintained sources:
- espressif/esp-idf (~19.4k★, Apache-2.0), the official IoT Development Framework
examples/get-started/blink, the sample this post builds- ESP32-S3-DevKitC-1 v1.1 user guide, for the hardware facts
Disclosure: further down I link one eBay listing for the board. That link is an eBay affiliate link (customid=blog01); if you buy through it I may earn a commission at no extra cost to you. Check the listing yourself before you pay.
The two facts that matter before you flash anything
1. The LED is an addressable RGB LED (WS2812-style), not a GPIO LED. Toggling the pin high and low does nothing visible. The blink example handles this with Espressif's led_strip component (pulled in by main/idf_component.yml as espressif/led_strip: "^3.0.0").
2. The LED pin depends on the board revision. The example's own sdkconfig.defaults.esp32s3 says it plainly:
ini
CONFIG_BLINK_LED_STRIP=y
## ESP32-S3-DevKitC v1.1 uses GPIO38 for the on-board LED
## ESP32-S3-DevKitC v1.0 uses GPIO48 for the on-board LED
CONFIG_BLINK_GPIO=38
So on an older v1.0 board, or on many third-party "ESP32-S3 N16R8" clones that copied the v1.0 layout, the default build runs fine, prints Turning the LED ON!, and the LED stays dark. Nothing is broken; you just need GPIO48.
Pick the right variant
The v1.1 user guide lists several part numbers. The ones you will usually see:
| Part number | Module | Flash | PSRAM |
|---|---|---|---|
| ESP32-S3-DevKitC-1-N8R8 | ESP32-S3-WROOM-1-N8R8 | 8 MB | 8 MB |
| ESP32-S3-DevKitC-1U-N8R8 | ESP32-S3-WROOM-1U-N8R8 (external antenna) | 8 MB | 8 MB |
| ESP32-S3-DevKitC-1-N32R16V | ESP32-S3-WROOM-2-N32R16V | 32 MB | 16 MB |
| ESP32-S3-DevKitC-1-N8 / N8R2 | WROOM-1 variants | 8 MB | none / 2 MB (both marked EOL) |
One more note from the same guide: on boards with Octal SPI flash/PSRAM modules (for example the R8 and WROOM-2 variants), GPIO35, GPIO36 and GPIO37 are used internally. Don't wire your own peripherals to them.
The board I'd point you to
If you still need a board, this is the listing I checked while writing: ESP32-S3-DevKitC-1 (N8R8 / N16R8 / N32R16V variants) on eBay (affiliate link).
When I opened it on Oct 31, 2026, the item specifics listed Brand: Espressif, condition was New, it shipped from the United States (Wilmington), returns were accepted for 30 days, and the seller had 99.7% positive feedback. The page showed US $26.97 before shipping. It is a multi-variant listing, so pick the variant you actually want (N8R8 is the safe default for most projects) and check that the price and the photo match it. Shipping cost depends on where you are, so read it on the listing before checkout.
Whichever seller you buy from, check two things on arrival: the module label (it should say ESP32-S3-WROOM-1 or WROOM-2 with the flash/PSRAM code you paid for) and the board revision on the silkscreen, because that decides GPIO38 versus GPIO48 below.
1) Install ESP-IDF
Follow Espressif's Get Started guide for your OS (the installer or install.sh plus export.sh). When it is done, idf.py --version should print a version.
2) Copy the example and set the target
bash
cp -r "$IDF_PATH/examples/get-started/blink" ~/s3-blink
cd ~/s3-blink
idf.py set-target esp32s3
set-target is what makes the S3 defaults above apply. Skip it and you are building for the wrong chip.
3) Check the LED settings
bash
idf.py menuconfig
Under Example Configuration:
- Blink LED type:
LED strip - LED strip backend peripheral:
RMT(the S3 has an RMT peripheral;SPIalso works) - Blink GPIO number:
38for a v1.1 board,48for a v1.0 board or a clone whose LED stays dark
The revision is usually printed on the PCB silkscreen. If you're not sure, try 38 first, then 48.
4) Pick the right USB port, then flash
The DevKitC-1 has two USB ports. Per the user guide, the USB-to-UART port goes through a bridge chip and is the default for flashing and serial logs; the ESP32-S3 USB port is the chip's native USB (OTG, JTAG debugging). Start with USB-to-UART:
bash
idf.py -p /dev/ttyUSB0 flash monitor # macOS: /dev/cu.usbserial-* Windows: COM3
If flashing won't start, hold Boot, tap Reset, release Boot to force download mode. Use a data cable; charge-only cables are the most common fake "dead board". Exit the monitor with Ctrl-].
Expected output, from the example README:
text
I (315) example: Example configured to blink addressable LED!
I (325) example: Turning the LED OFF!
I (1325) example: Turning the LED ON!
Troubleshooting in one table
| Symptom | Most likely cause | Fix |
|---|---|---|
| Logs say ON/OFF, LED dark | Wrong LED pin for your revision | Set Blink GPIO number to 48 (or 38) |
LED dark, type is GPIO |
Addressable LED driven as plain GPIO | Switch to LED strip |
| Wrong colour | LED colour order differs by model | Adjust led_strip_set_pixel() values, as the README notes |
| No serial port appears | Charge-only cable or wrong port | Swap cable; use the USB-to-UART port |
| Odd crashes after wiring parts | Using GPIO35–37 on an Octal module | Move to other pins |
Takeaway
When a new dev board seems dead, read the vendor's own example config before you blame the hardware. For the ESP32-S3-DevKitC-1, the answer to "why won't it blink" is written in one comment in esp-idf: GPIO38 on v1.1, GPIO48 on v1.0.
Affiliate disclosure: the eBay link above is an affiliate link (customid=blog01). Prices, stock and seller details change; I describe the listing as I saw it on Oct 31, 2026.