How a pin lights its LED
An LED needs current, and current drawn from a signal pin changes the signal. The shield puts an inverter chip between each pin and its LED, so the pin drives a tiny CMOS input and the light is paid for by the 3.3 volt rail.
Thirty-six lights on your signals
An LED beside every GPIO is useful and slightly suspicious. An LED needs current, current taken from a signal line changes the signal, and a shield that quietly loaded thirty-six pins would break the I²C bus you were trying to watch.
So the LED is not on your pin. Each GPIO goes to the input of one channel of an SN74HC04, a chip with six inverters in it, and the LED hangs off that channel's output. Six chips, six channels each: thirty-six LEDs.
Where the current comes from
The LED's top end goes through a 5.1 kΩ resistor to the 3.3 volt rail. Its bottom end goes to the inverter's output. Current flows when that output is LOW — and an inverter's output is LOW when its input is HIGH. That is why a HIGH pin lights its LED.
The pin itself only has to drive the inverter's input. TI's datasheet puts that at no more than 1 µA of leakage and 10 pF of capacitance: less than a short jumper wire adds. So the pin sees almost nothing, and the quarter of a milliamp that lights the LED comes out of the rail, not out of your signal.
Why HIGH is always HIGH enough
A chip decides HIGH by comparing its input against its own supply. The inverters here run from the same 3.3 volt rail as the ESP32-S3, and the S3 guarantees its HIGH is at least 80 % of that rail. The HC04 needs about 70 % at this supply. Same rail, and a margin in the right direction, so every lit pin lights its LED.
That is a difference from the classic ESP32 PinPulse base, which runs its inverters from 5 V and sits much closer to the edge.
What it means in practice
- An I²C bus, an SPI clock, a serial line and a WS2812 data line all keep working with the LEDs on. You can watch them, as a flicker.
- A pin set as an input shows what the outside world is doing to it. Wire a
button from GPIO 4 to ground, set the pin to
INPUT_PULLUP, and its LED goes out while the button is pressed. - An LED shows a level, not a speed. A 1 kHz PWM signal looks like a steady half-bright LED, because the light is changing faster than an eye can follow.
When it does not work
Check the row, not the column: the LED beside a number belongs to that number. If it really is the right row, the pin is not LOW — something else is driving it, or pinMode was never called for it and it is floating. Print digitalRead of the pin to see what the chip thinks.
Each one runs at about a quarter of a milliamp through its 5.1 kΩ resistor. That is enough to read indoors and little enough that all 36 together draw around 10 mA. They are indicators, not lighting, and a bright room or direct sunlight washes them out.
It adds one CMOS input to the line, which TI rates at 10 pF at most — about what a few centimetres of jumper wire adds. SPI at a few megahertz on short wires is unaffected; a long ribbon of wires is a bigger load than the shield is.
No. The LEDs are driven by the inverter chips, not wired to anything you can reach, and the chips are driven by the GPIOs. To light something, wire it to the GPIO's pin or socket like any other load.
Edit this page — content/books/esp32s3-base/how-a-pin-lights-its-led.mdx
Questions about this product
See what other owners have asked, and read their solutions.
ESP32-S3 N16R8 PinPulse Shield, 36 GPIO LEDs
Loading discussions…
Discuss this article
Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.