ESP32-S3 bases/Thirty-six lights/05. Lights that move on their own
Thirty-six lights · 05 of 9

Lights that move on their own

Nine of the thirty-six GPIOs are already busy on the ESP32-S3 before your sketch touches them — the serial port, the native USB socket, the memory inside the module, the BOOT button and the RGB LED — and every one has an LED on the shield. Here is what each does, and which to leave alone.

Before your sketch runs

Plug the board in with nothing uploaded and look at the shield. Most LEDs shimmer or sit half-lit — those are floating, the subject of the previous page. A few are steady from the first instant, and they are the interesting ones.

The lights that move on their own
Just powered on
What is happening
Lit by a pull-up
0, 20, 43, 44
Dark by a pull-down
45, 46
Undecided
30
Before your sketch runs, four LEDs are lit and two are dark on purpose. The chip holds GPIO 0, 43 and 44 up and GPIO 45 and 46 down, and the USB circuit holds 20 up. The other thirty have nothing holding them, so their LEDs do whatever they like until setup() gets to them.

The ESP32-S3's datasheet lists which pins it pulls up or down itself at reset. GPIO 0, 43 and 44 are pulled up, so their LEDs light. GPIO 45 and 46 are pulled down, so theirs stay dark. GPIO 20 has the USB pull-up, and lights too. The shield's inverter inputs do not disturb any of that: the datasheet says these defaults hold with nothing attached or with "an external high-impedance circuit", which is what an inverter input is.

The serial port: 43 and 44

The left-hand USB socket on the ESP32-S3 goes to a USB-serial chip, which talks to the S3 over two wires: GPIO 43 out and GPIO 44 in. A serial line rests HIGH, so both LEDs are normally lit.

Print something and LED 43 flickers dark. Upload a sketch through that socket and LED 44 flickers while the new program arrives. It is the most useful activity light on the board, and both pins are hands off in your own wiring.

The native USB socket: 19 and 20

The right-hand USB socket is wired straight to the S3 on GPIO 19 and GPIO 20. With a cable in that socket, both LEDs flicker while the computer and the board talk. Use either pin for something else and that socket stops working.

The memory: 35, 36 and 37

The kit's ESP32-S3 is an N16R8: 16 MB of flash and 8 MB of PSRAM, the extra memory that large programs and screens need. That PSRAM uses a fast bus inside the module, and GPIO 35, 36 and 37 are three of its lines. They still come out to the header, so the shield still gives them LEDs, which may flicker or glow while a sketch uses memory.

Never drive them. The program is running in that memory.

The two you can use with care: 0 and 48

GPIO 0 is the BOOT button, held HIGH by a resistor on the ESP32-S3. Its LED is lit and goes out while you hold BOOT, which is a quick way to see the shield working without uploading anything. After the board has started, GPIO 0 is an ordinary pin — but anything that holds it LOW at the moment of reset stops your sketch starting.

GPIO 48 is the data line of the RGB LED on the ESP32-S3. Its LED blinks briefly whenever that RGB LED is set. You can use the pin, and the RGB LED will show a colour you did not ask for.

When it does not work

LED 43 flickers whenever my sketch prints

GPIO 43 is the transmit line of the serial port behind the left-hand USB socket. It rests HIGH, so the LED is lit, and each character pulls it LOW in quick bursts. That is the serial port working, and a free activity light.

The Serial Monitor went silent after I used GPIO 43 or 44 in my sketch

Those two pins are the serial link to your computer. Setting either as an output or using it for something else takes the Serial Monitor down, and on the left-hand socket it takes uploads down too. Move that wire to a pin that is not spoken for.

The board crashes as soon as my sketch writes to GPIO 35, 36 or 37

On the N16R8 module in this kit those three pins carry the 8 MB of PSRAM inside the module. Driving one corrupts the memory the program is running in. Use any other GPIO; the shield's LEDs on 35 to 37 are only for watching.

LED 0 went out and I did not change anything

GPIO 0 is the BOOT button, held HIGH by a 10 kΩ resistor on the ESP32-S3. The LED goes out while the button is pressed. If it stays out, something wired to row 0 is pulling it LOW, which also stops the board booting your sketch at the next reset.

The right-hand USB socket stopped working after I used GPIO 19 or 20

Those are that socket's two data wires. Using them as ordinary pins disconnects the socket. Re-upload through the left-hand socket, which uses GPIO 43 and 44 instead, and pick different pins in your sketch.

Where this goes next

All thirty-six, the small marks beside them, and which ones to reach for.

The pins at the edge

Edit this page — content/books/esp32s3-base/lights-that-move-on-their-own.mdx

Community

Questions about this product

See what other owners have asked, and read their solutions.

Ask a question ↗

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.

Browse Modules and blocks on the forum