Arduino ESP32 CAM

Ich habe mir 2 Kameramodule ESP32 gegönnt und versuche diese mithilfe der Arduino IDE für meine MOBA im geplanten Schattenbahnhof einzusetzen.

Beim ESP32 handelt es sich um einen Mikrokontroller mit integrierter WLAN-Funktion, einem Bluetooth Modul, integrierter Kamera und SD-Kartenmodul. Mit der Kamera können Bilder und Videos aufgenommen und sogar ein Livestream eingerichtet werden, auf den man via Browser zugreifen kann.

Die Abmessungen dieses Moduls betragen gerade einmal 39 mm * 27 mm .


Um mit diesem Modul in der Arduino IDE arbeiten zu können, muss zunächst ein zusätzliches Board innerhalb der Arduino IDE installiert werden und zwar das ESP32 Arduino Board.

Dazu ist zuerst in der IDE bei Datei -> Voreinstellungen unter Zusätzliche Boardverwalter-URLs der Link https://dl.espressif.com/dl/package_esp32_index.json einzutragen.

Es besteht hier natürlich die Möglichkeit, mehrere URLs, getrennt durch Komma, einzutragen.

Das Board selbst wird unter Verwendung der Menüpunkte Werkzeuge -> Board -> Boardvewalter installiert.

Im sich öffnenden Boardverwalter sucht man einfach nach ESP32 und wählt dann das offizielle Paket von ESPRESSIF Systems aus.

Nach der Installation sind in der Liste der Boards sämtliche ESP32-Boards angeführt, die man auswählen und programmieren kann.

Für das Kamera-Modul wird das ESP32 Wrover Module benötigt, das man via Werkzeuge -> Board -> ESP32 Arduino auswählt.

Um Probleme beim Hochladen von Programmen auf das Board zu vermeiden, sollten die Einstellungen wie folgt angepasst werden,

wobei die folgenden Einstellungen sehr wichtig sind:

  • Upload Speed: „115200“
  • Partition Scheme: „Huge APP (3MB No OTA/1MB SPIFFS)“

Programmierung

Um den ESP32 zu programmieren, benötigt man einen USB-TTL-Converter da der ESP32 selbst keinen USB-Anschluss besitzt. Dabei ist aber darauf zu achten, dass der Converter eine Spannung von 5V liefert. Ich habe mit dazu diesen hier besorgt:

Dabei handelt sich um einen Programmer mit einer Betriebsspannung von 5V der den Chipsatz PL2303TA beinhaltet mit einem ca. 90 cm langen Kabel.

Die Anschlussbelegung ist dabei wie folgt: Rot – 5V, Schwarz – GND, Grün -TX, Weiß – RX

Um ihn mit dem ESP32 zu verbinden ist folgende Verdrahtung erforderlich

ESP32-CAMUSB-TTL-Programmer
5V5V (rot)
GNDGND (schwarz)
UORTxD (grün)
UOTRxD (weiß)

Um den ESP32 programmieren zu können, müssen außerdem noch die beiden PINs IO0 und GND überbrückt werden, um die ESP32-CAM in den Flashmodus zu versetzen. Ohne diese Brücke ist kein Hochladen des Programms möglich.

Für den ESP32 gibt es sehr viele Beispiele die einem den Einstieg erleichtern.

Hier behandle ich den CameraWebServer.

Dazu einfach in der ArduinoIDE auf Datei -> Beispiele -> ESP32 -> Camera gehen und den CameraWebServer auswählen

Im sich nun öffnenden Fenster mit dem Programmcode sind nur 4 Änderungen (gelb markierte Bereiche) erforderlich:

Als Standard ist hier #define CAMERA_MODEL_WROVER_KIT normalerweise in Zeile 11 definiert. Dieser Eintrag wird deaktiviert, indem man davor // einfügt.

Um das korrekte Kameramodell zu aktivieren werden die // vor dem Eintrag  #define CAMERA_MODEL_AI_THINKER – normalerweise in Zeile 17 – entfernt.

In Zeile 22 ist die ssid (der Name) des eigenen WLAN-Netzwerkes einzutragen und in Zeile 23 das entsprechende password. Das war’s auch schon.

Man kann dem ESP32 natürlich auch eine fixe IP vergeben was auch besser ist, da sonst jedesmal eine neue IP via DHCP zugeordnet wird. Dazu werden im Kopfbereich des Sketches die foglenden Codezeilen hinzugefügt:

IPAddress local_IP(192, 168, 1, 100); // statische IP Adresse
IPAddress gateway(192, 168, 1, 1);    // Gateway Adresse
IPAddress subnet(255, 255, 255, 0);   // Subnetzmaske

In setup (); werden vor WiFi.begin(ssid, password); folgende Zeilen eingefügt:

if (!WiFi.config(local_IP, gateway, subnet)) {
Serial.println(„Failed to configure WiFi!“);
}

Nach dem Hochladen des Sketch sollte unter dieser IP die Web UI des Streaming Servers zu finden sein.

