From e8fcf9592db9b51036dd3122072d95f3560f0bd9 Mon Sep 17 00:00:00 2001 From: Tim van der Heide Date: Fri, 25 Apr 2025 12:44:19 +0200 Subject: [PATCH] Add support for M5Stack Timer camera --- ESP32_PrusaConnectCam/mcu_cfg.h | 15 +-- .../module_M5Stack_TimerCam.h | 91 +++++++++++++++++++ ESP32_PrusaConnectCam/module_templates.h | 5 +- 3 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 ESP32_PrusaConnectCam/module_M5Stack_TimerCam.h diff --git a/ESP32_PrusaConnectCam/mcu_cfg.h b/ESP32_PrusaConnectCam/mcu_cfg.h index a84bb2b..b2e509c 100644 --- a/ESP32_PrusaConnectCam/mcu_cfg.h +++ b/ESP32_PrusaConnectCam/mcu_cfg.h @@ -13,13 +13,14 @@ #define _MCU_CFG_H_ /* ----------------- CAMERA TYPE ---------------*/ -#define AI_THINKER_ESP32_CAM true -#define ESP32_WROVER_DEV false -#define CAMERA_MODEL_ESP32_S3_DEV_CAM false -#define CAMERA_MODEL_ESP32_S3_EYE_2_2 false -#define CAMERA_MODEL_XIAO_ESP32_S3_CAM false -#define CAMERA_MODEL_ESP32_S3_CAM false -#define ESP32_S3_WROOM_FREENOVE false +#define AI_THINKER_ESP32_CAM true +#define ESP32_WROVER_DEV false +#define CAMERA_MODEL_ESP32_S3_DEV_CAM false +#define CAMERA_MODEL_ESP32_S3_EYE_2_2 false +#define CAMERA_MODEL_XIAO_ESP32_S3_CAM false +#define CAMERA_MODEL_ESP32_S3_CAM false +#define ESP32_S3_WROOM_FREENOVE false +#define M5STACK_TIMERCAMERA false /* ---------------- BASIC MCU CFG --------------*/ #define SW_VERSION "1.1.2" ///< SW version diff --git a/ESP32_PrusaConnectCam/module_M5Stack_TimerCam.h b/ESP32_PrusaConnectCam/module_M5Stack_TimerCam.h new file mode 100644 index 0000000..e14e401 --- /dev/null +++ b/ESP32_PrusaConnectCam/module_M5Stack_TimerCam.h @@ -0,0 +1,91 @@ +/** + @file module_M5Stack_TimerCam.h + + @brief Definition of the M5Stack TimerCamera module + + @author Miroslav Pivovarsky + Contact: miroslav.pivovarsky@gmail.com + + https://docs.m5stack.com/en/unit/timercam + + Board configuration in the arduino IDE 2.3.2 + Tools -> Board -> ESP32 Arduino -> ESP32 Dev Module + Tools -> CPU Frequency -> 240MHz (WiFi/BT) + Tools -> Core debug level -> None + Tools -> Flash frequency -> 80MHz + Tools -> Flash Mode -> DIO + Tools -> Partition scheme -> Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) + + @bug: no know bug + +*/ + +#pragma once + +#include "mcu_cfg.h" + +#ifdef M5STACK_TIMERCAMERA + +/* --------------- CAMERA CFG -------------------*/ +#define PWDN_GPIO_NUM -1 ///< Power down control pin +#define RESET_GPIO_NUM 15 ///< Reset control pin +#define XCLK_GPIO_NUM 27 ///< External clock pin +#define SIOD_GPIO_NUM 25 ///< SCCB: SI/O data pin +#define SIOC_GPIO_NUM 23 ///< SCCB: SI/O control pin +#define Y9_GPIO_NUM 19 ///< SCCB: Y9 pin +#define Y8_GPIO_NUM 36 ///< SCCB: Y8 pin +#define Y7_GPIO_NUM 18 ///< SCCB: Y7 pin +#define Y6_GPIO_NUM 39 ///< SCCB: Y6 pin +#define Y5_GPIO_NUM 5 ///< SCCB: Y5 pin +#define Y4_GPIO_NUM 34 ///< SCCB: Y4 pin +#define Y3_GPIO_NUM 35 ///< SCCB: Y3 pin +#define Y2_GPIO_NUM 32 ///< SCCB: Y2 pin +#define VSYNC_GPIO_NUM 22 ///< Vertical sync pin +#define HREF_GPIO_NUM 26 ///< Line sync pin +#define PCLK_GPIO_NUM 21 ///< Pixel clock pin + +/* ------------------ MCU CFG ------------------*/ +#define BOARD_NAME F("M5Stack TimerCamera") ///< Board name +#define ENABLE_BROWN_OUT_DETECTION true ///< Enable brown out detection +#define ENABLE_PSRAM true ///< Enable PSRAM + +/* --------------- OTA UPDATE CFG --------------*/ +#define OTA_UPDATE_FW_FILE PSTR("ESP32_PrusaConnectCam.ino.bin") ///< OTA update firmware file name +#define FW_STATUS_LED_PIN 4 ///< GPIO pin for status FW update LED +#define FW_STATUS_LED_LEVEL_ON HIGH ///< GPIO pin level for status LED ON + +/* --------------- FLASH LED CFG ---------------*/ +#define ENABLE_CAMERA_FLASH false ///< Enable camera flash function +#define CAMERA_FLASH_DIGITAL_CTRL false ///< Enable camera flash digital control +#define CAMERA_FLASH_PWM_CTRL false ///< Enable camera flash PWM control +#define CAMERA_FLASH_NEOPIXEL false ///< Enable camera flash NeoPixel control +#define FLASH_GPIO_NUM 4 ///< Flash control pin +#define FLASH_NEOPIXEL_LED_PIN -1 ///< External flash control pin. RGB LED NeoPixel +#define FLASH_OFF_STATUS 0 ///< PWM intensity LED for OFF. 0-2^FLASH_PWM_RESOLUTION = 0-255 +#define FLASH_ON_STATUS 205 ///< PWM intensity LED for ON. limitation to 80%. 2^FLASH_PWM_RESOLUTION * 0.8% = 204 +#define FLASH_PWM_FREQ 2000 ///< frequency of pwm [240MHz / (100 prescale * pwm cycles)] = frequency +#define FLASH_PWM_CHANNEL 0 ///< channel 0 +#define FLASH_PWM_RESOLUTION 8 ///< range 1-20bit. 8bit = 0-255 range + +/* --------------- SD CARD CFG ---------------*/ +#define ENABLE_SD_CARD false ///< Enable SD card function +#define SD_PIN_CLK 14 ///< GPIO pin for SD card clock +#define SD_PIN_CMD 15 ///< GPIO pin for SD card command +#define SD_PIN_DATA0 2 ///< GPIO pin for SD card data 0 + +/* ---------- RESET CFG CONFIGURATION ----------*/ +#define CFG_RESET_PIN 37 ///< GPIO 12 is for reset CFG to default +#define CFG_RESET_LED_PIN 4 ///< GPIO for indication of reset CFG +#define CFG_RESET_LED_LEVEL_ON HIGH ///< GPIO pin level for status LED ON + +/* -------------- STATUS LED CFG ----------------*/ +#define STATUS_LED_ENABLE true ///< enable/disable status LED +#define STATUS_LED_GPIO_NUM 33 ///< GPIO pin for status LED +#define STATUS_LED_OFF_PIN_LEVEL LOW ///< GPIO pin level for status LED ON + +/* -------------- DHT SENSOR CFG ----------------*/ +#define DHT_SENSOR_ENABLE false ///< enable/disable DHT sensor +#define DHT_SENSOR_PIN 13 ///< GPIO pin for DHT sensor + +#endif // M5STACK_TIMERCAMERA +/* EOF */ diff --git a/ESP32_PrusaConnectCam/module_templates.h b/ESP32_PrusaConnectCam/module_templates.h index cb9e25d..5165ba2 100644 --- a/ESP32_PrusaConnectCam/module_templates.h +++ b/ESP32_PrusaConnectCam/module_templates.h @@ -14,7 +14,7 @@ #include "mcu_cfg.h" -#if ((AI_THINKER_ESP32_CAM + ESP32_WROVER_DEV + CAMERA_MODEL_ESP32_S3_DEV_CAM + CAMERA_MODEL_ESP32_S3_EYE_2_2 + CAMERA_MODEL_XIAO_ESP32_S3_CAM + CAMERA_MODEL_ESP32_S3_CAM + ESP32_S3_WROOM_FREENOVE) != 1) +#if ((AI_THINKER_ESP32_CAM + ESP32_WROVER_DEV + CAMERA_MODEL_ESP32_S3_DEV_CAM + CAMERA_MODEL_ESP32_S3_EYE_2_2 + CAMERA_MODEL_XIAO_ESP32_S3_CAM + CAMERA_MODEL_ESP32_S3_CAM + ESP32_S3_WROOM_FREENOVE + M5STACK_TIMERCAMERA) != 1) #error "Exactly one camera model must be defined as true." #endif @@ -39,6 +39,9 @@ #elif (true == ESP32_S3_WROOM_FREENOVE) #include "module_ESP32-S3_Wroom_Freenove.h" +#elif (true == M5STACK_TIMERCAMERA) +#include "module_M5Stack_TimerCam.h" + #else #error "No module selected"