Metainformationen zur Seite
  •  

Dies ist eine alte Version des Dokuments!


ESP32-Cam

esp32cam.jpg

Das Board hat einen ESP32-S Chip.

Dieses Board muss erstmalig mit einem FTDI-Adapter geflasht werden. Dafür sind die Pins GPIO0 (ID0) und GND miteinander zu verbinden. Zusätzlich muss der RST Button auf der Rückseite gedrückt werden. Nachdem die Verbindung zwischen den beiden Pins GPIO0 und GND entfernt wurde, muss das Board neu gestartet werden.

Anschließend muss das Kabel wieder entfernt und das Board neu gestartet/resetet werden.

Oder es wird das ESP32-CAM-MB verwendet.

Wird die Kamera mit mit dem Arduino-Sketch betrieben, dann lautet die Kamera-IP in motioneye (ersetze 192.168.1.6 durch die IP-Adresse deines Boards)

Troubleshooting

  • YouTube ESP32 Camera slow video
    Camera1 machte keinerlei Probleme mit der Frame Rate. Bei der zweiten Kamera konnte nur eine befriedigende Frame Rate durch die Abdeckung von IO0 mit dem Finger oder einer antistatischer Folie erreicht werden. Möglicherweise werden dadurch Interferenzen zwischen IO0 und der Antenne abgeschirmt.

    Anscheinend ist die Antenne nicht auf die richtige Frequenz eingestellt, da sich die Frequenz der Antenne durch berühren ändert. Auch die Erwärmung ist dafür ein guter Hinweis. Und das Anbringen einer antistatischen Folie über der Antenne beweist dieses ebenfalls.

    Apparently the antenna is not tuned to the correct frequency as touching changes the frequency of the antenna. Warming is also a good indication of this. And putting an anti-static foil over the antenna proves this as well.

esp32cam_antistatische-folie.jpg

esp32cam_antistatische-folie.jpg Impressum / Datenschutz / Kontakt

Code

esp32-cam-01.yaml
substitutions:
  devicename: esp-cam
  upper_devicename: ESP32-Cam

esphome:
  name: $devicename
  friendly_name: $upper_devicename

esp32:
  board: esp32dev
  framework:
    type: arduino
 
# Enable logging
logger:
  level: WARN

packages:
  wifi: !include packages/wifi.yaml
  mqtt: !include packages/mqtt.yaml
  ota:  !include packages/ota.yaml
 
# Enable Home Assistant API
# Für ESP32 Camera Component siehe: https://esphome.io/components/esp32_camera.html
# Für lambda siehe: https://github.com/esphome/esphome/pull/3090
api:
  services:
    # change camera parameters on-the-fly
    - service: camera_set_param
      variables:
        name: string
        value: int
      then:
        - lambda: |-
            bool state_return = false;
            if (("contrast" == name) && (value>= -2) && (value <= 2)) { id(my_camera).set_contrast(value); state_return = true; }
            if (("brightness" == name) && (value>= -2) && (value <= 2)) { id(my_camera).set_brightness(value); state_return = true; }
            if (("saturation" == name) && (value>= -2) && (value <= 2)) { id(my_camera).set_saturation(value); state_return = true; }
            if (("special_effect" == name) && (value>= 0U) && (value <= 6U)) { id(my_camera).set_special_effect((esphome::esp32_camera::ESP32SpecialEffect)value); state_return = true; }
            if (("aec_mode" == name) && (value>= 0U) && (value <= 1U)) { id(my_camera).set_aec_mode((esphome::esp32_camera::ESP32GainControlMode)value); state_return = true; }
            if (("aec2" == name) && (value>= 0U) && (value <= 1U)) { id(my_camera).set_aec2(value); state_return = true; }
            if (("ae_level" == name) && (value>= -2) && (value <= 2)) { id(my_camera).set_ae_level(value); state_return = true; }
            if (("aec_value" == name) && (value>= 0U) && (value <= 1200U)) { id(my_camera).set_aec_value(value); state_return = true; }
            if (("agc_mode" == name) && (value>= 0U) && (value <= 1U)) { id(my_camera).set_agc_mode((esphome::esp32_camera::ESP32GainControlMode)value); state_return = true; }
            if (("agc_value" == name) && (value>= 0U) && (value <= 30U)) { id(my_camera).set_agc_value(value); state_return = true; }
            if (("agc_gain_ceiling" == name) && (value>= 0U) && (value <= 6U)) { id(my_camera).set_agc_gain_ceiling((esphome::esp32_camera::ESP32AgcGainCeiling)value); state_return = true; }
            if (("wb_mode" == name) && (value>= 0U) && (value <= 4U)) { id(my_camera).set_wb_mode((esphome::esp32_camera::ESP32WhiteBalanceMode)value); state_return = true; }
            if (("test_pattern" == name) && (value>= 0U) && (value <= 1U)) { id(my_camera).set_test_pattern(value); state_return = true; }
            if (("vertical_flip" == name) && (value>= 0U) && (value <= 1U)) { id(my_camera).set_vertical_flip(value); state_return = true; }
            if (("horizontal_mirror" == name) && (value>= 0U) && (value <= 1U)) { id(my_camera).set_horizontal_mirror(value); state_return = true; }
            if (("jpeg_quality" == name) && (value>= 10U) && (value <= 63U)) { id(my_camera).set_jpeg_quality(value); state_return = true; }
 
            if (true == state_return) {
              id(my_camera).update_camera_parameters();
            }
            else {
              ESP_LOGW("esp32_camera_set_param", "Error in name or data range");
            }
wifi:
  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.178.40
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.178.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0

captive_portal:

time:
  - platform: homeassistant
    id: esptime

esp32_camera:
  name: $upper_devicename
  id: my_camera
  external_clock:
    pin: GPIO0
    frequency: 20MHz
  i2c_pins:
    sda: GPIO26
    scl: GPIO27
  data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
  vsync_pin: GPIO25
  href_pin: GPIO23
  pixel_clock_pin: GPIO22
  power_down_pin: GPIO32
  idle_framerate: 0.1fps
  max_framerate: 10fps
 
  # Image settings
  contrast: 0
  special_effect: none
  # exposure settings
  aec_mode: auto
  aec2: false
  ae_level: 0
  aec_value: 300
  # gain settings
  agc_mode: auto
  agc_gain_ceiling: 2x
  agc_value: 0
  # white balance setting
  wb_mode: auto
  # orientation
  vertical_flip: False
  horizontal_mirror: False

  on_stream_start:
    light.turn_on: cam_streaming
  on_stream_stop:
    light.turn_off: cam_streaming
 
# camera webserver
esp32_camera_web_server:
  - port: 80
    mode: stream
  - port: 81
    mode: snapshot

output:
  - platform: ledc
    pin: GPIO4
    id: gpio_4
    channel: 2
    frequency: 500Hz

light:
  # For the white LED.
  - platform: monochromatic
    output: gpio_4
    name: $upper_devicename Flash LED
  # For the red status LED.
  - platform: status_led
    name: $upper_devicename Status LED
    id: cam_streaming
    pin:
      number: GPIO33
      inverted: true

switch:
  - platform: restart
    name: $upper_devicename Restart

binary_sensor:
  - platform: status
    name: $upper_devicename Status