ESP32 I2S Camera (OV7670)

This project shows how to record images with the ESP32 and the OV7670 camera without FIFO. An SPI TFT display is supported and a basic web server provides the images in the local network.

To get more details about the camera registers and timings please check out the project using the FIFO version and the complete playlist on this series.


The parts used here are the LOLIN32 microcontroller. Any ESP32 board can be used.

The camera is the cheap OV7670 without the FIFO. The camera supports up to VGA resolution.  However, we are not able to fit a whole VGA frame into the memory of the microcontroller.

The “real-time” output is done on the 1.8″ SPI TFT display. Due to the single data line, the update rate is really limited. To be able to run the display on 3.3V the jumper on the back side must be closed.
The TFT is optional but helpful.

  • Where to get them

These links are also supporting my work but I don’t mind if you find a cheaper source 😉


The pin connections of the devices can also be found in the code. The definitions can be changed except for MOSI and SCK for the SPI interface which is native on these pins on the ESP32.
But there are some limitations. Pins 34, 35, 36(VP), 39(VN) are read-only. Those can’t be used for I2C, the clock (XCLK) or TFT signals. Pins 0, 2 and 5 are used as boot signals. Those should not be used as inputs to avoid problems while programming. Pin 5 is also attached to the LED on the LOLIN32 board. Pins 6-11 (if available) are a no go since those are wired to the SPI flash memory connected to the ESP32.



The code can be found in my github repository:

  • The code is based on the ESP32 integration in the Arduino IDE. You need:
    Arduino IDE
  • ESP32 integration
  • Adafruit GFX library
  • Adafruit ST7735 library


These are the useful sheets I found so far. If you have more resources please contact me

Related projects