The PyPortal Pynt has the D3 and D4 sockets mislabeled, they should be swapped (to match the pyportal classic, above)

There are so many great features on the Adafruit PyPortal and PyPortal Pynt. Let's take a look at what's available!

Microcontroller and Flash

The main processor chip is the ATSAMD51J20 Cortex M4 running at 120MHz with 3.3v logic/power. It has 1MB of Flash and 256KB of RAM.

We also include 8 MB of QSPI Flash for storing images, sounds, animations, whatever!


The WiFi capability uses an Espressif ESP32 Wi-Fi coprocessor with TLS/SSL support built-in.


The ESP32 uses the SPI port for data, and also uses a CS pin (board.ESP_CS or Arduino 8), Ready/Busy pin (board.ESP_BUSY or Arduino 5), and reset pin (board.ESP_RESET or Arduino 7)

  • For advanced use or reprogramming on Arduino, we also connect the main RX/TX UART to the ESP32 via Serial1 . In CircuitPython use board.ESP_RX and board.ESP_TX. (CircuitPython 6.0.0 and earlier uses board.RX and board.TX).
  • You can also connect to the ESP32 RTS pin (used in some serial contexts) on board.ESP_RTS or Arduino 51.
  • The ESP32 GPIO0 pin for bootloader enable is connected to board.ESP_GPIO0 or Arduino 6

Display and Display Connector

On the front of the PyPortal is a 3.2″ 320 x 240 color TFT with resistive touch screen! On the front of the Pynt is a 2.4″ diagonal 320 x 240 color TFT with resistive touch screen!

On the back, there is a large connector near the middle, the display connector. It connects the display on the front to the board.

To give you the most data throughput we configure the screen for 8-bit interfacing. That means 8 data lines and a collection of 4 or 5 control lines. If you really want to use the screen in SPI mode, you can do so by soldering closed the SPI jumper and cutting/resoldering the 8/SPI jumper over to the SPI side. That's for advanced users!

The touchscreen is fully analog/resistive. It can be read using our Arduino/CircuitPython drivers. The connections are as follows:

  • YD on board.TOUCH_YD or Arduino A4
  • XL on board.TOUCH_XL or Arduino A5
  • YU on board.TOUCH_YU or Arduino A6
  • XR on board.TOUCH_XR or Arduino A7

The 8 bit LCD interface is not exposed in CircuitPython (it's managed internally). In Arduino it's on Digital 34 thru 41, which is on a PORTA 8-bit boundary (PA16-PA23) and can be used for DMA or fast port writes. This probably doesn't affect you.

There are multiple control pins

  • TFT Reset - board.TFT_RESET or Arduino 24
  • TFT WR - board.TFT_WR or Arduino 25 (this is also the board.TFT_DC pin if using in SPI mode)
  • TFT RD - board.TFT_RD or Arduino 9
  • TFT RS - board.TFT_RS or Arduino 10
  • TFT CS - board.TFT_CS or Arduino 11
  • TFT TE - board.TFT_TE or Arduino 12

There is also a TFT backlight, transistor-connected to board.TFT_BACKLIGHT or Arduino 25. You can PWM control it. There are 6 white LEDs connected in parallel, so having it be full on will draw quite a bit of current (over 100mA!)


There are two built in sensors.

On the top of the PyPortal (not the Pynt) is the ADT7410 Analog Devices temperature sensor with 16-bit 0.0078°C temperature resolution and 0.5°C temperature tolerance. The sensor is I2C connected, use the Arduino or CircuitPython libraries to read it.

There is also an ambient light sensor on the side, which points through to the front, as seen in the second image. The light sensor is an analog input, connected to board.LIGHT (CircuitPython) or A2 (Arduino) you can read it as any analog value ranging from 0 (dark) to 1023 (in Arduino) or 65535 (CircuitPython) when bright.

microSD Card Slot

On the left side, there is a microSD card slot. A microSD card is the best way to add extra storage to your project and provide space for streams to be processed!

The SD card is on the main SPI port (shared with the ESP32) and a CS line. In CircuitPython, the CS pin is board.SD_CS. In Arduino it's digital 32.

There is also a card detect pin on board.SD_CARD_DETECT (CircuitPython) or Arduino 33

Speaker and Speaker Connector

There is a speaker and a speaker connector.

The grey squarish bit on the bottom is a speaker. There is a small class D amplifier connected to the speaker so it can get quite loud!

There is also a speaker connector, which is a Molex PicoBlade. You can attach one of the speakers available in the Adafruit shop, or solder a connector to your favorite speaker. If you do, cut the small solder jumper to the left of the buzzer so that you only have one speaker activated (and also it will be louder!)

The speaker is connected to the DAC0 output from the SAMD51, via a class D amplifier. The analog output is known as board.AUDIO_OUT in CircuitPython. In Arduino it's A0.

You can disable the speaker amplifier by setting the shutdown pin to output and low. It's on board.SPEAKER_ENABLE and Arduino 50

I2C Connector

If using the I2C connector, you must cut the 5V VCC trace to the left and solder it to the 3V pad instead - the SAMD51 does not like it if there are even light pullups to 5V and may hang on boot otherwise!

There is a 4-pin JST I2C connector in the center on the right, that is STEMMA and Grove compatible. The I2C has pullups to 3.3V power and is connected to the ADT7410 already.

The I2C connector defaults to 5V. There is a jumper you can cut or solder to change it between 5V and 3V.

Digital/Analog Connectors

On the right side are two connectors labeled D3 and D4. These are 3-pin JST digital or analog connectors for sensors or NeoPixels. These pins can be analog inputs or digital I/O.


They have protection 1K resistors + 3.6V zener diodes so you can drive an LED directly from the output. Connect to them via board.D3 and board.D4 or Arduino 3 and 4. For analog reading in arduino use A1 for D3 and A3 for D4 (yeah sorry it's not matchy!)

D3/A1 is the second DAC.

The PyPortal Pynt has the D3 and D4 sockets mislabeled, they should be swapped (to match the pyportal classic, above)

Status LED and NeoPixel

There are two LEDs on the board.

There is the RGB status NeoPixel labeled "STATUS". It is connected to board.NEOPIXEL or Arduino 2

As well, there is the D13 LED. This is attached to board.L and Arduino 13

USB Connector

There is one USB port on the board.

On the left side, towards the bottom, is a USB Micro port, which is used for powering and programming the board.

Reset Button

The reset button is located on the top in the middle.


Click it once to re-start your firmware. Click twice to enter bootloader mode.

This guide was first published on Feb 26, 2019. It was last updated on 2021-03-17 13:45:33 -0400.

This page (Pinouts) was last updated on Jun 23, 2021.

Text editor powered by tinymce.