CircuitPython 7 adds support for capturing images from "parallel cameras" on select boards, and libraries are available to configure the popular OV7670, OV5640, and OV2640 cameras.

CircuitPython 8 adds a new library exclusively for Espressif ESP32 microcontrollers that supports a wider range of cameras, though the guide author has only tested with the OV5640 and OV2640 cameras.

While not up to standards we’re used to from a current smartphone or laptop, it’s nicely balanced to the capabilities of recent 32-bit microcontrollers.

CircuitPython on the Grand Central M4 is prone to locking up when the camera function is used. The Arduino implementation is much more reliable on that board. We recommend using ESP32-S2, ESP32-S3 or RP2040 instead.

The Arduino library for OV7670 cameras on the Grand Central M4 has its own dedicated guide.

Parts

Items needed

  • Compatible microcontroller board with appropriate pins exposed:
    • any CircuitPython-compatible ESP32-S2 or S3 with PSRAM, including Kaluga and ESP32-S3-EYE
    • any RP2040 supported by CircuitPython including Raspberry Pi Pico
    • Adafruit's Grand Central M4 (not recommended)
  • SPI TFT module
  • compatible parallel camera module — the board pinout must match exactly
  • Two 2.2k resistors, if pull-up resistors are necessary
  • Soldering iron and supplies
  • Appropriate USB data + power cable
  • Prototyping supplies such as breadboards and jumper wires

The Espressif ESP32-S3 Eye development kit has all you need (including an OV2640 camera module and 240x240 LCD), and no soldering is required, so it's probably the best way to get started!

It is not possible to access the CIRCUITPY drive or the REPL using the USB Micro B connections on the Kaluga board so you will also need a USB Plug Breakout cable (see below). Also, you must have v1.3 of the Kaluga kit, v1.2 has some incompatible wiring that makes it unusable in this project!

OV7670, OV5640, and OV2640 camera modules with the 18 pin, 2-row header can be found on Amazon, eBay, etc. Make sure the pinout matches the camera shown above, as occasionally there are incompatible variants. The cameras are sometimes sold in sets which is a good idea, as they’re easily damaged with the wrong voltage or rough handling, especially if you need to modify it for use with the Grand Central M4.

Other sensor models (such as OV3660) exist, but they require different initialization code and cannot currently be used.

When using esp32_camera, a wider range of camera boards are supported, but note that the guide author has only tried OV2640 and OV5640. A list of cameras supported by the underlying esp32_camera library can be seen on GitHub.

Parts

1 x ESP32-S3-EYE
Development kit from Espressif with ESP32-S3 and 2-megapixel camera
USB Type A Plug Breakout Cable with Premium Female Jumpers
If you'd like to connect a USB-capable chip to your USB host, this cable will make the task very simple. There is no converter chip in this cable! Its basically a...
$1.95
In Stock
Angle shot of Raspberry Pi Pico RP2040
The Raspberry Pi foundation changed single-board computing when they released the Raspberry Pi computer, now they're ready to...
$4.00
In Stock
Top down shot of a Adafruit Grand Central M4 Express featuring the SAMD51.
Are you ready? Really ready? Cause here comes the Adafruit Grand Central featuring the Microchip ATSAMD51. This dev board is so big, it's not...
$39.95
In Stock
USB C to Micro B Cable. 3ft 1 meter.
As technology changes and adapts, so does Adafruit! Rather than the regular USB A, this cable has USB C to Micro B plugs!USB C is the latest...
$3.50
In Stock
USB cable - USB A to Micro-B - 3 foot long
This here is your standard A to micro-B USB cable, for USB 1.1 or 2.0. Perfect for connecting a PC to your Metro, Feather, Raspberry Pi or other dev-board or...
$2.95
In Stock
1 x OV7670 Camera Boards
Lot of 5 camera boards
1 x OV2640 Camera Board
Camera module, 2 Megapixel

This guide was first published on Jun 29, 2021. It was last updated on Jun 19, 2024.

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

Text editor powered by tinymce.