PrettyPins PDF on GitHub.

Power

There are two ways you can power the Feather ESP32-S3, as well as other related pins.

  • USB-C port - This is used for both powering and programming the board. You can power it with any USB C cable. When USB is plugged in it will charge the LiPoly battery.
  • LiPoly connector/charger - You can plug in any 250mAh or larger 3.7/4.2V LiPoly battery into this JST 2-PH port to both power your Feather and charge the battery. The battery will charge from the USB power when USB is plugged in. If the battery is plugged in and USB is plugged in, the Feather will power itself from USB and it will charge the battery up.
  • CHG LED - When the battery is charging, the yellow CHG LED will be lit. When charging is complete, the LED will turn off. If there's no battery plugged in, the CHD LED may blink rapidly - this is expected!
  • GND - This is the common ground for all power and logic.
  • BAT - This is the positive voltage to/from the 2-pin JST jack for the optional LiPoly battery.
  • USB - This is the positive voltage to/from the USB C jack, if USB is connected.
  • EN - This is the 3.3V regulator's enable pin. It's pulled up, so connect to ground to disable the 3.3V regulator.
  • 3.3V - These pins are the output from the 3.3V regulator, they can supply 500mA peak.

TFT Display

On the front of the board is a color 1.14" IPS TFT with 240x135 pixels. It's a bright and colorful display with ST7789 chipset that can be viewed at any angle.

There is a power pin that must be pulled high for the display to work. This is done automatically by CircuitPython and Arduino. The pin is available in CircuitPython and in Arduino as TFT_I2C_POWER.

If you run into I2C or TFT power issues on Arduino, ensure you are using the latest Espressif board support package. If you are still having issues, you may need to manually pull the pin HIGH in your code.

ESP32-S3 WiFi Module

This is the ESP32-S3 module.

The ESP32-S3 is a highly-integrated, low-power, 2.4 GHz Wi-Fi/BLE System-on-Chip (SoC) solution that has built-in native USB as well as some other interesting new technologies like Time of Flight distance measurements and AI acceleration. With its state-of-the-art power and RF performance, this SoC is an ideal choice for a wide variety of application scenarios relating to the Internet of Things (IoT)wearable electronics, and smart homes.

The Feather ESP32-S3 has a dual-core 240 MHz chip, so it is comparable to ESP32's dual-core. However, there is no Bluetooth Classic support, only Bluetooth LE. This chip is a great step up from the earlier ESP32-S2! This ESP32-S3 mini-module we are using on the Feather comes with 4 MB flash and 2 MB PSRAM, as well as 512KB of SRAM, so it's perfect for use with CircuitPython support or any time massive buffers are needed: for fast memory access use SRAM, for slower-but-roomier access use PSRAM. It's also great for use in ESP-IDF or with Arduino support.

The 4 MB of flash is inside the module and is used for both program firmware and filesystem storage. For example, in CircuitPython, we have 3 MB set aside for program firmware (this includes two OTA option spots as well) and a 1MB section for CircuitPython scripts and files.

LC709203 Battery Monitor

This battery monitor does not currently work with CircuitPython! The issue is being tracked here: https://github.com/adafruit/circuitpython/issues/6311

The Adafruit LC709203F LiPoly / LiIon Fuel Gauge and Battery Monitor reports the voltage and charge percent over I2C. Connect it to your Lipoly or LiIon battery and it will let you know the voltage of the cell, and it does the annoying math of decoding the non-linear voltage to get you a valid percentage as well!

The battery monitor is available over I2C on address 0x0B. Our Arduino or CircuitPython/Python library code allows you to to set the pack size (mAh of the battery, this helps tune the calculation) and read the voltage and percentage whenever you like. There is no pin on the Feather ESP32-S3 that returns battery voltage, but this I2C monitor makes it super simple to get that data!

There is a power pin that must be pulled high for the sensor to work. This is done automatically by CircuitPython and Arduino. The pin is available in CircuitPython and in Arduino as TFT_I2C_POWER.

If you run into I2C or TFT power issues on Arduino, ensure you are using the latest Espressif board support package. If you are still having issues, you may need to manually pull the pin HIGH in your code.

BME280 Temperature, Humidity and Pressure Sensor

The ESP32-S3 TFT Feather comes with an unpopulated space for a BME280 Temperature, Humidity and Barometric Pressure Sensor.

There is currently no BME280 sensor shipped on the ESP32-S3 TFT Feather - only a space for it!

The sensor connects over I2C (at address 0x77), and provides immediate ambient weather sensing. It is rated for measuring humidity with ±3% accuracy, barometric pressure with ±1 hPa absolute accuracy, and temperature with ±1.0°C accuracy. Because pressure changes with altitude, and the pressure measurements are so good, you can also use it as an altimeter with  ±1 meter or better accuracy!

There is a power pin that must be pulled high for the sensor to work. This is done automatically by CircuitPython and Arduino. The pin is available in CircuitPython and in Arduino as TFT_I2C_POWER.

If you run into I2C or TFT power issues on Arduino, ensure you are using the latest Espressif board support package. If you are still having issues, you may need to manually pull the pin HIGH in your code.

