Mit der ESP32 Cam gibt es eine günstige und kompakte Alternative zu den gängigen IP Kameras, die üblicherweise zur Überwachung eingesetzt werden. Dadurch kann man entweder einen Livestream einrichten und diesen permanent ansehen, oder z.B. regelmäßige Standaufnahmen (Wildkamera) aufnehmen und speichern.
Dabei ist der ESP gleichzeitig auch für weitere Projekte einsetzbar, da noch viele IO Pins frei sind. In diesem Tutorial schauen wir uns die Schritte an, die dafür notwendig sind und flashen die ESP32 Cam Software. Anschließend konfigurieren wir die Kamera und erstellen einen Livestream, der in verschiedene Smart Home Systeme eingebunden, sowie vom Smartphone aus aufgerufen werden kann.
Zubehör
Wer bereits einen ESP8266 mit genügend Pins hat, kann theoretisch eine OV2640 oder eine OV7670 nehmen und verbinden. Dies ist aber in den seltensten Fällen von Vorteil, da dies mehr Arbeit ist und in den meisten Fällen auch teurer wird. Allerdings gibt es für wenig Geld bereits kombinierte Module (ESP32 + Camera). Hier muss nichts mehr gelötet werden und man kann direkt starten. Lediglich ein serieller USB Adapter wird benötigt.
Ich habe folgende Komponenten benutzt:
- ESP32 Kamera Modul (kombiniert)
- FT232RL Adapter (USB zu TTL)
- Female-Female Jumper Kabel
Oft gibt es auch Sets mit allen Teilen zu kaufen, aber einige Bastler werden Jumper Kabel sowie einen USB-TTL Adapter sowieso rumliegen haben.
Anschluss und Verkabelung der ESP32 Cam per seriellem USB Port
Das ESP32 Modul mit Kamera hat im Gegensatz zu dem NodeMCU Development Board keinen USB Anschluss und muss daher über einen Adapter an den Computer angeschlossen werden. Dafür nutzen wir den roten FT232 USB-TTL Serial Adapter. Dieser kann 3.3V oder 5V Spannung abgeben. Achte darauf, dass der Jumper auf 5V eingestellt ist. Von Oben sieht das ESP Board folgendermaßen aus:
Die Kamera ist übrigens sehr einfach zu montieren. Dazu musst du nur die Halterung um 90° aufklappen und das Ende des Flachbandkabels hineinlegen. Anschließend schließen wir die Halterung wieder und die kleine Kamera ist befestigt.
Die Verkablung mit dem seriellen USB Adapter ist wie folgt:
ESP32 Cam Modul | FT232 USB-TTL Serial Adapter |
---|---|
5V | VCC (5V) |
UOR | Tx |
UOT | Rx |
GND | GND |
Hier siehst du das ganze noch einmal als schematischen Aufbau:
Nun kannst du den FT232 Adapter an deinen Computer anschließen. Es sollte sofort ein neues Gerät erkannt worden sein.
ESP32 Cam Code anpassen und flashen
Falls du bisher noch keinen ESP8266 mit der Arduino IDE geflasht hast, solltest du zunächst einen Blick in dieses Tutorial werfen, welches die Grundlagen erklärt.
ESP8266: Arduino IDE für den ESP32 installieren
- In der Arduino IDE navigieren wir zu Preferences > Additional Board Manager URLs und fügen folgendes ein:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- Anschließend wechseln wir zu Tools > Board > Board Manager und installieren „ESP32 by Espressif Systems“ (suche nach ESP32).
- Zu guter Letzt wählen wir unter Tools > Board dieses Board aus: DOIT ESP32 DEVKIT V1. Unter Tools > Port solltest du außerdem sehen, wo der ESP angeschlossen ist (bspw. COM11).
Nun sind wir bereit unseren Code zu übertragen. Hierfür gibt es bereits ein fertiges Beispielprojekt, welches einen Kamera-Server auf dem NodeMCU aufsetzt. Das Projekt kannst du folgendermaßen importieren:
File > Examples > ESP32 > Camera > CameraWebServer
Hier müssen wir ein paar Zeilen anpassen. Zunächst einmal muss #define CAMERA_MODEL_WROVER_KIT
mit zwei Slashes (//
) auskommentiert werden und #define CAMERA_MODEL_AI_THINKER
wiederum einkommentiert werden:
//#define CAMERA_MODEL_WROVER_KIT #define CAMERA_MODEL_AI_THINKER
Zuletzt müssen die Werte für ssid
(Name deines Wlan Netzes) und password
angepasst werden. Danach kannst du den Code bereits kompilieren (Haken / Verify) und anschließend auf den verbunden ESP32 hochladen.
Erster Test der Kamera
Sobald der Upload erfolgreich war, kannst du den seriellen Monitor öffnen (unter Tools). Falls hier nichts sichtbar ist, kannst du den ESP mit dem Reset Knopf (RST) auf der Rückseite neu starten. Anschließend siehst du folgenden Screen:
Am Ende ist die interne IP Adresse sichtbar (192.168.1.12 in meinem Fall). Diese IP geben wir im Browser eines anderen Geräts, das im selben Netz ist, ein.
Auf der linken Seite sind nun viele Optionen sichtbar. So können wir zum Beispiel die Auflösung anpassen (eine höhere Auflösung führt zu einer niedrigeren Frame Rate). Natürlich können Helligkeit, Kontrast, Sättigung und viele weitere Optionen gesetzt werden. Dies ist auch noch möglich, während der Stream bereits läuft.
Klicke nun auf „Start Stream“, woraufhin du rechts eine Live-Vorschau der Kamera siehst:
Wenn du bspw. Kontraste besser erkennen willst, oder die Einstellungen zu dunkel sind, kannst du auch das Negativbild anzeigen lassen, so wie ich von einem Raspberry Pi:
Übrigens: All diese Einstellungen können auch per REST API gesetzt werden. Dazu wird ein GET des /control
Endpunkts mit entsprechenden Query Parametern gesendet. Die einzelnen Parameter findest du am einfachsten über die Entwicklertools in deinem Browser (F12) heraus.
Infrarotfilter entfernen: Nachtaufnahmen / Wildkamera
Die Kamera, welche mitgeliefert wird, hat einen Infrarotfilter verbaut, wie die allermeisten Kameras (nicht so die NoIR Raspberry Pi Kamera). Dadurch gelangt etwas weniger Licht zur Linse, weshalb gerade bei dunklen Szenen nur wenig zu sehen ist. Dieser IR-Filter lässt sich allerdings auch entfernen, wodurch bei Aufnahmen bei Dämmerung u.U. mehr zu sehen ist. Wie man den Infrarotfilter entfernen kann und worauf zu achten ist, ist hier genauer beschrieben.
ESP8266 Kamera Livestream einbinden (Smart Home Systeme)
Nachdem wir unsere Kamera-Einstellungen so weit angepasst haben, möchten wir den Stream auch noch in andere Anwendungen einbinden. Das praktische dabei ist, dass der Stream im MJPEG Format gesendet wird (aktualisierendes Einzelbild). Dadurch kann er z.B. mittels <img />
HTML Tag auf Webseiten eingebunden werden. Der Link des Streams befindet sich unter Port 80 unter der Adresse /stream
(in meinem Fall also http://192.168.1.12:81/stream
).
Somit lässt sich der Livestream auch in Smart Home Systeme wie OpenHAB einbinden. Dies schauen wir uns im folgenden Beispiel an.
Zunächst einmal brauchen wir eine Sitemap. In diese kommt dann unser Bild-Stream. Hiermit kannst du eine neue Datei über das Terminal erstellen:
sudo nano /etc/openhab2/sitemaps/cameras.sitemap
Die Datei bekommt folgenden Inhalt:
sitemap demo label="Camera Livestreams" { Frame label="Demo" { Image url="http://192.168.1.12:81/stream" label="Livestream Garden" } }
Speichern kannst du die Datei anschließend mit STRG+O. Nun siehst du den Stream in deinem OpenHAB Dashboard. Auf die gleiche Weise können wir ebenfalls Videos, Maps, usw. in die Übersicht einbinden.
25 Kommentare
Hallo Felix,
besten Dank für das coole Tutorial.
Ist es auch möglich die cam ohne WLAN laufen zu lasssen und sich dann z.B. mit einem Laptop
darauf einzuloggen ?
VG
mikel
Möglich wäre evtl. das die Cam ein eigenes WLAN öffenet mit dem du von Notebook verbinden kannst. Das Speichern von Bildern/Videos sollte auch gehen, da die ESP32 Cam ein SD Slot hat. Die Idee gefällt mir 😉
Funktioniert leider nicht…
Arduino: 1.8.13 (Windows Store 1.8.42.0) (Windows 10), Board: „DOIT ESP32 DEVKIT V1, 80MHz, 921600, None“
text section exceeds available space in boardDer Sketch verwendet 2053883 Bytes (156%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
Globale Variablen verwenden 53488 Bytes (16%) des dynamischen Speichers, 274192 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.
Der Sketch ist zu groß; unter http://www.arduino.cc/en/Guide/Troubleshooting#size finden sich Hinweise, um die Größe zu verringern.
Fehler beim Kompilieren für das Board DOIT ESP32 DEVKIT V1.
Das Partitionsschema in der IDE muss eingestellt werden. Infos hier:
https://www.fambach.net/esp32-cam-modul/#Programmierung unter TESTPROGRAMM
Hi
hatte auch das Problem mit dem Speicher.
das Board: AI Thinker ESP-32-CAM läuft super!
Achtung, wer den seriellen Monitor verwenden will muss ihn auf 115200 Baud stellen, sonst kommt nur Müll raus 🙂
Hallo,
habe das gleiche Problem „Der Sketch ist zu groß“.
Mit dem Link und der Beschreibung komme ich nicht weiter.
Gibt es eine Lösung?
Helmut, das gleiche Problem hatte ich auch. Ich habe das Wrover Board ausgewählt und dann kam ich auch an die Einstellungen, um mit großen sketches klarzukommen, wie in dem genannten link dargestellt.
Ja. Einfach ein anderes Partitionsschema wählen beim Flashen der Software. Beispielweise etwas, was weniger OTA Speicher vorsieht.
Ich habe nun das Problem das er nicht Connected. „Wrover Module“ hat zwar dafür gesorgt das der Sketch nicht mehr zu groß ist, nun funktioniert aber das Connecten zum ESP32 nicht. Hab es mit unterschiedlichen Ports/USB/COM versucht und an unterschiedlichen Geräten, mit Unterschiedlichen YP-05 Devices usw … Ich komme nicht weiter.
Update: Ich habe es geschafft. „Wrover Module“ und dann muss man am ESP den SO0 mit GND überbrücken, damit schaltet man den ESP32 in ein Write Modus. Ich hatte dann noch RX und TX getauscht und schon lief es. =)
Wie kann man die LED ansteuern?
Damit könnte man im Dunkeln ja einen kleinen Bereich ausleuchten.
Der ESP32-CAM hat eine LED verbaut die als Blitzlicht bei der Aufnahme von Fotos verwendet werden kann. Diese LED ist an GPIO 4 angeschlossen, und da auch der Micro-SD Karten Slot an GPIO 4 hängt, kann das zu Problemen führen wenn beides gleichzeitig verwendet wird. Wenn ihr die Micro-SD Karte nicht verwendet könnt ihr das Blitzlicht mit dem Befehl digitalWrite(4, LOW); einschalten und mit HIGH wieder ausschalten.
Mehr Infos unter edistechlab.com/esp32-cam/
Um die LED verwenden zu können muss man vor dem digitalWrite natürlich noch den GPIO4 als OUTPUT definieren. Also erst pinMode(4, OUTPUT); dann digitalWrite(4, LOW);
Bei meinem Modul ist die Logik der LED übrigens umgedreht. Zum Einschalten braucht es digitalWrite(4, HIGH);
Hallo, wenn beide Teile, also das ESP32 und das FT232, ausgeschaltet sind und dann eingeschaltet werden, beginnt dann sofort die Übertragung von Bildern oder muss erst was eingeschaltet oder eingestellt werden?
Gruß Siegfried
Vielen Dank für das Tutorial!
Kann man das ESP32 so konfigurieren, dass es nach Verbinden via USB direkt als Webcam genutzt werden kann? Also ohne, dass man jedes Mal konfigurieren muss?
Gruß
Daniel
Kann es denn sein, dass die Schematic oben falsch ist? Sollte die Vcc vom USB/Serial nicht einfach oberhalb der gelben Leitung sein? Pin ist auch mit Vcc beschriftet.
Da wo Du die rote Leitung hingelegt hast, ist das nicht ein Ausgang?
Pinbelegung stimmt so. Die 5 Volt sollen am 5-Volt-Pin des Boards angeschlossen werden.
Was auf der Grafik allerdings fehlt, ist die „Programmier-Brücke“.
Wie Hansi schon geschrieben hat, muss dafür der IO0 auf GND gelegt werden.
Noch ein Hinweis aus eigener leidvoller und zeitraubender Erfahrung: bei mir hat die Verwendung einer Funk-Maus/Tastatur am PC zu Störungen der seriellen Übertragung geführt. Es wurde schlichtweg keine Verbindung zwischen Programmer und ESP aufgebaut (weder mit FTDI noch mit CP2102 !).
Erst als ich die Maus durch eine kabelgebundene Version ersetzt hatte, ließ sich der Baustein programmieren.
Hallo,
ich habe die ESP32 CAM im Einsatz
Fotos und Stream funktionieren soweit sehr gut.
Nun möchte ich gern noch die LED ein und Ausschalten.Bisher habe ich die Videos über ioBroker auf meinem Smartphone Visualisiert.
Wie könnte ich von da den Befehl zum ein und Ausschalten der LED zur ESP32 Cam verschicken?
Gruß und danke schon mal im Voraus.
Hallo! Ich habe ein Problem mit der Kamera, zu dem ich bisher keine Lösung gefunden habe.
Die Installation hat gut funktioniert und im seriellen Monitor bekomme ich auch angezeigt, dass der ESP mit dem WLAN verbunden ist. Ich bekomme jedoch unter dieser IP keine Verbindung auf die Webseite. Auch ein Ping über die Konsole läuft ins Leere.
In den Einstellungen der Fritzbox sehe ich, dass der ESP im WLAN angemeldet ist.
Nach mehreren Versuchen hatte ich einmal ganz kurz Erfolg und die Webseite wurde geladen. Der Stream ließ sich allerdings nicht starten und ein Standbild hat sich nur ganz langsam aufgebaut.
Hat jemand dieses Problem schon beobachtet oder eine Idee, woran das liegen könnte? Generell habe ich keine Probleme im Netzwerk. Andere ESPs sind problemlos erreichbar.
Viele Grüße und besten Dank schonmal
Eric
hallo,
ist es möglich die auflösung der kamera im sketch fest vorzugeben? ich habe das problen,das die kamera nach dem start immer mit der geringsten auflösung läuft und ich diese erst im livebild einstellen muss .etwas umständlich wenn ich das ding in ispy anzeige.
Hi Peter,
s->set_framesize(s, FRAMESIZE_SVGA); //Bildgröße 800×600
Die Namen sind aus dem Menü auf der Web-Seite der Kamera.
Viele Grüße
😉 Gerald
Hallo zusammen,
bei mir funktioniert „fast alles“. Woran ich verzweifle ist die Bildqualität.
Ich möchte die Cam draußen als WebCam verwenden. Wenn ich alles auf automatisch stelle sind die Bilder ständig total unterschiedlich. Mal viel zu hell, mal fast schwarz, mal richtig belichtet. Weißabgleich funktioniert automatisch auch nicht. Wenn ich ihn fest auf sonnig stelle stimmen die Farben meistens.
Drinnen waren die Bilder auf Anhieb einwandfrei, nur eben draußen nicht.
Könnte mal jemand, der die Cam draußen nutzt und gute Bilder hat seine Einstellungen posten?
Vielen Dank im voraus,
Oli
Nur für den Fall dass es noch einige geben sollte die es nicht schaffen Code hochzuladen. Bei mir war in den Arduino-Einstellungen die falsche Baudrate für den Board gesetzt. Schaut euch die settings an (müsst ihr über Explorer und Texteditor hin, meine Arduino-IDE gab mir keine Möglichkeit) und setzt die Baudrate auf esp32cam.upload.speed=115200
Hi.. ich bin Anfänger..
Ist es möglich das Board gleichzeitig mit dem Kamera Code und gleichzeitig dem WiFi repeater Code zu betreiben.. also zwei Fliegen mit einer Klappe.. also die Integration von zwei Scripten. wäre halt effizient.. ???!!
Hallo
Ich habe ne Frage kann ich den ESP 32 Bzw den ESP 8286 auch für den Raspberry Pi Verwenden? ohne die Adaoino Soft ware sondern in Python?
Danke