Getting Started with Adafruit MEMENTO: Python Programmable DIY Camera Board

Published  October 15, 2025   0
Adafruit MEMENTO: Complete Guide

There have been many development boards recently built around the ESP32-S3. Most development boards come with a display, some also include cameras and buttons, and a few have speakers and microphones. Finding one that brings all these components together without compromising on quality has been the real challenge for makers and developers. Keeping all this in mind, we found a dev board that brings everything together in one module, the Adafruit MEMENTO.

CircuitDigest presents the Smart Home & Wearables Project Contest 2025! Win exciting prizes worth up to ₹7,00,000 and receive free development boards through our partnership with DigiKey. For registration, dive into contest details. 

This Adafruit MEMENTO tutorial provides complete guidance for both Adafruit MEMENTO Arduino and Adafruit MEMENTO Python programmable workflows using CircuitPython.With all these features, it makes a perfect choice for our upcoming Smart Home and Wearable Project Challenge, where you can win prizes of up to Rs. 7,00,000. You can also win a development board and some cool goodies just by sharing your project ideas. So don’t forget to check out the Smart Home and Wearable Project Challenge for more details.

Nonetheless, it's been difficult for makers and developers to find an Adafruit MEMENTO camera board that employs high-quality components without sacrificing quality. The Adafruit MEMENTO dev board provides a solution by housing a 5MP auto-focus camera, colour display, audio, and a plentiful amount of I/O with one stylish board. If you are doing Adafruit MEMENTO projects for the Internet of Things (IoT), doing computer vision experiments, or making art installations, this guide will explore everything from hardware pinouts to programming the Adafruit MEMENTO dev board. The Adafruit MEMENTO software ecosystem is designed to be utilised by everyone, from complete beginners to experienced software developers.

So, without waiting any longer, let’s dive into the actual development board.

What's Inside the Adafruit MEMENTO Package?

This package is quite simple, containing just one main Adafruit MEMENTO dev board. This package is quite simple, containing just one main Memento Dev Board. You can see the unboxing image below.

Adafruit MEMENTO camera board unboxing showing dev board with display and camera

The board has scratch protection for its camera and display, along with four screw inserts at each corner. The PCB has a square design, placing the display, microphone, speaker, and some buttons on the front side, while the camera, SD card slot, all I/O connections, and an accelerometer are on the back. The boot and restart buttons, along with the Type-C input, are placed on the sides for easy access. All the components have been positioned with practicality in mind. Without a doubt, this board is perfectly made in every way. That was my first impression. Next, let’s take a detailed look at the features of this module.

Adafruit MEMENTO pinout diagram back view showing camera module, SD card slot, and GPIO connections

Adafruit MEMENTO front view with LCD display, buttons, and speaker labeled

Features of the Adafruit MEMENTO

The Adafruit MEMENTO camera board integrates professional-grade components into a compact development platform, making it ideal for IoT projects, photography applications, and computer vision experiments. To make this board outstanding and usable for most applications, it comes packed with a rich set of features:

Feature Description
ESP32-S3 module with 4 MB Flash, 2 MB PSRAM  Dual-core 240MHz Tensilica with Wi-Fi and BTLE.
OV5640 camera module with 72° field of view and auto-focus motor  5MP camera sensor with a built-in JPEG encoder.
1.54" 240x240 Color TFT  For previewing camera images or designing a user interface.
MicroSD card slot Store images or animations on any SPI-capable microSD card. Note: Supports cards up to 32GB capacity.
Two Digital/Analog Stemma Ports JST PH-3 connectors for A0, A1, and power+ground, allowing external buttons, LEDs, or sensors. Can provide 3V or 5V power.
I2C Stemma QT Port Connect almost any I2C sensor with a Stemma QT JST SH port, providing 3.3V power and logic.
LIS3DH Accelerometer A triple-axis accelerometer for detecting orientation, shaking, or movement.
LiPoly battery charging support  Works with a 3.7/4.2V 350mA or 420mA battery for on-the-go snaps.
6 User Buttons Change modes, preview saved images, or even play DOOM (?). Connected through a GPIO expander.
Buzzer Play tones or alerts, or indicate when a photo is successfully taken.
Analog Microphone Can be used as a sensor to detect loud sounds (not for recording video with audio).
Shutter/Boot button Connected to GPIO 0 for entering the ROM bootloader.
Reset button For entering the bootloader or restarting the board.
On/Off switch Cuts all power when using a battery.
USB Type-C For programming the ESP32-S3, REPL access in CircuitPython, and charging the optional LiPoly battery.
Breakout pads for hardware UART For deeper debugging needs, solder wires to the through-hole pads to connect to a console cable.
Four M3 standoffs For mounting or attaching to an enclosure.