Flashen des ESP32-CAM

Ehe man die USB-Verbindung zum PC herstellt sollte man sicherstellen, dass die Brücke zwischen IO0 und GND gesetzt ist – bei mir der weiße Jumper im Bild – denn nur dann bootet die ESP32-CAM im Flashmodus und ist damit programmierbar.


Hat man nun die USB-Verbindung mit dem PC hergestellt und den korrekten Port eingestellt, so wird das Programm hochgeladen. Zuvor sollte man noch den Seriellen Monitor der ArduinoIDE starten, warum, das zeigt sich später.

Entweder mit der Tastenkombination Strg+Umschalt+M oder über das Menü Werkzeuge -> Serieller Monitor

Hochgeladen wird entweder mit der Tastenkombination Strg+U oder über das Menü Sketch -> Hochladen oder durch Klick auf den nach rechts gerichteten Pfeil in der Symbolleiste (hier gelb markiert):



Nach Beendigung des Ladevorgangs trennt man die USB-Verbindung zum PC und entfernt die Brücke zwischen IO0 und GND.

Jetzt kommt der zuvor angesprochene Serielle Monitor ins Spiel.

Man stellt erneut die USB-Verbindung zum PC her und während der ESP32 bootet, erolgt die Ausgabe in den Seriellen Monitor

Ruft man die angeführte IP in einem Browser auf gelangt man zur Web-UI des Livestreams.

Damit dieser gestartet werden kann, genügt ein Klick auf den Button Start Stream

Die Einstellungen der Kamera werden über das Menü in der Weboberfläche vorgenommen. Ich habe hier versucht die einzelnen Einstelloptionen aufzulisten. Bei einigen bin ich allerdings über die Bedeutung nicht im Klaren sodass bei diesen keine Übersetzung bzw. Beschreibung vorhanden ist. Sollte es mir möglich sein die fehlenden Einträge in Erfahrung zu bringen, werden diese nachgetragen.

ESP32-CAM Webmenü

Toggle OV2640 settingsEinstellungenVariableWertBeschreibungVoreinstellung
ResolutionAuflösungframsize10
UXGA ( 1600 x 1200 )
CIF ( 400 x 296 )
9SXGA ( 1280 x 1024 )
8XGA ( 1024 x 768)
7SVGA ( 800 x 600 )
6VGA ( 640 x 480 )
5CIF ( 400 x 296 )
4QVGA ( 320 x 240 )
3
HQVGA ( 240 x 176 )
0QQVGA ( 160 x 120 )
QualityBildqualitätquality
10 bis 6310 - gut, 63 - schlecht10
BrightnessHelligkeitbrightness-2 bis +20
ContrastKontrastcontrast-2 bis +20
SaturationSättigungsaturation-2 bis +20
Special EffectSpezialeffektspecial_effect0No Effect (Kein Effekt)No Effect
1Negative (Negativbild)
2Greyscale (Schwarz / Weiß)
3Red Tint (Roter Farbton)
4Green Tint (Grüner Farbton)
5Blue Tint (Blauer Farbton)
6Sepia
AWBWeißabgleichawb0 - 1Aus / EinOn
AWB GainSpezialfunktion f.
Weißabgleich
awb_gain0 - 1Aus / EinOn
WB ModeWeißabgleich - Funktionwb_mode0Auto (Automatik)Auto
1Sunny (Sonnig)
2Cloudy (Bewölkt)
3Office (Büro)
4Home (Zuhause)
AEC SensorIst dieser aktiviert, wird die
Belichtung automatisch
über den Sensor
eingestellt.
set_exposure_ctrl()
set_aec()
0 - 1Aus / EinOn
AEC DSPaec20 - 1Aus / EinOff
AE Levelae_level-2 bis +20
ExposureNur sichtbar, wenn der
AEC Sensor deaktiviert ist.
Belichtung wird über
Schieberegler von 0-1200
eingestellt
aec_value0 - 1200
AGCBildverstärkergain_ctrl0 - 1Aus / EinOn
Gainnur aktiv, wenn AGC an ist.agc_gain
Gain CeilingObergrenze:
nur aktiv, wenn AGC aus ist.
gainceiling2x
BPCbpc0 - 1Aus / EinOff
WPCwpc0 - 1Aus / EinOn
Raw GMAraw_gma0 - 1Aus / EinOn
Lens CorrectionLinsenkorrektur aktiviernlenc0 - 1Aus / EinOn
H-MirrorBild horizontal spiegelnhmirror0 - 1Aus / EinOff
V-FlipBild vertikal drehenvflip0 - 1Aus / EinOff
DCW ( Downsize EN )dcw0 - 1Aus / EinOn
Color BarFarbbalken anzeigencorlorbar0 - 1Aus / EinOff
Face DetectionGesichtssuche aktivierenface_detect0 - 1Aus / EinOff
Face RecognitionGesichtserkennungface_recognition0 - 1Aus / EinOff
Print Friendly, PDF & Email