ESP32 development boards with camera are becoming popular with the maker community. There are different models of ESP32 Camera boards with different features. Each ESP32 Camera dev board uses different GPIOs to connect to the camera. In this guide we’ll show you the pin definition to include in your code for each board.

This guide covers the pin/GPIOs assignment for the following ESP32 Camera Development boards:
- ESP32-CAM AI-Thinker
- Freenove ESP32-Wrover CAM
- TTGO T-Journal
- M5-Camera Model A
- M5-Camera Model B
- M5 ESP32-Camera (without PSRAM)
- ESP-EYE
- TTGO T-Camera Plus
- TTGO T-Camera (with PIR sensor)
For a detailed comparison of the different ESP32 Camera Boards, read:
ESP32-CAM AI-Thinker Pin Assignment
The following image shows the pinout diagram for the ESP32-CAM AI-Thinker.

This is the OV2640 camera pin assignment for the ESP32-CAM AI-Thinker board:
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
The ESP32-CAM AI-Thinker comes with 10 exposed GPIOs. Learn how to use those GPIOs with this ESP32-CAM Pinout Reference Guide.
Review: ESP32-CAM with OV2640 Camera
Freenove ESP32-Wrover CAM Board
Pin definition for the ESP32-Wrover CAM board (Freenove brand). In some of the examples, this pin definition is under the CAMERA_MODEL_WROVER_KIT.
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 21
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 19
#define Y4_GPIO_NUM 18
#define Y3_GPIO_NUM 5
#define Y2_GPIO_NUM 4
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
TTGO T-Journal Pin Assignment

Pin assignment for the TTGO T-Journal board.
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 25
#define SIOC_GPIO_NUM 23
#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 17
#define VSYNC_GPIO_NUM 22
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21
Review: TTGO T-Journal ESP32 Camera Development Board
M5-Camera Model A Pin Assignment
There are two similar models: M5-Camera Model A and M5-Camera Model B. The model A looks as shown in the following figure.

Pin assignment for the M5-Camera Model A.
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 25
#define SIOC_GPIO_NUM 23
#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 32
#define VSYNC_GPIO_NUM 22
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21
M5-Camera Model B Pin Assignment
The M5-Camera Model B looks as follows:

Pin assignment for the M5-Camera Model B.
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 22
#define SIOC_GPIO_NUM 23
#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 32
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21
M5-Stack ESP32-Camera (without PSRAM) Pin Assignment

Pin assignment for the M5-stack ESP32 camera without PSRAM.
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 25
#define SIOC_GPIO_NUM 23
#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 17
#define VSYNC_GPIO_NUM 22
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21
ESP-EYE Pin Assignment

Pin assignment for the ESP-EYE camera.
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 4
#define SIOD_GPIO_NUM 18
#define SIOC_GPIO_NUM 23
#define Y9_GPIO_NUM 36
#define Y8_GPIO_NUM 37
#define Y7_GPIO_NUM 38
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 35
#define Y4_GPIO_NUM 14
#define Y3_GPIO_NUM 13
#define Y2_GPIO_NUM 34
#define VSYNC_GPIO_NUM 5
#define HREF_GPIO_NUM 27
#define PCLK_GPIO_NUM 25
Review: ESP-EYE: ESP32-based board for AI
TTGO T-Camera Plus Pin Assignment

Pin assignment for the TTGO T-Camera Plus.
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 4
#define SIOD_GPIO_NUM 18
#define SIOC_GPIO_NUM 23
#define Y9_GPIO_NUM 36
#define Y8_GPIO_NUM 37
#define Y7_GPIO_NUM 38
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 35
#define Y4_GPIO_NUM 26
#define Y3_GPIO_NUM 13
#define Y2_GPIO_NUM 34
#define VSYNC_GPIO_NUM 5
#define HREF_GPIO_NUM 27
#define PCLK_GPIO_NUM 25
Review: TTGO T-Camera Plus ESP32 Development Board
TTGO T-Camera with PIR Sensor Pin Assignment

Pin definition for the T-Camera with PIR sensor (without microphone and without BME280):
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 32
#define SIOD_GPIO_NUM 13
#define SIOC_GPIO_NUM 12
#define Y9_GPIO_NUM 39
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 23
#define Y6_GPIO_NUM 18
#define Y5_GPIO_NUM 15
#define Y4_GPIO_NUM 4
#define Y3_GPIO_NUM 14
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 27
#define HREF_GPIO_NUM 25
#define PCLK_GPIO_NUM 19
Wrapping Up
Having the right pin definition for your ESP32 camera board is very important. Otherwise, your code won’t work or your board will not initialize the camera.
We have several tutorials for the ESP32-CAM that may also be compatible with other ESP32 camera boards as long as you use the right pin definition in your code.
If you want to access a I/O pin, or the 3.3V power output/input pin, how would you go about assinging the pins?
Hi.
I’m sorry, but I didn’t understand your question.
Regards,
Sara
I have an ESP32-S (original ESP32CAM based board) which I’m swapping over to an ESP32-S3. Are there any restrictions on which pins are assigned to the camera? It will be my PCB layout but it seems any examples I’ve found of the S3 use totally different pinouts to the original – I’d like to keep the board layout mostly the same, so can I just assign them back to the old version in the sketch, with the new module? I’m worried that the peripherals have all rearranged and just assigning them back won’t work! Thanks, Paul.
Hi.
Most examples should work by reassigning the GPIOs in the code.
Regards,
Sara
With the ESP32-Cam AI-Thinker, can GPIO 0 be used as an output pin?
Hi.
GPIO 0 is a strapping pin.
You can use it after uploading the code to the board. You must disconnect all peripherals connected to that GPIO at the time of uploading.
Regards,
Sara
salut,
je veux ajouter un bouton poussoir pour mon ESP 32 CAM dont le but est pour capter une image et le visualiser sur mon écran de l’ordinateur