The FeatherS2 is a powerhouse!

16 MB of Flash means you'll never run out of space for code or storage.

8 MB of SPI based external RAM - Insane!

2x 3.3V Regulators? Really?

Yup! The first one is for the general operation of the board and the ESP32-S2, RAM and Flash.

The second LDO is for you to use to connect external 3V3 modules, sensors and peripherals, and the APA102 RGB LED, and it has programmable EN control tied to GPIO21 + it’s connected to the deep sleep capabilities of the S2, so if the S2 goes into deep sleep, the 2nd LDO is automatically shut down for you!

Both regulators are ultra low noise and have ultra low quiescent current, and both support a maximum of 700mA output.


The FeatherS2 uses the new ESP32-S2 microcontroller from Espressif. It's one of their new generation of Sx MCUs that has the newer Xtensa LX7 core running at 240MHz, a RISC-V ultra low power co-processor, WiFi and built in USB. It's pretty slick!

Code & Schematic


The FeatherS2 ships with the latest version of CircuitPython 6 that supports the ESP32-S2.

It also now ships with the UF2 bootloader, so you can easily update your FeatherS2 with the latest CircuitPython firmware, whenever you desire.

Just plug your FeatherS2 into your computer and it will appear in your filesystem as a USB flash drive! Just copy your code over, or edit your code directly on the drive. Coding a microcontroller has never been easier!

As newer versions of CircuitPython are released, you are able to update as you require from circuitpython.org

If you need to grab the shipping CircuitPython code that comes with the FeatherS2,
you can grab the latest here

Shape Shape Shape Shape Shape

There is also ESP-IDF and Arduino support if you prefer coding in C++.

NOTE: To be able to use any ESP32-S2 board with the Arduino IDE you will need to make sure you install the latest ESP32 Arduino Core (2.0.0 or later)

If you have not already setup your Arduino IDE environment to work with ESP32, please follow the official Espressif ESP32 Arduino Core instructions to install it.

Flashing MicroPython on to your FeatherS2

If you would like to put MicroPython on your FeatherS2, please follow these latest instructions.

FeatherS2 Schematic



The red power LED doesn't light up when running off battery

That is by design! The power and charge LEDs and corresponding 2K resistors drain the battery, so they have been isolated to the 5V power domain, so they will only light up and draw power when the board is either being power by the USB plug, or by a 5V power source connected to the 5V header pin.

The orange charge LED blinks when no battery is connected

That is the correct behaviour! The charge IC can’t tell the difference between a full battery and no battery, so it cycles between trying to charge and not charge.

Sometimes my battery doesn't start charging when I plug it in

If you have 5V power connected to your FeatherS2 before you plug your battery in, sometimes it might not start charging. Just unplug and re-plug in the 5V source and it should start charging correctly. This is a common issue with PMICs (Power Management ICs).

How do I read the battery voltage?

The FeatherS2 doesn't have a built in way of reading the battery voltage, sorry!

Devices powered from the 2nd LDO power down when the ESP32 goes into deep sleep

That's correct! The second LDO is tied to both GPIO21 and VDD for the Flash/PSRAM, so when the ESP32 goes into deep sleep, it automatically shuts down the LDO for you, so you don't have to remember to do it yourself.

I'm trying to control the RGB LED but it wont light up

The RGB LED (APA102) is powered by the second LDO. You need to enable the second LDO power via GPIO21 to be able to use the RGB LED. It's controlled this way to have the RGB LED power automatically shutdown when the ESP32-S2 MCU goes into deep sleep.

RX & TX pins are not coupled with the internal USB, what are they used for?

RX & TX are still connected to UART0, and still used with the USB when in CDC (download mode). Otherwise, you can use them as UART0 when connecting a module that uses serial, or use them as general IO, it's up to you.

How can I flash my FeatherS2 in Arduino or IDF?

If you currently have CircuitPython installed and you would like to use your device in the Arduino IDE or with the ESP-IDF, the first time you flash your board you will need to put it into download mode by holding BOOT, pressing RESET and then releasing BOOT. That will enable the CDC USB in ROM and you will be able to select the device to flash it.

