The Metro ESP32-S3 is packed with features. It's time to take a tour!
PrettyPins PDF on GitHub.
There's a lot of power options available on the Metro ESP32-S3, and they're a little different than most Metro/Arduinos.
Power Inputs
You have three power input options:
-
USB C port - This is used for both powering and programming the board. You can power it with any USB C cable and will request 5V from a USB C PD.
When USB is plugged in it will charge the Lipoly battery. If there is no battery attached, the yellow LED will flicker (it's looking for a battery!) -
DC barrel jack - The DC Jack is a 5.5mm/2.1mm center-positive DC connector, which is the most common available. Provide about 6V-12V here to power the Metro. Great for when you have a wall adapter power supply. Don't use a center-negative adapter, it won't work (the on green LED will not light)
When DC power is plugged in it will charge the Lipoly battery. If there is no battery attached, the yellow LED will flicker (it's looking for a battery!)
If both DC and USB are plugged in, the metro will power itself & recharge the battery from whichever input is highest. -
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 Metro and charge the battery. The battery will charge from the USB or DC power (whichever is plugged in and higher voltage), even if the board is powered off via the switch.
If the battery is plugged in and USB or DC is plugged in, the Metro will power itself from USB or DC and it will charge the battery up.
When the battery is charging, the yellow CHG LED will be lit. When charging is complete, the LED will turn off.
Power Control
-
On/Off switch - This switch controls power to the board. If you plug in your board and nothing happens, make sure the switch is flipped to "ON"!
When switched off it will disable the 3.3V power which turns off the ESP32-S3, but it does not turn off the NeoPixel or the VHI or VIN pins (see below) and will leave the battery charging.
Power Outputs
- 3.3 - This is the output pin from the 3.3V regulator, you can grab up to 400mA from this regulator for accessories, it's also used by the ESP32-S3 which can have spiky current draw.
-
VHI - This pin is usually marked 5V on Arduinos, and when USB or DC is plugged in, it will in fact provide 5V. However, if you have the Metro on LiPo battery power, it will be powered from the battery and thus between 3.7V to 4.2V.
When powered from USB or DC it is regulated to 5V, when powered from battery only, it's not regulated, but it is high-current, great for driving servos and NeoPixels. - GND - This is the common ground for all power and logic.
- VIN - This is the higher of the DC jack or USB voltage. So if the DC jack is plugged in and 9V, VIN is 9V. If only USB connected, this will be 5V.
Power Indicator LEDs
- ON - The small green LED next to the NeoPixel is the ON LED. It is lit green when the board is on.
- CHG - Below the battery connector is the CHG LED. While a battery is connected, is lit up amber while charging, and turns off once charging is complete. While a battery is not connected, this LED may flicker amber. This is normal! It is looking for the battery.
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.
This module includes a dual-core 240 MHz Tensilica processor, so it is comparable to ESP32's dual-core. However, there is no Bluetooth ClassicĀ support, only Bluetooth LE. This ESP32-S3 mini-module we are using on the Metro comes with massive 16 MB flash and 8Ā MB PSRAM, as well as lots ofĀ 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.
These are the logic pins that can be used to connect shields, 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, with 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 are the 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 digital pins.
- D2-D13 - These are digital pins. D2-D10 are on ADC1. D11-D13 are on ADC2.
The I2C interface. This is shared by the STEMMA QT connector.
- SCL - This is the I2C clock pin. There is a 10k pullup on this pin.
- SDA - This is the I2C data pin. There is a 10k pullup on this pin.
Check the ESP32-S3 datasheet or the PrettyPins diagram above for the ADC channel names for each pin if you need them!
The MAX17048 LiPoly Battery Monitor, located below the 3.7V Lipoly label on the board silk, 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 0x36.
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 Metro ESP32-S3 that returns battery voltage, but this I2C monitor makes it super simple to get that data!
To access the SD card, use the following pins:
- SCK/GPIO39 - This is the SPI clock pin.
- MOSI/GPIO42 - This is the SPI Microcontroller Out / Sensor In pin.
- MISO/GPIO21 - This is the SPI Microcontroller In / Sensor Out pin.
- SD_CS/GPIO45 - This is the chip select pin.
-
NeoPixel - Next to the JTAG port is an addressable RGB NeoPixel LED labeled Neo on the board silk. This is controllable in CircuitPython and Arduino using the NeoPixel libraries, and is also used as a status LED in CircuitPython. You can access it with
board.NEOPIXEL
in CircuitPython, andPIN_NEOPIXEL
in Arduino. -
L LED - To the right of the on LED is the little red LED labeled L on the board silk. It is available for blinky goodness, as well as showing status such as pulsing while in the UF2 bootloader. You can access this LED with
board.LED
in CircuitPython, andLED_BUILTIN
in Arduino.
On the back of the board, you'll find the NeoPixel power jumper, labeled Neo Pwr on the board silk.
Simply "turning off" the NeoPixel LED does not halt power being sent to it. Therefore, for low-power applications, you may wish to cut this jumper to cut off the power to the LED.
To reverse the process, simply solder the jumper closed again.
On the top-left corner of the Metro is the JST SH 4-pin STEMMA QT connector, labeled QT I2C on the board silk. It breaks out I2C (SCL, SDA, 3.3V, GND).
It is accessible in CircuitPython as board.STEMMA_I2C()
, and in Arduino using SCL
/GPIO48
and SDA
/GPIO47
.
This connector 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.
- Reset - The Reset button, located in the top-left corner of the board and labeled Reset on the board silk, is used to reset the board and enter the UF2 bootloader.
- Boot - The Boot button, located next to the Metro label and labeled Boot on the board silk, is used to enter the ROM bootloader.
- RST - There are two RST pins. The first is located on the bottom row of pins. The second is in the lower-left corner of the 6-pin ICSP header. Tie a RST pin to ground to reset the board manually.
There are two debug options on the Metro ESP32-S3: hardware UART and JTAG.
UART Debug
The hardware UART debug port has two broken out pins, labeled De-bug on the board silk. You can connect these to a USB console cable in order to read the debug output from the ESP32 IDF. This is useful if you are writing software and need to see the low level debug output without using JTAG debugging.
This is not where default Serial.print()
or CircuitPython print()
outputs go, because those go through the USB port instead!
- TXD0 - The pin on the left (closest to the USB connector) is the TX pin.
- RXD0 - The pin on the right (furthest from the USB connector) is the RX pin.
JTAG Debug
If you'd like to do more advanced development, trace-debugging, or not use the bootloader, we have the JTAG interface available via a 2x5 1.27mm pitch connector. A JLink or similar is needed to perform debugging.

Page last edited March 08, 2024
Text editor powered by tinymce.