Blame | Last modification | View Log | RSS feed
#pragma once#include <Arduino.h>#include "esp_camera.h"#include <esp_err.h>// Select camera model//#define CAMERA_MODEL_WROVER_KIT//#define CAMERA_MODEL_ESP_EYE//#define CAMERA_MODEL_M5STACK_PSRAM//#define CAMERA_MODEL_M5STACK_V2_PSRAM//#define CAMERA_MODEL_M5STACK_WIDE//#define CAMERA_MODEL_M5STACK_ESP32CAM#define CAMERA_MODEL_AI_THINKER//#define CAMERA_MODEL_TTGO_T_JOURNAL#if defined(CAMERA_MODEL_WROVER_KIT)//// ESP WROVER// https://dl.espressif.com/dl/schematics/ESP-WROVER-KIT_SCH-2.pdf//#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#define LED_PIN 2 // A status led on the RGB; could also use pin 0 or 4#define LED_ON HIGH //#define LED_OFF LOW //// #define LAMP_PIN x // No LED FloodLamp.#elif defined(CAMERA_MODEL_ESP_EYE)//// ESP-EYE// https://twitter.com/esp32net/status/1085488403460882437#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#define LED_PIN 21 // Status led#define LED_ON HIGH //#define LED_OFF LOW //// #define LAMP_PIN x // No LED FloodLamp.#elif defined(CAMERA_MODEL_M5STACK_PSRAM)//// ESP32 M5STACK//#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 Stack status/illumination LED details unknown/unclear// #define LED_PIN x // Status led// #define LED_ON HIGH //// #define LED_OFF LOW //// #define LAMP_PIN x // LED FloodLamp.#elif defined(CAMERA_MODEL_M5STACK_V2_PSRAM)//// ESP32 M5STACK V2//#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 status/illumination LED details unknown/unclear// #define LED_PIN x // Status led// #define LED_ON HIGH //// #define LED_OFF LOW //// #define LAMP_PIN x // LED FloodLamp.#elif defined(CAMERA_MODEL_M5STACK_WIDE)//// ESP32 M5STACK WIDE//#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 status/illumination LED details unknown/unclear// #define LED_PIN x // Status led// #define LED_ON HIGH //// #define LED_OFF LOW //// #define LAMP_PIN x // LED FloodLamp.#elif defined(CAMERA_MODEL_M5STACK_ESP32CAM)//// Common M5 Stack 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// Note NO PSRAM,; so maximum working resolution is XGA 1024×768// M5 Stack status/illumination LED details unknown/unclear// #define LED_PIN x // Status led// #define LED_ON HIGH //// #define LED_OFF LOW //// #define LAMP_PIN x // LED FloodLamp.#elif defined(CAMERA_MODEL_AI_THINKER)//// AI Thinker// https://github.com/SeeedDocument/forum_doc/raw/master/reg/ESP32_CAM_V1.6.pdf//#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#define LED_PIN 33 // Status led#define LED_ON LOW // - Pin is inverted.#define LED_OFF HIGH //#define LAMP_PIN 4 // LED FloodLamp.#elif defined(CAMERA_MODEL_TTGO_T_JOURNAL)//// LilyGO TTGO T-Journal ESP32; with OLED! but not used here.. :-(#define PWDN_GPIO_NUM 0#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// TTGO T Journal status/illumination LED details unknown/unclear// #define LED_PIN 33 // Status led// #define LED_ON LOW // - Pin is inverted.// #define LED_OFF HIGH //// #define LAMP_PIN 4 // LED FloodLamp.#else// Well.// that went badly...#error "Camera model not selected, did you forget to uncomment it in myconfig?"#endifcamera_config_t camera_config = {.pin_pwdn = PWDN_GPIO_NUM,.pin_reset = RESET_GPIO_NUM,.pin_xclk = XCLK_GPIO_NUM,.pin_sscb_sda = SIOD_GPIO_NUM,.pin_sscb_scl = SIOC_GPIO_NUM,.pin_d7 = Y9_GPIO_NUM,.pin_d6 = Y8_GPIO_NUM,.pin_d5 = Y7_GPIO_NUM,.pin_d4 = Y6_GPIO_NUM,.pin_d3 = Y5_GPIO_NUM,.pin_d2 = Y4_GPIO_NUM,.pin_d1 = Y3_GPIO_NUM,.pin_d0 = Y2_GPIO_NUM,.pin_vsync = VSYNC_GPIO_NUM,.pin_href = HREF_GPIO_NUM,.pin_pclk = PCLK_GPIO_NUM,.xclk_freq_hz = 20000000, //XCLK 20MHz or 10MHz.ledc_timer = LEDC_TIMER_0,.ledc_channel = LEDC_CHANNEL_0,.pixel_format = PIXFORMAT_JPEG, //YUV422,GRAYSCALE,RGB565,JPEG.frame_size = FRAMESIZE_SXGA, //QQVGA-UXGA Do not use sizes above QVGA when not JPEG.jpeg_quality = 8, //0-63 lower number means higher quality.fb_count = 2, //if more than one, i2s runs in continuous mode. Use only with JPEG.fb_location = CAMERA_FB_IN_PSRAM,.grab_mode = CAMERA_GRAB_LATEST};int lampChannel = 7; // a free PWM channel (some channels used by camera)const int pwmfreq = 50000; // 50K pwm frequencyconst int pwmresolution = 9; // duty cycle bit rangeconst int pwmMax = pow(2,pwmresolution)-1;inline esp_err_t init_camera() {//initialize the cameraSerial.print("Camera init... ");esp_err_t err = esp_camera_init(&camera_config);if (err != ESP_OK) {delay(100); // need a delay here or the next serial o/p gets missedSerial.printf("\n\nCRITICAL FAILURE: Camera sensor failed to initialise.\n\n");Serial.printf("A full (hard, power off/on) reboot will probably be needed to recover from this.\n");return err;} else {Serial.println("succeeded");// Get a reference to the sensorsensor_t* s = esp_camera_sensor_get();// Dump camera module, warn for unsupported modules.switch (s->id.PID) {case OV9650_PID: Serial.println("WARNING: OV9650 camera module is not properly supported, will fallback to OV2640 operation"); break;case OV7725_PID: Serial.println("WARNING: OV7725 camera module is not properly supported, will fallback to OV2640 operation"); break;case OV2640_PID: Serial.println("OV2640 camera module detected"); break;case OV3660_PID: Serial.println("OV3660 camera module detected"); break;default: Serial.println("WARNING: Camera module is unknown and not properly supported, will fallback to OV2640 operation");}s->set_sharpness(s, 1);s->set_vflip(s, 1);//s->set_hmirror(s, 1);}return ESP_OK;}