The MagTag has a great eInk display. It's also packed with buttons, connectors and sensors. Time to take a tour!

Note that some elements of the MagTag, like the light sensor, NeoPixels, and speaker, require enabling before usage. This is because we optimized for low-power usage. If the light sensor, NeoPixels or speaker aren't working, see below for the enabling pins!

eInk Display and Display Connector

Front and center is a 2.9" grayscale eInk display with 296x128 pixels. Each pixel can be white, light gray, dark gray or black. For use with general Arduino libraries, you can try GxEPD2_290_T5 - the Arduino library Adafruit uses is ThinkInk_290_Grayscale4_T5.

On the back, along the right side, the display cable wraps around the board to the display connector on the back.


There are two ways to power the MagTag board: the USB type C connector or a 3.7/4.2V Lipoly battery.

Power Inputs

  • 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!)
  • 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 MagTag and charge the battery. The battery will charge from the USB, even if the board is powered off via the switch.
    If the battery is plugged in and USB is plugged in, the MagTag will power itself from USB 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"!
The on-off switch is not very rugged - when switching, push at the 'bottom' of the actuator, not the tip so you don't 'twist' the switch, and don't flick it back and forth. It's not necessary for most uses!

Power LEDs

  • OK LED - This green LED indicates the board is powered on, it is connected to the 3.3V power supply. This LED draws 40uA. If you need lower power you can remove this LED with a soldering iron.
  • CHG LED - This yellow LED lets you know when the plugged in battery is charging and when it's fully charged. It's normal for this LED to flicker when no battery is in place, that's the charge circuitry trying to detect whether a battery is there or not.

ESP32-S2 WiFi Module

The ESP32-S2 WROVER module.

The ESP32-S2 is a highly-integrated, low-power, 2.4 GHz Wi-Fi System-on-Chip (SoC) solution that now has built-in native USB as well as some other interesting new technologies like Time of Flight distance measurements. 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.

Please note, this is a single-core 240 MHz chip so it won't be as fast as ESP32's with dual-core. Also, there is no Bluetooth support. However, we are super excited about the ESP32-S2's native USB which unlocks a lot of capabilities for advanced interfacing! This WROVER module comes with 4 MB flash and 2 MB PSRAM.

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.

NeoPixels and Red LED

NeoPixel LEDs and red LED.

  • On the front of the board, along the top, are four addressable RGB side-emitting NeoPixel LEDs labeled together as NeoPix D1, and individually labeled #0, #1, #2, and #3, so you can light up the display with any color or pattern. You can use GPIO 1 to control the NeoPixels.
  • On the back, on the bottom left, is a red LED labeled D13. It is user-controllable for blinky needs. You can blink this at any time.

To use the NeoPixel LEDs you must also set pin 21 to be an output and LOW - this is the NeoPixel power pin. If not using the NeoPixels, keep pin 21 as an input or HIGH output - that will remove the quiescent power usage of the NeoPixels so you can have lower power in sleep mode.


STEMMA QT - This JST SH 4-pin 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.

In CircuitPython, you can use the STEMMA connector with board.SCL and board.SDA, or board.STEMMA_I2C().

Works great with any STEMMA QT or Qwiic sensor/device

You can also use it with Grove I2C devices thanks to this handy cable

Digital/Analog Connectors

On the bottom are two connectors labeled D10 and A1. These are STEMMA 3 pin JST digital or analog connectors for attaching NeoPixels, speakers, servos or relays. These pins can be analog inputs or digital I/O.

Both connectors have protection 1K resistors + 3.6V zener diodes so you can drive an LED directly from the output. The maximum current from these connectors is 200mA.

A1 is a 'true' analog output. Both can be used for PWM as well as analog inputs. The maximum input voltage is 2.6V, after which the zener diode will kick in to drain excess voltage.

The power output is 5V by default, but a jumper can be cut/soldered to change it to 3.3V.

Speaker and Sensors

  • Towards the middle of the board, at the bottom right corner of the ESP32-S2 module, is a speaker/buzzer labeled with A0 and a musical note. This includes a mini class D amplifier on DAC output A0 and can play tones or lo-fi audio clips.

  • In the center of the board, towards the bottom, is an LIS3DH accelerometer labeled with X, Y and Z, that can be used to detect the orientation of the display. It is connected to the I2C port and available on I2C address 0x19. The IRQ line is connected to GPIO 9.
  • On the front of the board, in the center of the top is a front-facing light sensor labeled with A3 and an eye.

Note that to use the speaker you must also set the speaker shutdown pin IO 16 to be an output and HIGH. If not playing audio, keep this pin as an input or LOW, to reduce the power usage of the amplifier circuit.

To use the light sensor you must also set pin 21 to be an output and LOW to turn on the power supply to it and the NeoPixels. If not using the light sensor or NeoPixels, keep pin 21 as an input or HIGH output - that will remove the quiescent power usage of the NeoPixels and light sensor so you can have lower power in sleep mode.


On the front of the board, along the bottom, there are four user-controllable buttons labeled both with pin names and a different arrow for each button. The buttons are on D11, D12, D14 and D15. Can be used to wake up the ESP32-S2 from deep-sleep, or select different modes.

There are no pull-ups on board, use internal pullups for this pins - when the buttons are pressed the IO pin labeled is set to LOW

Reset and Boot0

  • Reset button - The reset button in the top left corner is used to reset the board.
  • Boot0 button - This is connected to BOOT0 and can be used to put the board into ROM bootloader mode. To enter ROM bootloader mode, hold down the BOOT0 button while clicking reset button mentioned above. When in the ROM bootloader, you can upload code and query the chip using esptool.

UART Debug

The hardware UART debug port has two broken out pins. 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.

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

This guide was first published on Nov 10, 2020. It was last updated on Jul 20, 2024.

This page (Pinouts) was last updated on Mar 08, 2024.

Text editor powered by tinymce.