Seeed Xaio with OV5640 camera - success

I finally managed to get this chip and camera working and into HA. Working on on all the control now.

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  name_add_mac_suffix: false
  platformio_options:
    board_build.mcu: esp32s3
    build_flags: -DBOARD_HAS_PSRAM
    board_build.arduino.memory_type: qio_opi
    board_build.f_flash: 80000000L
    board_build.flash_mode: qio 
 # https://wiki.seeedstudio.com/XIAO_ESP32S3_esphome/

  project:
    name: esphome.web
    version: '1.0'

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: arduino
    version: latest

substitutions:
  name: esphome-web-20c368
  friendly_name: Seeed Xaio w/Camera 20C368
  # Pin definitions
  camera_sda_pin: GPIO40
  camera_scl_pin: GPIO39
  camera_data_pins: GPIO15, GPIO17, GPIO18, GPIO16, GPIO14, GPIO12, GPIO11, GPIO48
  camera_vsync_pin: GPIO38
  camera_href_pin: GPIO47
  camera_pclk_pin: GPIO13
  camera_xclk_pin: GPIO10  #External clock
  camera_power_pin: GPIO1 #use to turn camera on an off?
  user_led_pin: GPIO21
  camera_max_framerate: '15fps'
  camera_jpeg_quality: '10'
  camera_vertical_flip: 'true'
  camera_horizontal_mirror: 'true'
  camera_contrast: '0'
  camera_brightness: '0'
  camera_saturation: '0'
  camera_special_effect: 'none'
  camera_aec_mode: 'auto'
  camera_aec2: 'false'
  camera_ae_level: '0'
  camera_aec_value: '300'
  camera_agc_mode: 'auto'
  camera_agc_value: '0'
  camera_agc_ceiling: '2x'
  camera_white_balance: 'auto'

# Camera configuration
esp32_camera:
  name: "Seeed XIAO ESP32-S3 Camera"
  id: seeed_camera
  #connection options
  data_pins:  
    - GPIO15
    - GPIO17
    - GPIO18
    - GPIO16
    - GPIO14
    - GPIO12
    - GPIO11
    - GPIO48
  vsync_pin: ${camera_vsync_pin}
  href_pin: ${camera_href_pin}
  pixel_clock_pin: ${camera_pclk_pin}
  external_clock: 
    pin: ${camera_xclk_pin}
    frequency: 12MHz
  i2c_pins:
    sda: ${camera_sda_pin}
    scl: ${camera_scl_pin}
  #power_down_pin: !!! done by software switch GPIO1

  #frame settings  
  max_framerate: ${camera_max_framerate}
  idle_framerate: 0.1fps #default
  
  #Image Settings
  resolution: 1280X1024
  jpeg_quality: ${camera_jpeg_quality}
  vertical_flip: ${camera_vertical_flip}
  horizontal_mirror: ${camera_horizontal_mirror}
  brightness: ${camera_brightness}
  contrast: ${camera_contrast}
  saturation: ${camera_saturation}
  special_effect: ${camera_special_effect}

  #Exposure settings
  aec_mode: ${camera_aec_mode}
  aec2: ${camera_aec2}
  ae_level: ${camera_ae_level}
  aec_value: ${camera_ae_level}
  
  #Sensor gain settings
  agc_mode: ${camera_aec_mode}
  agc_gain_ceiling: ${camera_agc_ceiling}
  agc_value: ${camera_agc_value}  
  
  #White balance settings
  wb_mode: ${camera_white_balance}
  
web_server:
  
packages:
  device_base: !include soup_device_base.yaml
  camera_config: !include z_config_ov5640_camera.yaml 
    
switch:
  - platform: template
    name: "Camera Control"
    id: camera_control_template
    optimistic: True
    turn_on_action: 
      then:
        - switch.turn_on: camera_power_output
    turn_off_action: 
      then:
        - switch.turn_off: camera_power_output    
  
  - platform: restart
    id: seecd_restart
    name: "Camera Restart" 
  
  - platform: gpio
    pin: ${camera_power_pin}
    id: camera_power_output
    name: "camera output"

  - platform: template
    name: "Reset Camera"
    id: reset_camera_settings
    turn_on_action: # Reset values to default
      - lambda: |-
          // Set camera to default values using substitutions and proper conversions
          id(seeed_camera).set_contrast(0);
          id(seeed_camera).set_brightness(0);     
      - switch.turn_off: reset_camera_settings  # Ensure the switch is momentary
           
light:
  - platform: monochromatic
    output: onboard_user_led
    name: "Onboard LED"
    id: onboard_led

output:
  - platform: ledc
    pin: ${user_led_pin}
    id: onboard_user_led
    frequency: 5000
    inverted: true #aligns switch and LED 

sensor: 
  - platform: homeassistant
    id: camera_jpeg_quality
    entity_id: input_number.camera_jpeg_quality

  - platform: homeassistant
    id: camera_vertical_flip
    entity_id: input_boolean.camera_vertical_flip

  - platform: homeassistant
    id: camera_horizontal_mirror
    entity_id: input_boolean.camera_horizontal_mirror

  - platform: homeassistant
    id: camera_brightness
    entity_id: input_number.camera_brightness

  - platform: homeassistant
    id: camera_contrast
    entity_id: input_number.camera_contrast

  - platform: homeassistant
    id: camera_saturation
    entity_id: input_number.camera_saturation

  - platform: homeassistant
    id: camera_special_effect
    entity_id: input_select.camera_special_effect

  - platform: homeassistant
    id: camera_aec_mode
    entity_id: input_select.camera_aec_mode

  - platform: homeassistant
    id: camera_aec2
    entity_id: input_boolean.camera_aec2

  - platform: homeassistant
    id: camera_ae_level
    entity_id: input_number.camera_ae_level

  - platform: homeassistant
    id: camera_ae_value
    entity_id: input_number.camera_ae_value 
   
  - platform: homeassistant
    id: camera_agc_mode
    entity_id: input_select.camera_agc_mode

  - platform: homeassistant
    id: camera_agc_ceiling
    entity_id: input_number.camera_agc_ceiling

  - platform: homeassistant
    id: camera_agc_value
    entity_id: input_number.camera_agc_value

  - platform: homeassistant
    id: camera_white_balance
    entity_id: input_select.camera_white_balance       

1 Like