Skip to main content

Pin Assignment Master Table

This is the single source of truth for all GPIO assignments. Every wiring and firmware document cross-references this table. Resolve any conflicts here before wiring.

Keep this open while wiring

This page is linked in the navbar for quick access.


GPIO Assignments

GPIOSignal NameComponentDirectionNotes
GPIO2FRONTLIGHT_PWME-ink front lightOutLEDC channel 0; duty cycle controls brightness
GPIO3EINK_BUSYE-ink displayInActive HIGH — wait until LOW before sending commands
GPIO4EINK_RSTE-ink displayOutActive LOW; pulse LOW for ≥10 ms on init
GPIO5EINK_DCE-ink displayOutLOW = command, HIGH = data
GPIO6BTN_UPButton 1InInternal pull-up; LOW when pressed
GPIO7BTN_DOWNButton 2InInternal pull-up; LOW when pressed
GPIO8BTN_SELECTButton 3InInternal pull-up; LOW when pressed
GPIO9BTN_BACKButton 4InInternal pull-up; LOW when pressed
GPIO10SPI_CS_DISPLAYE-ink displayOutActive LOW; display is the only SPI device
GPIO11SPI_MOSISPI bus (display only)Out
GPIO12SPI_SCLKSPI bus (display only)Out
GPIO13SPI_MISOSPI bus (display only)In
GPIO15I2S_BCLKMAX98357AOutBit clock
GPIO16I2S_LRCLKMAX98357AOutFrame/word select (WS)
GPIO17I2S_DINMAX98357AOutSerial audio data
GPIO21I2C_SDADS3231 RTC + APDS-9960BidirPull-up resistor on DS3231 breakout board
GPIO18I2C_SCLDS3231 RTC + APDS-9960OutPull-up resistor on DS3231 breakout board
GPIO35LED_REDRed indicator LEDOutActive HIGH; 220 Ω series resistor to GND
GPIO36LED_GREENGreen indicator LEDOutActive HIGH; 100 Ω series resistor to GND
GPIO37LED_BLUEBlue indicator LEDOutActive HIGH; 100 Ω series resistor to GND
GPIO38BTN_SNOOZEButton 5 + ATtiny PB1InInternal pull-up + 10 kΩ external pull-up; LOW when pressed; shared with ATtiny backup circuit
GPIO39BTN_DISMISSButton 6 + ATtiny PB2InInternal pull-up + 10 kΩ external pull-up; LOW when pressed; shared with ATtiny backup circuit
GPIO40PROXIMITY_INTAPDS-9960InActive LOW when proximity count exceeds threshold; 10 kΩ pull-up to 3.3V required; interrupt-driven
GPIO41USB_PRESENTVoltage divider (2× 100 kΩ)InHIGH (~2.5 V) when USB connected; LOW when USB absent
GPIO42RTC_INTDS3231 SQW + ATtiny PB3/INT0InActive LOW alarm interrupt; 10 kΩ pull-up to 3.3 V required; shared with ATtiny backup circuit

Power Rails

PinVoltageConnected To
5V (VBUS)5 VUSB-C VBUS → MAX98357A VIN
3V33.3 VDS3231 VCC, APDS-9960 VCC, E-ink adapter VCC
GND0 VAll component grounds (common reference)

The system 5V rail is sourced directly from USB-C VBUS. The MAX98357A needs 5 V for its internal amplifier stage; everything else runs at 3.3 V. There is no battery-backed 5V rail — when USB power is removed, the ESP32 shuts down. The discrete AA backup circuit (ATtiny85 + piezo) operates independently from its own 3V supply.


Bus Overview


Pins to Avoid

The ESP32-S3 has several pins with special behaviour on boot. Do not use these for buttons or other general purposes:

GPIOWhy to avoid
GPIO0Strapping pin — LOW at boot enters download mode
GPIO19USB D− (used for USB OTG on some boards)
GPIO20USB D+ (used for USB OTG on some boards)
GPIO45Strapping pin — controls VDD_SPI voltage
GPIO46Strapping pin — controls ROM log output
GPIO43UART0 TX (used for serial console / flashing)
GPIO44UART0 RX (used for serial console / flashing)