Logic Pins

These are the logic pins that can be used to connect FeatherWings, sensors, servos, LEDs and more!

No pins are shared, and no pins are 'special' bootstrapping pins, so you can use any of them for input, or output, will pullups or pulldowns, without worry.

ESP32 chips allow for 'multiplexing' of almost all signals so it isn't like some pins can do PWM and others can. You can connect any of the available PWM channels, I2S channels, UART, I2C or SPI ports to any pin. There are some exceptions....

There are six analog pins.

  • A0 thru A5 can also be analog inputs. A0 thru A4 are on ADC2, and A5 is on ADC1.

The SPI pins are on the ESP32-S3 high-speed peripheral. You can set any pins to be the low-speed peripheral but you won't get the speedy interface!

  • SCK - This is the SPI clock pin.
  • MOSI - This is the SPI Microcontroller Out / Sensor In pin.
  • MISO - This is the SPI Microcontroller In / Sensor Out pin.

The UART interface.

  • RX - This is the UART receive pin. Connect to TX (transmit) pin on your sensor or breakout.
  • TX - This is the UART transmit pin. Connect to RX (receive) pin on your sensor or breakout.

The I2C interface. This is shared by the STEMMA QT connector.

  • SCL - This is the I2C clock pin. There is a 5k pullup on this pin.
  • SDA - This is the I2C data pin. There is a 5k pullup on this pin.
  • In CircuitPython, you can use the STEMMA connector with board.SCL and board.SDA, or board.STEMMA_I2C().
  • There is an I2C power pin that needs to be pulled high for the STEMMA QT connector, the LC709203, and the BME280 sensor (if present) to work properly. CircuitPython and Arduino do this automatically. It is available in CircuitPython and Arduino as TFT_I2C_POWER.

The digital pins.

  • D5-D6, D9-D13 - These are digital pins. D5, D6, D9 and D10 are on ADC1. D11-D13 are on ADC2.

Check the ESP32-S3 datasheet or the PrettyPins diagram above for the ADC channel names for each pin if you need em!

If you run into I2C or TFT power issues on Arduino, ensure you are using the latest Espressif board support package. If you are still having issues, you may need to manually pull the pin HIGH in your code.

NeoPixel and Red LED

  • NeoPixel LED - This addressable RGB NeoPixel LED, labeled Neo on the board, works both as a status LED (in CircuitPython and the bootloader), and can be controlled with code. It is available in CircuitPython as board.NEOPIXEL, and in Arduino as PIN_NEOPIXEL.
  • There is a NeoPixel power pin that needs to be pulled high for the NeoPixel to work. This is done automatically by CircuitPython and Arduino. It is available in CircuitPython and Arduino as NEOPIXEL_POWER.
If you run into NeoPixel power issues on Arduino, ensure you are using the latest Espressif board support package. If you are still having issues, you may need to manually pull the pin high in your code.
  • Red LED - This little red LED, labeled #13 on the board, is on or blinks during certain operations (such as pulsing when in the bootloader), and is controllable in code. It is available in CircuitPython as board.LED, and in Arduino as LED_BUILTIN or 13.

STEMMA QT

This JST SH 4-pin STEMMA QT connector breaks out I2C (SCL, SDA, 3.3V, GND). It allows you to connect to various breakouts and sensors with STEMMA QT connectors or to other things using assorted associated accessories. It works great with any STEMMA QT or Qwiic sensor/device. You can also use it with Grove I2C devices thanks to this handy cable.

There is a power pin that must be pulled high for the STEMMA QT connector to work. This is done automatically by CircuitPython and Arduino. The pin is available in CircuitPython and in Arduino as TFT_I2C_POWER.

If you run into I2C or TFT power issues on Arduino, ensure you are using the latest Espressif board support package. If you are still having issues, you may need to manually pull the pin HIGH in your code.

Buttons

There are two buttons on the ESP32-S3 TFT Feather.

  • Reset button - This button restarts the board and helps enter the bootloader. You can click it once to reset the board without unplugging the USB cable or battery. Tap once, and then tap again while the NeoPixel status LED is purple to enter the UF2 bootloader (needed to load CircuitPython).
  • The RST pin is can be used to reset the board. Tie to ground manually to reset the board.
  • Boot button - This button can be used as an input, or to put the board into ROM bootloader mode. It is available in CircuitPython as board.BUTTON, and Arduino as 0. To enter ROM bootloader mode, hold down DFU button while clicking reset button mentioned above. When in the ROM bootloader, you can upload code and query the chip using esptool.

Debug

This is the Debug TX (DBG) pin. This is the hardware UART debug pin. You can connect this to a USB console cable in order to read the debug output from the ESP32 IDF. You can also read debug info from the bootloader. This is useful if you are writing software and need to see the low level debug output.

This is not where default Serial.print() or CircuitPython print() outputs go - those will go through the USB port instead!

This guide was first published on Aug 16, 2022. It was last updated on Sep 18, 2023.

This page (Pinouts) was last updated on Aug 09, 2022.

Text editor powered by tinymce.