On the software side, it can be programmed with both Arduino IDE and CircuitPython. Between CircuitPython and Arduino IDE, CircuitPython is definitely the easier one for coding and interfacing, making the board truly Python programmable for educational and rapid prototyping purposes.

Adafruit MEMENTO Projects: Real-World Applications

The versatility of the Adafruit MEMENTO camera board makes it suitable for numerous applications across different domains. Below are practical Adafruit MEMENTO projects you can build using either Adafruit MEMENTO Arduino or CircuitPython programming:

Application Description
Photography:  Digital photos, timelapse, custom effects and filters
Security:  Motion detection, surveillance systems, automated monitoring
IoT Projects: Wireless camera control, remote photo capture, smart home integration
Education:  Learning programming with CircuitPython/Arduino, computer vision experiments
Creative Arts:  Interactive photo booths, art installations, custom camera apps
Development: Prototyping vision applications, testing camera algorithms
Automation: Scheduled photography, event-triggered image capture
Portable Projects: Handheld camera systems, field research documentation
Remote Control: Wireless operation via TouchOSC or custom interfaces
Data Collection: Scientific imaging, environmental monitoring, research projects

A practical Adafruit MEMENTO project combining 3D printing with IoT integration demonstrates the board's capabilities. 

Adafruit MEMENTO Pinout Guide: Complete Hardware Overview

Now that you know more about the features of the MEMENTO, let's move to the physical overview, where we take a look at the overall hardware and its pinouts in detail.

Adafruit MEMENTO front and back view showing complete board layout

Above, you can see the front and back images of the MEMENTO  showcasing the comprehensive component layout that makes this board ideal for Adafruit MEMENTO projects.

LCD Display Specifications & Pin Configuration

Adafruit MEMENTO 1.54 inch 240x240 color TFT display with ST7789 driver

