Quadhac

Das ESP32Cam Modul hat noch ein paar freie Pins, wenn man die integrierte SD-Karte nicht verwendet. Mit zwei einfachen kleinen Servos und einer kleinen Platine wird daraus schnell eine Quadhac, eine Quick And Dirty Home Assistant Camera. Nicht schön, aber funktionabel. Mit ihr kann man über ESPHome die Kamera aus allen Teilen der Welt zu Hause steuern, um das Heim immer schön im Focus zu behalten. Alle Druckdateien und Gerber-Files gibt es hier.

Druckdateien:

Für die Steuerung kann in Home Assistant über ESPHome eine Steuerung erstellt werden. Den Code dafür gibt es unten. Dieser wird in einer *.yaml Datei gespeichert und kann z.B. über das ESPHome Programm in der Kommandozeile erstellt werden. Dazu sind folgende Befehle hilfreich, wenn man sich im Ordner der *.yaml Datei befindet:

Zum Kompilieren der Datei –> esphome compile dateiname.yaml

Zum Hochladen der Datei –> esphome upload dateiname.yaml

Wenn alles geklappt hat, kann man es über die ESPHome Einstellung in Home Assistant einbinden. Dann kann es z.B. so aussehen:

Hier der Code für die ESPHome Umgebung:

esphome: # Name der Kamera an diversen Stellen von cam04 anpassen.
  name: cam04

esp32:
  board: esp32cam
  framework:
    type: arduino

api:
  password: "*****" # Ein beliebiges PW für die Anmeldung in Home Assistent

ota:
  - platform: esphome
    password: "*****" # PW für den Zugang zu "Over The Air"

wifi:
  ssid: "*****" # Eigener Netzwerkname
  password: "*****" # Eigenes PW
  fast_connect: false
  ap:
    ssid: "cam04 Fallback Hotspot"
    password: "*****" # PW vom Notfallhotspot, falls die Anmeldung nicht klappt
  # manual_ip: # Das Auskommentierte ist nur notwendig, wenn man keine feste IP vom Router bekommt
    # static_ip: 192.168.0.222
    # gateway: 192.168.1.1
    # subnet: 255.255.255.0
  reboot_timeout: 60s  # statt 15s oder 20s

captive_portal:

esp32_camera:
  name: cam04
  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
  resolution: 640x480
  # vertical_flip: False
  # horizontal_mirror: True

esp32_camera_web_server:
  - port: 8080
    mode: stream
  - port: 8081
    mode: snapshot

output: # Hier werden die Pins für die Servos belegt.
  - platform: ledc
    id: servo_h
    pin: GPIO14
    frequency: 50 Hz
  - platform: ledc
    id: servo_v
    pin: GPIO13
    frequency: 50 Hz
  - platform: gpio
    pin: GPIO4
    id: led_flash

servo:
  - id: horizontal_servo
    output: servo_h
    min_level: 2.5%
    max_level: 12.5%
  - id: vertical_servo
    output: servo_v
    min_level: 2.5%
    max_level: 12.5%

# Option 1: Kontrolle über Home Assistant
number:
  - platform: template
    name: "Servo Horizontal cam04"
    min_value: 0
    max_value: 180
    step: 1
    set_action:
      then:
        - servo.write:
            id: horizontal_servo
            level: !lambda return (x - 90) / 90;
  - platform: template
    name: "Servo Vertikal cam04"
    min_value: 0
    max_value: 180
    step: 1
    set_action:
      then:
        - servo.write:
            id: vertical_servo
            level: !lambda return (x - 90) / 90;

light:
  - platform: binary
    name: "Kamera-LED cam04"
    output: led_flash


logger:
  level: DEBUG