NeoPixel Ring 16 with an ESP32 DevKit V1
A 44.5mm ring of 16 individually addressable WS2812B RGB LEDs driven over a single data wire and chainable end to end.
On the ESP32 DevKit V1 the 16-pixel ring takes 5 V from VIN and its data from GPIO13 through a 74AHCT125 buffer and a 470 Ohm resistor. Sixteen pixels is where USB power stops being enough at full brightness, and the buffer is there because the ESP32's 3.3 V data is below what the ring formally asks.
Wiring the NeoPixel Ring 16 to the ESP32 DevKit V1
Pin by pin.
| NeoPixel Ring 16 | ESP32 DevKit V1 | Note |
|---|---|---|
| VCC | VIN | |
| GND | GND | |
| DIN | GPIO13 (D13) | through a 74AHCT125 buffer powered from 5 V, then the 470 Ω resistor: the WS2812B reads a high from 0.7 × VDD (3.5 V), above a 3.3 V pin |
- VCC is on VIN, which gives about 5 V only while the board is powered from USB.
What to know on the ESP32 DevKit V1
- GPIO13's 3.3 V high is below the 0.7 x VDD, about 3.5 V, that the ring's first WS2812B asks on a 5 V supply. The page's wiring therefore runs GPIO13 into a 74AHCT125 buffer fed from 5 V, whose output drives the 470 Ohm resistor.WS2812B datasheet, p. 3
- Sixteen pixels at full white can pull about 960 mA (60 mA each), all of it through VIN and the same USB port that powers the ESP32 and its 240 mA Wi-Fi transmit peaks. Hence the sketch's setBrightness(50).Adafruit NeoPixel Uberguide, Powering NeoPixels; Espressif ESP32 Series Datasheet v5.3, p. 52
- On the ESP32 the Adafruit NeoPixel library sends each frame through the RMT peripheral, built for timed pulse trains, rather than by counting CPU cycles, so the ring keeps its colours while Wi-Fi runs.Espressif ESP32 Series Datasheet v5.3, p. 38
- Put a 1000 µF capacitor across the ring at its VCC and GND. The ring shares the USB 5 V with the ESP32, whose radio pulls 240 mA typical while sending 802.11b, and the capacitor rides out the moments both peak together.ESP32 Series Datasheet v5.3, p. 52; Adafruit NeoPixel Uberguide, best practices
NeoPixel Ring 16 code for the ESP32 DevKit V1
Compiled for esp32:esp32:esp32 on 2026-10-30.
// NeoPixel Ring 16 on ESP32 DevKit V1: wiring and a free simulation at https://www.tinkered.ai/components/neopixel-ring-16/esp32
#include <Adafruit_NeoPixel.h>
#define LED_PIN 13
#define LED_COUNT 16
Adafruit_NeoPixel ring(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
ring.begin();
ring.setBrightness(50); // 50 of 255: full white then draws about 12 mA a pixel (60 mA at full
// brightness). Raise it only with an external 5 V supply.
ring.show();
}
void loop() {
// Rainbow effect
for (long firstPixel = 0; firstPixel < 65536; firstPixel += 256) {
for (int i = 0; i < ring.numPixels(); i++) {
int hue = firstPixel + (i * 65536L / ring.numPixels());
ring.setPixelColor(i, ring.gamma32(ring.ColorHSV(hue)));
}
ring.show();
delay(10);
}
}
NeoPixel Ring 16 on the ESP32 DevKit V1: questions
Does the NeoPixel Ring 16 work with the ESP32's 3.3 V data?
Usually, but outside spec: a 5 V WS2812B reads a high from about 3.5 V (0.7 x VDD, WS2812B datasheet, p. 3), and GPIO13 tops out at 3.3 V. Sixteen pixels fed through the 74AHCT125 buffer the page wires in leave no doubt.
Can the ESP32's VIN pin power the NeoPixel Ring 16?
Only at the reduced brightness the sketch sets. At full white the 16 pixels can draw about 960 mA (Adafruit Uberguide), too much to pull through VIN from USB beside the ESP32. For full brightness, feed the ring from a 5 V supply and join its ground to the DevKit's.
Why does my ESP32 reset when the NeoPixel ring lights up?
The ring and the ESP32 share VIN's USB supply: about 960 mA at full white for the ring (Adafruit Uberguide) on top of the ESP32's Wi-Fi bursts (ESP32 datasheet, p. 52). Lower the brightness or give the ring its own 5 V supply.
Keep going
This guide as plain Markdown. /components/neopixel-ring-16/esp32.md