On the front side of the MEMENTO, the LCD (1.54" 240x240 Colour TFT) takes up most of the space. This is useful for previewing camera images or creating your own user interface design. It uses the ST7789 driver, which is supported by both Arduino and CircuitPython.

It uses the following pins for communication:

Pin GPIO CircuitPython Access Arduino Access
MOSI GPIO35 board.MOSI  MOSI
SCK GPIO36 board.SCK  SCK
MISO GPIO37 board.MISO   MISO
DC GPIO40 board.TFT_DC   TFT_DC
CS GPIO39 board.TFT_CS  TFT_CS
Backlight GPIO45 board.TFT_BACKLIGHT TFT_BACKLIGHT.
Reset GPIO38.  board.TFT_RESET TFT_RESET or TFT_RST.

User Interface Buttons & GPIO Expander Setup

Adafruit MEMENTO six user interface buttons layout

There are a total of six buttons for the user interface in the Adafruit MEMENTO dev board. There are a total of six buttons for the user interface. These buttons are more than enough for most designs. One thing to note is that these buttons are not directly connected to the ESP32-S3. Instead, they use the AW9523 GPIO Expander. The pin mapping is:

Button Pin
OK button pin 11
Select button pin 1
Up button pin 13
Down button pin 15
Left button pin 14
Right button pin 12

Both the Arduino and CircuitPython PyCamera libraries have built-in support for these buttons, making them easy to use in Adafruit MEMENTO Arduino and CircuitPython projects.

Microphone & Speaker Configuration

Adafruit MEMENTO analog MEMS microphone location

On the front side of the  Adafruit MEMENTO camera board, above the four user buttons, is the analog MEMS microphone, labelled Mic on the board’s silkscreen. It can be used as a sensor to detect loud sounds for various Adafruit MEMENTO projects. It is not intended for recording video with audio.

The analog input from the microphone is connected to GPIO2. It’s accessible in CircuitPython with the board. MIC and in Arduino with 2. This component enables audio feedback in your Adafruit MEMENTO software applications.

ESP32-S3 Module: The Core Processor

Adafruit MEMENTO ESP32-S3 processor with WiFi and Bluetooth

Now, looking at the back side, you'll find the hero of the Adafruit MEMENTO dev board: the Espressif ESP32-S3 with 3.3V logic/power. It has 4MB of Flash and 2MB of PSRAM. This MCU comes with Wi-Fi and BLE, making IoT-related tasks much easier for Adafruit MEMENTO projects.

Below the TFT display, between two of the user buttons, is the speaker, also labelled Speaker in the silkscreen.

The output from the speaker is connected to GPIO46. It’s accessible in CircuitPython with the board.SPEAKER and in Arduino with SPEAKER.

Note: The speaker is muted via pin 0 on the AW9523 GPIO expander, so don’t forget to unmute it before expecting any sound!

Camera Module: OV5640 with Auto-Focus

Adafruit MEMENTO OV5640 5MP camera module with auto-focus motor and 72 degree field of view

Now, looking at the back side, you’ll find the hero of the dev board:  the Espressif ESP32-S3 with 3.3V logic/power. It has 4MB of Flash and 2MB of PSRAM. This MCU comes with Wi-Fi and BLE, making IoT-related tasks much easier.

Camera Module Adafruit Memento


Next, of course, our attention moves toward the camera module at the center of the board. Unlike other ESP32-CAM modules, this is no ordinary camera. It has a built-in motor that enables the auto-focus feature, making it perfect for professional Adafruit MEMENTO projects. And yes, it’s a 5MP sensor with a 72° field of view.

Below the camera connector, there is a jumper to provide 3.3V to the auto-focus motor. You can cut the jumper to disconnect DATA1 from 3.3V and disable auto-focus.

The camera uses the following pins for Adafruit MEMENTO dev board programming:

VSYNC GPIO5. Accessible in CircuitPython with board.CAMERA_VSYNC and in Arduino with VSYNC_GPIO_NUM.
HREF GPIO6. Accessible in CircuitPython with board.CAMERA_HREF and in Arduino with HREF_GPIO_NUM.
XCLK GPIO8. Accessible in CircuitPython with board.CAMERA_XCLK and in Arduino with XCLK_GPIO_NUM.
PCLK

GPIO11. Accessible in CircuitPython with board.CAMERA_PCLK and in Arduino with PCLK_GPIO_NUM.

PWDN GPIO21. Accessible in CircuitPython with board.CAMERA_PWDN and in Arduino with PWDN_GPIO_NUM.
DATA2  GPIO13. Accessible in CircuitPython with board.CAMERA_DATA2 and in Arduino with Y2_GPIO_NUM.
DATA3  GPIO15. Accessible in CircuitPython with board.CAMERA_DATA3 and in Arduino with Y3_GPIO_NUM.
DATA4  GPIO16. Accessible in CircuitPython with board.CAMERA_DATA4 and in Arduino with Y4_GPIO_NUM.
DATA5  GPIO14. Accessible in CircuitPython with board.CAMERA_DATA5 and in Arduino with Y5_GPIO_NUM.
DATA6 GPIO12. Accessible in CircuitPython with board.CAMERA_DATA6 and in Arduino with Y6_GPIO_NUM.
DATA7 

GPIO10. Accessible in CircuitPython with board.CAMERA_DATA7 and in Arduino with Y7_GPIO_NUM.

DATA8  GPIO9. Accessible in CircuitPython with board.CAMERA_DATA8 and in Arduino with Y8_GPIO_NUM.
DATA9  GPIO7. Accessible in CircuitPython with board.CAMERA_DATA9 and in Arduino with Y9_GPIO_NUM.
RESET  GPIO47. Accessible in CircuitPython with board.CAMERA_RESET and in Arduino with RESET_GPIO_NUM.

We already know there's a heavy demand for the peripherals we've seen above, so the Adafruit MEMENTO camera board includes the AW9523 GPIO Expander IC to provide additional GPIO pins. You can spot this IC near the camera, specifically to the left of the camera module.

The I2C address of the GPIO expander (AW9523) is 0x58.

Adafruit MEMENTO GPIO expander AW9523 and LIS3DH accelerometer location

Near the AW9523, there is a LIS3DH Accelerometer. It’s a triple-axis accelerometer that can detect orientation, shaking, or movement for motion-sensitive Adafruit MEMENTO projects. It communicates over I2C at address 0x19. Its interrupt (IRQ) pin is connected to GPIO3, which is accessible in CircuitPython with the board.IRQ and in Arduino with 3.

Storage & Expansion: SD Card and Stemma Ports

Adafruit MEMENTO JST-PH analog ports A0 and A1

For user I/O in Adafruit MEMENTO dev board programming, there are two JST-PH connectors on the left side of the board, labelled A0 and A1. These are 3-pin JST connectors that can be used for sensors, NeoPixels, or analog input/output.

  • A0 is connected to GPIO17 (accessible in CircuitPython with board.A0 and in Arduino with A0).

  • A1 is connected to GPIO18 (accessible in CircuitPython with board.A1 and in Arduino with A1).

You don’t need to worry about voltage on these pins, as they can be configured to either 3.3V or 5V. By default, they provide 5V. Between the two connectors is a jumper labelled 5V3. This jumper can be cut and re-soldered to switch the VCC signal from 5V to 3V.

Adafruit MEMENTO Stemma QT I2C connector for sensors

Between A0 and A1, you’ll find a tiny connector labelled I2C on the silkscreen. This is a 4-pin Stemma QT connector perfect for connecting additional sensors to your Adafruit MEMENTO projects. The I2C lines have pull-ups to 3.3V.

  • SDA – GPIO34
  • SCL – GPIO33

In an Arduino, you can use this connector with a wire. In CircuitPython, you can use it with a board.SCL, board.SDA, board.I2C(), or board.STEMMA_I2C().

Adafruit MEMENTO microSD card slot for image storage

Towards the bottom-left corner on the back of the MEMENTO is the microSD card slot. It can be used to store images or animations on any SPI-capable microSD card, essential for most Adafruit MEMENTO camera board applications.

  • SDCS (chip select pin) – connected to GPIO48. Accessible in CircuitPython with the board.CARD_CS and in Arduino with SD_CS or SD_CHIP_SELECT.
  • SDCD (card detect pin) – connected to pin 9 on the AW9523.

Power Management & Battery Support

Adafruit MEMENTO NeoPixel LED, power switch, and control buttons

Along the top edge of the board are two buttons:

  1. The Boot button, labelled Boot and Shutter on the silkscreen, is connected to GPIO0. Accessible in CircuitPython with the board.BUTTON and in Arduino with SHUTTER_BUTTON. Hold it while pressing reset to enter ROM bootloader mode for Adafruit MEMENTO dev board programming.
  2. The Reset button, labelled RST on the silkscreen, is connected to the ESP32-S3 reset pin. Press once to restart your firmware, or press again after about half a second to enter bootloader mode.

To the right of the boot button is the NeoPixel. This addressable RGB LED works as a status LED (in CircuitPython and the bootloader) and can also be controlled with code in the Adafruit MEMENTO software. It’s connected to GPIO1, accessible in CircuitPython with board. NEOPIXEL and in an Arduino with PIN_NEOPIXEL or NEOPIXEL_PIN.

On the top-right edge of the board is the On/Off switch, labelled On on the silkscreen. This sliding switch cuts all power to the board, essential for portable Adafruit MEMENTO projects.

To the right of the switch is the power LED, a green LED that lights up whenever the board has power.

Adafruit MEMENTO power management components including USB-C and battery connector

USB-C port Used for both powering and programming the board. Any USB-C cable will work. When plugged in, it also charges the LiPoly battery.
LiPoly connector/charger A JST 2-PH port for plugging in any 350mAh or larger 3.7/4.2V LiPoly battery. The MEMENTO can run from the battery and charge it while USB is plugged in. The board silkscreen includes an outline sized perfectly for the 420mAh battery available in the shop.
Battery Monitor Pin Monitor battery percentage via an ADC pin, accessible in CircuitPython with board.BATTERY_MONITOR and in Arduino with BATT_MONITOR.
Power Selection Jumper Located above the TFT display ribbon cable. It selects whether the 2.8V supply is powered from 3.3V or 5V. You can cut and re-solder it to switch to 5V.

With this, we’ve completed the physical overview of the Adafruit MEMENTO camera board. Next, to make using the MEMENTO simpler, we’ll look at some official resources to get started with your Adafruit MEMENTO projects.

Official Adafruit MEMENTO Resources & Documentation

Unlike other Adafruit modules, this Adafruit MEMENTO dev board is also perfectly documented to get started. You can begin by referring to the Adafruit MEMENTO Camera Board.

In this comprehensive Adafruit MEMENTO tutorial, you will find: Overview, Pinouts, Installing CircuitPython, microSD Card Formatting, Notes, CircuitPython MEMENTO Starter Projects, Frames to GIFs, Arduino IDE Setup, Arduino MEMENTO Library Installation and Starter Projects, Factory Reset, and Downloads.

Hopefully, these resources will be all you need for Adafruit MEMENTO dev board programming. Next, let’s do a quick exploration of Memento using the Arduino IDE. If you wish, you can also go with CircuitPython for a more Python-programmable experience.

Adafruit MEMENTO Arduino Tutorial: Complete Setup Guide

With a dedicated board selection and library already available for this module, the first test program is quite simple.

Programming the Adafruit MEMENTO dev board using the Arduino IDE will allow you to take advantage of the vast libraries and community resources that support Arduino projects. This Adafruit MEMENTO tutorial will guide you through the complete setup for MEMENTO dev board programming using Arduino's familiar development environment.

Setting Up

There are three primary steps needed to set up the Arduino environment:
Step 1: Installing ESP32 Board Support for Adafruit MEMENTO

The first step in Adafruit MEMENTO dev board programming requires updating the ESP32 board library to ensure compatibility with the ESP32-S3 processor and all MEMENTO features.

Arduino IDE showing how to update ESP32 board library for Adafruit MEMENTO programming

⇒ Step 2: Installing Adafruit MEMENTO Software Libraries. The Adafruit MEMENTO software ecosystem includes specialised libraries that simplify camera control, display management, and hardware interfacing. along with all dependencies. Even if you already have most of them installed, enabling this option will update the existing ones or install the missing ones.

Installing Adafruit PyCamera library in Arduino IDE for MEMENTO dev board tutorial

⇒ Step 3: Understanding the Example Sketches
The Adafruit MEMENTO Arduino library includes two comprehensive example programs demonstrating core functionality. Access these examples through File → Examples → Adafruit PyCamera.

Once installed, navigate to the Examples folder. You’ll find two sketches:

Arduino IDE examples menu showing Adafruit PyCamera sample programs

Differences Between Pycamera_test and Memento_factory_test,

Analog readings: Pycamera_test reads both A0 and A1, while Memento_factory_test only reads A0.
OK button: Does nothing in Pycamera_test; cycles through ring light colors in Memento_factory_test.
SEL button:  Does nothing in Pycamera_test; adjusts ring light brightness in Memento_factory_test.
Ring light control:  Not present in Pycamera_test; fully implemented in Memento_factory_test.
Interrupt handling:  Missing in Pycamera_test; IRQ pin 3 interrupt added in Memento_factory_test.
Ring light variables:  Absent in Pycamera_test; includes color array and brightness control in Memento_factory_test.

Proper board selection is critical for successful Adafruit MEMENTO dev board programming. If you have it, you can use these extra features. Otherwise, both examples provide the same basic camera functions, but Memento_factory_test includes extra testing features.

⇒ Step 4: Connecting and Selecting the Adafruit MEMENTO Board

Proper board selection is critical for successful Adafruit MEMENTO dev board programming.

  1. Connect the MEMENTO Dev Board to your PC.
  2. Hold the Boot button and press the Reset button once. This puts the board into upload mode.
  3. In Arduino IDE, select:
    Board → ESP32 → Adafruit PyCamera S3

Arduino IDE board selection menu showing Adafruit PyCamera S3 for MEMENTO programming
Now, click Compile and Upload. The code will be uploaded to your MEMENTO board.

Using the PyCamera

The Adafruit MEMENTO software includes comprehensive camera control features accessible through the built-in buttons and programmable through code. Understanding the PyCamera interface is essential for developing custom Adafruit MEMENTO projects.

By default, the captured image won’t be stored unless you insert an SD card.

Note: The Adafruit MEMENTO Arduino library supports both FAT16 and FAT32 filesystems, providing compatibility with cards up to 32GB capacity.

Once the SD card is inserted, you can take pictures by pressing the Shutter button at the top right.

And there are two extra features,

Colour Filter Effects

These filters are useful for artistic Adafruit MEMENTO projects, security applications requiring specific visual modes, or creative photography experiments:

Colour Filters – Use the Left and Right buttons to cycle through filters:

  1. Normal/None
  2. Black & White
  3. Sepia
  4. Negative
  5. Greenish
  6. Reddish
  7. Bluish

The example programs demonstrate the Adafruit MEMENTO camera board's capabilities through intuitive button controls

The OV5640 camera sensor supports multiple resolution modes, allowing you to balance image quality against storage space and processing speed in your Adafruit MEMENTO projects.

Resolution Adjustment – Use the Up and Down buttons to change image resolution. Available options:

QQVGA: 160×120
QVGA: 320×240
HVGA: 480×320
VGA: 640×480
SVGA: 800×600
XGA:  1024×768
HD: 1280×720
SXGA: 1280×1024
UXGA: 1600×1200
QXGA: 2048×1536
QSXGA: 2560×1920

The resolution of the images can be adjusted in real time.

This Adafruit MEMENTO tutorial has been created through hands-on testing and verification of all features, pinouts, and programming procedures. 

This rich Adafruit MEMENTO tutorial has taken you from hardware specifications and pinout details to getting started programming the Adafruit MEMENTO dev board using the Arduino IDE. Whether you choose to begin with Adafruit MEMENTO Arduino development or the Adafruit MEMENTO programmable CircuitPython environment, this versatile camera board has professional features in a convenient package.

The combination of the ESP32-S3 processor, 5MP auto-focus camera, colour display, and rich connectivity makes the MEMENTO dev board a great choice for limitless Adafruit MEMENTO projects, from simple learning projects to sophisticated Internet of Things (IoT) camera systems. It is the reliability of the Adafruit MEMENTO software ecosystem, supported by extensive documentation and community support, that means your projects can begin quickly and smoothly scale in complexity. You could create security systems, wildlife cameras, time-lapse devices, or interactive art installations, and the Adafruit MEMENTO development board is a great place to start. Download the example code and explore the Adafruit MEMENTO software features, and you will be able to bring your vision to life in this powerful, well-documented development platform.

After a deep dive into the Adafruit MEMENTO, it's clear why we chose this board for this year's contest. It's not just another ESP32 camera module-it’s a way to combine your creativity and skills into a fun project. This article gives you a basic idea of its features, and we can’t wait to see your innovative ideas for this year’s contest! 

To help you get going, check out this sample project: IoT Window Bird Feeder with Camera. This project uses 3D printing along with IoT on Adafruit IO, making it a great source of inspiration.

Add New Comment

Login to Comment Sign in with Google Log in with Facebook Sign in with GitHub