Metainformationen zur Seite
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
digitales:hardware:esp:esp32-cam [02.04.2025] – [Troubleshooting] csdigitales:hardware:esp:esp32-cam [25.05.2025] (aktuell) – [ESP32-CAM Dokumentation] cs
Zeile 1: Zeile 1:
 {{tag>Code ESP8266 Hardware Nodemcu Nützliche_Links Cam}} {{tag>Code ESP8266 Hardware Nodemcu Nützliche_Links Cam}}
  
-====== ESP32-Cam ======+====== ESP32-CAM Dokumentation ======
  
-{{..:..:esp32cam.jpg?400&direct|esp32cam.jpg}}+{{..:esp32cam.jpg?400&direct|esp32cam.jpg}}
  
-{{..:..:esp32cam_programming.png?632x353&direct}}+{{..:esp32cam_programming.png?632x353&direct}}
  
-Das Board hat einen ESP32-S Chip. 
  
-Dieses Board muss erstmalig mit einem [[..:sonstiges:ftdi-adapter|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.+===== Übersicht =====
  
-Anschließend muss das **Kabel** wieder **entfernt** und das Board **neu gestartet/resetet** werden.+Das ESP32-CAM Board basiert auf dem ESP32-S Chip und bietet eine kostengünstige Lösung für Kameraanwendungen in IoT-Projekten. Es verfügt über einen OV2640 Kamerasensor und unterstützt verschiedene Betriebsmodi.
  
-Oder es wird das [[.:esp32-cam-mb]] verwendet.+===== Hardware Eigenschaften =====
  
-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)//+  * Mikrocontroller: ESP32-
 +  * Kamera: OV2640 (2MP) 
 +  * Flashlicht: Integrierte weiße LED 
 +  * GPIO-Pins: Mehrere verfügbare Pins für Erweiterungen 
 +  * Kommunikation: WLAN 2.4 GHz 
 +  * Stromversorgung: 5V
  
-  - http://192.168.1.6:81/stream[[http://192.168.1.6:81/stream|http://192.168.1.6:81/stream]] oder +===== Ersteinrichtung =====
-  - [[http://192.168.1.6:81/stream/1|http://192.168.1.6:81/stream/1]]+
  
 +==== Flashen des Boards ====
  
-===== Troubleshooting =====+Das Board muss für die erste Programmierung in den Flash-Modus versetzt werden:
  
-  * [[https://randomnerdtutorials.com/esp32-cam-troubleshooting-guide/|ESP32-CAM Troubleshooting Guide: Most Common Problems Fixed]] +  - Verbinden Sie das Board über einen USB-zu-TTL-Adapter (z.B. FTDI oder CP2102) mit Ihrem Computer 
-  [[https://youtu.be/NvmyCBbTGPs|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.+  - Stellen Sie folgende Verbindungen her: 
 +    * ESP32-CAM GND → Adapter GND 
 +    ESP32-CAM 5V/3.3V → Adapter 5V/3.3V (je nach Adapter) 
 +    * ESP32-CAM U0R (RX) → Adapter TX 
 +    * ESP32-CAM U0T (TX) → Adapter RX 
 +  - Verbinden Sie GPIO0 (IO0mit GND, um den Flash-Modus zu aktivieren 
 +  - Drücken Sie kurz den RST-Button auf der Rückseite des Boards 
 +  - Führen Sie das Flashen mit Arduino IDE, ESPHome oder esptool durch 
 +  - Nach dem Flashen: Entfernen Sie die Verbindung zwischen GPIO0 und GND 
 +  Drücken Sie erneut den RST-Button, um das Board neu zu starten
  
-{{:digitales:esp32cam_antistatische-folie.jpg?400&direct}} \\  \\ [[..:esp32cam_antistatische-folie.jpg?media=digitales:hardware:esp32cam_antistatische-folie.jpg|{{..:esp32cam_antistatische-folie.jpg?400|esp32cam_antistatische-folie.jpg}}]] [[:legal:impressum|Impressum]] / [[:legal:datenschutz|Datenschutz]] / [[:legal:kontakt|Kontakt]]+===== Integration in Home Assistant mit ESPHome =====
  
 +[[digitales:hardware:esp:erlaeuterungen_zum_code_esp32_cam]]
  
-===== Nützliche Links ===== 
- 
-  * [[https://esphome.io/components/esp32_camera.html|ESPHome ESP32 Camera Component]] 
-  * [[https://randomnerdtutorials.com/projects-esp32-cam/|60+ ESP32-CAM Projects, Tutorials and Guides with Arduino IDE]] 
  
-===== Code =====+==== Basis-Konfiguration ====
  
-<file yaml esp32-cam-01.yaml>+<code yaml>
 substitutions: substitutions:
   devicename: esp-cam   devicename: esp-cam
Zeile 50: Zeile 60:
     type: arduino     type: arduino
  
-Enable logging+Aktiviere Logging
 logger: logger:
   level: WARN   level: WARN
  
 +# Externe Pakete einbinden
 packages: packages:
   wifi: !include packages/wifi.yaml   wifi: !include packages/wifi.yaml
   mqtt: !include packages/mqtt.yaml   mqtt: !include packages/mqtt.yaml
   ota:  !include packages/ota.yaml   ota:  !include packages/ota.yaml
 +</code>
  
-# Enable Home Assistant API +==== Kamera-Konfiguration ====
-# 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+
  
 +<code yaml>
 esp32_camera: esp32_camera:
   name: $upper_devicename   name: $upper_devicename
Zeile 127: Zeile 91:
   max_framerate: 10fps   max_framerate: 10fps
  
-  # Image settings+  # Bildeinstellungen
   contrast: 0   contrast: 0
   special_effect: none   special_effect: none
-  # exposure settings+  # Belichtungseinstellungen
   aec_mode: auto   aec_mode: auto
   aec2: false   aec2: false
   ae_level: 0   ae_level: 0
   aec_value: 300   aec_value: 300
-  # gain settings+  # Verstärkungseinstellungen
   agc_mode: auto   agc_mode: auto
   agc_gain_ceiling: 2x   agc_gain_ceiling: 2x
   agc_value: 0   agc_value: 0
-  # white balance setting+  # Weißabgleich-Einstellung
   wb_mode: auto   wb_mode: auto
-  # orientation+  # Ausrichtung
   vertical_flip: False   vertical_flip: False
   horizontal_mirror: False   horizontal_mirror: False
 +</code>
  
-  on_stream_start: 
-    light.turn_on: cam_streaming 
-  on_stream_stop: 
-    light.turn_off: cam_streaming 
  
-camera webserver+==== Webserver und LED-Steuerung ==== 
 + 
 +<code yaml> 
 +Kamera-Webserver
 esp32_camera_web_server: esp32_camera_web_server:
   - port: 80   - port: 80
Zeile 165: Zeile 129:
  
 light: light:
-  # For the white LED.+  # Für die weiße LED
   - platform: monochromatic   - platform: monochromatic
     output: gpio_4     output: gpio_4
     name: $upper_devicename Flash LED     name: $upper_devicename Flash LED
-  # For the red status LED.+  # Für die rote Status-LED
   - platform: status_led   - platform: status_led
     name: $upper_devicename Status LED     name: $upper_devicename Status LED
Zeile 176: Zeile 140:
       number: GPIO33       number: GPIO33
       inverted: true       inverted: true
 +</code>
  
-switch: +==== WLAN-Konfiguration (Beispiel) ====
-  platform: restart +
-    name: $upper_devicename Restart+
  
-binary_sensor+<code yaml> 
-  - platformstatus +wifi
-    name$upper_devicename Status+  # Feste IP-Adresse (passen Sie diese an Ihr Netzwerk an) 
 +  manual_ip
 +    static_ip192.168.178.40 
 +    gateway: 192.168.178.1 
 +    subnet: 255.255.255.0 
 +  # Alternative: Dynamische IP 
 +  # ssid: "IHR_WLAN_NAME" 
 +  # password: "IHR_WLAN_PASSWORT" 
 +</code>
  
  
-</file>+===== Kamera-Zugriff ===== 
 + 
 +Nach erfolgreicher Einrichtung können Sie auf die Kamera zugreifen: 
 + 
 +  * Livestream: ''[[http://[KAMERA-IP]:80/]]'' 
 +  * Einzelbild: ''[[http://[KAMERA-IP]:81/]]'' 
 +  * In MotionEye einbinden: ''[[http://[KAMERA-IP]:81/]]'' 
 + 
 +===== Troubleshooting ===== 
 + 
 +==== Bekannte Probleme ==== 
 + 
 +  - **Niedrige Bildrate (FPS)** 
 +    * Mögliche Ursache: Interferenzen zwischen IO0 und der WLAN-Antenne 
 +    * Lösung: Abschirmung des IO0-Pins mit antistatischer Folie oder durch Berührung 
 +    * Alternativ: Positionierung des Boards entfernt von Störquellen 
 +  - **Verbindungsprobleme** 
 +    * Überprüfen Sie die Stromversorgung (mindestens 5V/1A empfohlen) 
 +    * Stellen Sie sicher, dass sich das Board in Reichweite des WLAN-Routers befindet 
 +    * Versuchen Sie eine Firmware-Aktualisierung 
 + 
 +{{:digitales:esp32cam_antistatische-folie.jpg?direct&400|Abschirmung des IO0-Pins mit antistatischer Folie}} 
 +===== Nützliche Links ===== 
 + 
 +  * [[https://ai-thinker.com/product/esp32-cam/|ESP32-CAM AI-Thinker Datenblatt]] 
 +  * [[https://esphome.io/components/esp32_camera.html|ESPHome Dokumentation für ESP32-Camera]] 
 +  * [[https://github.com/espressif/esp32-camera|GitHub Repository mit Beispielcode]] 
 +  * [[https://randomnerdtutorials.com/esp32-cam-camera-pin-gpios/|Pinout-Diagramm und technische Details]]