What voltage range can the 5V pin accept and is it input as and output?

The 5V pin on the FeatherS2 is an in and out pin. As an input, it will accept a voltage range between 4.8V and 5.2V. Please do not connect any power source over 5.2V to the 5V pin and please do not connect your battery to the 5V pin. It is for a 5V power source only.

When USB power is connected, you will get approximately 4.9V out of the 5V pin. The voltage drop is due to the reverse USB power diode that allows the USB and 5V pin to be power inputs at the same time, and prevents back feeding power into the USB.

The use case for having both connected is when you want to power your FeatherS2 from the 5V pin from an external 5V power source, but you also want to connect the USB to flash the board, or to get serial output.

How can I get my FeatherS2 into UF2 bootloader mode?

To get your FeatherS2 into UF2 bootloader mode (assuming you have not stomped your CircuitPython install with Arduino/IDF or MicroPython) you can click [RESET], then about a second later click [BOOT] to get it into the UF2 bootloader mode. You will then see the RGB LED on your FeatherS2 turn Red while the device is unmounted, and then once mounted, it will turn green. It also may just go straight to green.

Newer UF2 boot loaders will flash the RGB LED purple when you need to press the boot button to go into bootloader mode.

A drive will appear in your filesystem called UFTHRS2BOOT. From here you can re-flash the latest CircuitPython firmware by copying over the firmware.uf2 file for the version you want to install.

You will see the RGB flash a redish orange colour many times during the copy, and then the FeatherS2 will automatically reboot itself and mount the new CircuitPython version.

I get an error when copying CircuitPython UF2 firmware onto my FeatherS2

There is a known issue where the firmware is copied and then the board reboots itself before your OS thinks the file has completed copying. The file did copy, and the FeatherS2 should have rebooted itself and you should see the mounted CircuitPython drive.

Can I update the UF2 bootloader on my FeatherS2?

Yes! Newer versions of the UF2 bootloader to get released from time to time, and it's quite easy to update your bootloader.

Download the latest release version of the FeatherS2 bootloader from the tinyuf2 github releases page and un-zip it.

Note Updating the UF2 bootloader will require you to re-flash CircuitPython back on your FeatherS2.

Inside this folder you will find a file called update-tinyuf2.uf2. Put your FeatherS2 into bootloader mode using the steps explained above and then copy update-tinyuf2.uf2 onto your FeatherS2.

You will see the RGB flash a redish orange colour many times during the copy, and then the FeatherS2 will automatically reboot itself back into the updated UF2 bootloader.

From here you will need to re-copy the CircuitPython firmware back onto the FeatherS2.

How can I get my FeatherS2 into SAFE MODE using CircuitPython?

If you ever find you have gotten your FeatherS2 into a bad state with CircuitPython - Maybe you accidentally got it stuck in read-only mode or maybe it's stuck in a boot loop, you can put your FeatherS2 into safe mode which wil boot the board, but not run any of the code. You can then fix your issue and reset the board.

To get into safe mode, follow these steps:

  • 1. Press the [RESET] button to reset the ESP32-S2 chip
  • 2. After the RGB LED has gone purple, then off, press and hold the [BOOT] button for a few seconds

Your FeatherS2 should now be in safe mode.

My FeatherS2 doesn't go into UF2 bootloader mode!

If you can't get your FeatherS2 into UF2 bootloader mode, it means you've either stomped it by flashing something else onto the board, or your board shipped prior to the UF2 bootloader being ready for the ESP32S2. Sorry!

Note All boards that shipped since November 2020 have the UF2 bootloader on them.

It is possible to flash your FeatherS2 with the latest UF2 bootloader by following the instructions I have put together in this guide.

If you have any trouble getting this to work, make sure you have joined the Unexpected maker discord server and ping the #FeatherS2 channel, and folks there will be able to help guide you through the process as many have already done it.


Buy FeatherS2

You can currently purchase your very own FeatherS2 from