Zur Werkzeugleiste springen

Last Updated on 7. November 2020 by sfambach

Beim schnellen Ali habe ich ein ESP 32 Modul mit Kamera für unter 10€ Gefunden. Dieses stelle ich hier kurz vor und zeige die ersten Schritte.

Fakten

Neben allem was der ESP32 sowieso bietet hier noch ein paar zusätliche Eigenschaften.

  • Platz für eine SD Karte
  • 520 KB SRAM + externe 4MB PSRAM
  • Support OV2640 and OV7670 Kameras
  • OV7670 Kamera Modul
  • Blitzlicht

Vorsicht: Das Pinout kann abweichen, besser nochmal auf der CAM nachsehen.

Funktionen der ESP32 Cam Quelle: Seed Studio
Pinout für ESP32 Cam Quelle: Seed Studio

Kamera Anschlüsse

OV2640 CAMERAESP32Variable name in code
D0GPIO 5Y2_GPIO_NUM
D1GPIO 18Y3_GPIO_NUM
D2GPIO 19Y4_GPIO_NUM
D3GPIO 21Y5_GPIO_NUM
D4GPIO 36Y6_GPIO_NUM
D5GPIO 39Y7_GPIO_NUM
D6GPIO 34Y8_GPIO_NUM
D7GPIO 35Y9_GPIO_NUM
XCLKGPIO 0XCLK_GPIO_NUM
PCLKGPIO 22PCLK_GPIO_NUM
VSYNCGPIO 25VSYNC_GPIO_NUM
HREFGPIO 23HREF_GPIO_NUM
SDAGPIO 26SIOD_GPIO_NUM
SCLGPIO 27SIOC_GPIO_NUM
POWER PINGPIO 32PWDN_GPIO_NUM
Quelle: https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/

SD Karten-Anschlüsse

MicroSD KarteESP32
CLKGPIO 14
CMDGPIO 15
DATA0GPIO 2
DATA1 / flashlightGPIO 4
DATA2GPIO 12
DATA3GPIO 13
Quelle: https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/

Zusätzliche Pins

BeschreibungPin
Blitzlicht (Doppelbelgung mit SD – DATA1) 4
evtl. Freie Pins1, 3, 16
Rote LED auf der Rückseite (LOW aktiv)33
Quelle: https://loboris.eu/ESP32/ESP32-CAM%20Product%20Specification.pdf

Anwendungsbereiche

  • Webcam
  • Beobachtungs Kamera
  • Visuelle Navigation
  • Gesichtserkennung

Ansichten

Analyse

Das Board kommt leider ohne ISP Programmierer und somit ohne USB Anschluss. Somit ist einwenig Vorarbeit nötig um den ESP zu Programmieren.

Zuerst wird ein ISP oder ein simpler USB to Serial Konverter Benötigt. Ich verwende einen FTDI vom schnellen Ali (LINK).

ACHTUNG! vor dem ersten Betrieb sicherstellen, dass der FTDI 3.3V eingestellt ist.

Die Verkabelung ist schlicht, für den Aufbau verwende ich ein Steckbrett, und ein paar Pinheader Kabel. Zuerst stelle ich die Strom Verbindung her, hierfür müssen jeweils die 3,3V und die Masse (GND) des FTDI mit denen des ESP verbunden werden. Danach müssen noch die beiden Datenleitungen (RX/TX) angeschlossen werden. Die Verbindung zwischen Masse und IO0 muss zum Programmieren gesteckt und danach wieder entfernt werden. Vor dem Programmieren empfiehlt sich ein Reset. Siehe hierzu auch das folgende Bild.

ESP32 Cam – Verbindungen zu USB Brücke

Programmierung

Bibliotheken

Die Arduino IDE muss für den ESP32 vorbereitet sein. Mehr hierzu über den folgenden Link:

Der Kamera Webserver und die Kameratreiber sind zwar in der ESP Installation enthalten, wer jedoch die aktuelle Version sucht, findet sie unter den folgenden Links:

Kameratreiber

Kamerawebserver

Testprogramm

Es gibt ein Beispielprogramm für die Kamera. Erst den richtigen ESP auswählen

ESP32 Cam – Einstellungen des Boards

TIP: Sollte es Probleme beim compilieren oder danach mit Exceptions geben, schaut mal im Kapitel Probleme nach.

Dann erscheinen die passenden Beispielprogramme im Menüpunkt „Examples“. Für den ersten Test habe ich den CameraWebServer ausgewählt:

ESP32 Cam – Pfad zum Beispielprogramm

Im Programm die SSID und das Passwort für das lokale WLan eingeben und #define CAMERA_MODEL_WROVER_KIT ausdokumentieren sowie #define CAMERA_MODEL_AI_THINKER rein nehmen.

Das Programm kompilieren und auf den ESP spielen. Nach einem Reset sieht es wie folgt auf der Konsole aus:

ESP32 Cam – Konsolenausgabe, unten IP des ESP

Ganz unten ist die IP Adresse zu sehen, über welche der ESP im Neztwerk verfügbar ist. Diese in einen Browser eingeben und nach kurzer Wartezeit erscheint die Steuerzentrale:

ESP32 – Cam Web Interface

Noch den Stream starten und siehe da es kommt ein Bild:

ESP32 Cam – Web Interface mit eingeschaltetem Stream

Wer eine alternative Firmware sucht kann es mal mit der folgenen probieren: RTSP Source für die ESP32Cam.

Probleme

Das Schreiben auf den ESP klappt nicht

Wenn beim upload auf den ESP die GUI mit Timeout Fehler aussteigt, mal den Reset-Taster betätigen:

  • Upload Starten
  • Wenn „Connecting“ in der Augabe steht den Reset Taster kurz drücken.

Zusätzlich checken ob der GPIO mit Masse verbunden ist und der RX und der TX Eingang richtig verbunden sind, eventuell mal tauschen.

Kamera nicht erkannt Fehler 0x20004

Flasche Kamera Pinning ausgewählt, für mein Modell benötigte ich:

#define CAMERA_MODEL_AI_THINKER

Zusätzlich musste ich das Modul mit 5V (am 5V Anschluss) betreiben da 3V zu wenig waren.

Streifen im Kamera Bild

Lars (Siehe Kommentare unten) hat ein paar Versuche gemacht. Es hat sich als vorteilhaft herausgestellt das Modul am 5V Anschluss zu betreiben.

Speicher auf Board zu klein

Checkt die Board-Einstellungen, hier muss Partition Scheme = „Huge App … No OTA“ eingestellt sein (Zweiter roter Kasten).

Brownout detector was triggered

„Brownout detector was triggered“ hatte ich bis jetzt nur wenn ich keine externe Spannugnsquelle am Gerät hatte. evtl. reicht auch ein besseres USB Kabel zu verwenden. Der VIN ist mit 5V angegeben, ich habe hier schon 6V und mehr angeschlossen, der Spannungswandler konnte damit umgehen ist aber sehr heiß geworden. Tip natürlich ohne Gewähr ;). Der folgende Link könnte auch noch weiter helfen:

Exceptions nach Upload des Programms

Peter berichtet (siehe Kommentar unten), dass er nach dem Programmieren Nur Exceptions mit der oben angegebenen Konfiguration bekommt.

Bei ihm hats mit dem Board TTGO T1 geklappt.

ESP Cam- Board Config TTGO T1
ESP Cam- Board Config TTGO T1

Ohne mein geschriebenes von oben zu beachten, habe ich meine letzte Kamera mit der folgender Konfiguration erfolgreich compiliert und getestet.

ESP Cam- Board Config Dev Board
ESP Cam- Board Config Dev Board

Die PSRam Nutzung habe ich extra eingeschaltet, evtl. führt das aber auf anderen Boards zu Problemen.

[E][camera.c:1344] esp_camera_fb_get()

Alias „Horst“ (Siehe Beitrag unten) berichtet eine Framebuffer Exception mit der folgenden Kamera ESP Kombi und der ESP32-Cam. Der Unterschied zu meiner ist der Aufdruck auf dem dem Flachbandkabel ( TY-OV2640 V2.0). Es wäre möglich, dass es an der Version 2 liegt.

Alternative Kamera/ESP32 Version
Alternative Kamera/ESP32 Version

Die Kamera Funktioniert wohl mit dem mitgelieferten esp-cam demo und compiliert unter der ESP-IDF v3.3-beta1-506-gebdcbe8c6 vom 5. März 2019. Ich vermute, dass es sich hierbei um Igors demo handelt (ist ne älter Version der ESP32Cam):
https://github.com/igrr/esp32-cam-demo

Das FB Problem scheint noch weitere Auslöser zu haben. So gibt es einige Bug Reports hierzug (siehe unten). Manche melden Erfolge bei Verigerung der Frequenz von 20MHz auf 10Mhz:

 //XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental)
    .xclk_freq_hz = 20000000,

Bug Reports:
https://github.com/espressif/esp32-camera/issues/155
https://github.com/espressif/esp32-camera/issues/93

Sonstiges

Streamen

Der Esp-Stream ist auf dem port 81 verfügbar. Hier können Streaming-Clients das Signal abgreifen. Das Format ist MJPEG und die URL ist wie folgt aufgebaut:

http://<deine-ip>:81/stream

Da der aktuelle Beitrag immer länger wird, habe ich die einzelen TOOLCHECKS in eigene Beiträge umgewandelt. Der Test mit dem VLC war bei mir leider nicht erfolgreich. Für alle, die unter Linux arbeiten hat Josef (Siehe Kommentare unten) den MPV Player empfohlen, für diesen gibts nun auch noch einen eigenen Beitrag.

Es gibt noch weitere Streaming Clients mit denen ist sicherlich analog zu verfahren.

Kamera Fernsteuern

Der Webserver erlaubt es die Kamera mittels HTTP Anfragen zu steuern. Der generelle Aufruf lautet wie folgt:

http://<ip>/control?var=<Variablenname>&val=<Wert>

Mögliche Kombinationen

Einige Variblen/Wertkombinationen habe ich in der folgenen Tabelle Aufgeführt. Die Funktionen deren Arbeitsweise ich nicht verstanden habe, sind mit einem „?“ markiert:

BeschreibungVariblennameWerte
Auflösungframesize 10 UXGA(1600×1200)
9 SXGA(1280×1024)
8 XGA(1024×768)
7 SVGA(800×600)
6 VGA(640×480)
5 CIF(400×296)
4 QVGA(320×240)
3 HQVGA(240×176)
0 QQVGA(160×120)
4 Voreingestellt
Bildqualität quality 10 gut bis
63 schlecht
10 Voreingestellt
Helligkeit brightness -2 bis 2
0 Voreingestellt
Kontrast contrast -2 bis 2
0 Voreinstellung
Sättigung saturation -2 bis 2
0 Voreingestellt
Spezialeffekte special_effect 0 Kein Effekt
1 Negtivbild
2 Swartz/Weiss
3 Roter Teint
4 Grüner Teint
5 Blauer Teint
6 Sepia
0 Voreingestellt
Weissabgleich ein/aus schalten awb0 Aus
1 Ein
1 Voreingestellt
Spezielle Funktionen für den
Weissabgleich nutzen.
An/Aus
awb_gain 0 Aus
1 Ein
1 Voreingestellt
Weissabgleich
Funktionen
wb_mode 0 Auto
1 Sonnig
2 Bewölkt
3 Büro
4 Zuhause
0 Voreingestellt
AEC SENSOR aec0 Aus
1 Ein
1 Voreingestellt
AEC DSPaec20 Aus
1 Ein
1 Voreingestellt
AE Level? ae_level -2 bis 2 0
Exposure?
(bei mir nicht sichtbar)
aec_value 0 – 1200 204
Wechselt zwischen den
folgenden Funktionen
agc_gain und gainceilling
agc0 Gain
1 Gain-Ceilling
1 Voreingestellt
agc_gain-group? agc_gain 0 Ein-fach
30 31 fach
5
gainceiling-group? gainceiling 0 zwei fach Bis
6 128 fach
0
BPC? bpc 0 Aus
1 An
0 Voreingestellt
WPC ? wpc 0 Aus
1 An
1 Voreingestellt
Raw GMA? raw_gma 0 Aus
1 An
1 Voreingestellt
Linsen Korretur? lenc 0 Aus
1 An
1 Voreingestellt
Horizonale Spiegelung
(Wenn die Cam auf der Seite
liegt = Vertikale)
hmirror 0 Aus
1 An
1 Voreingestellt
Vertikale Spiegelung
(Wenn die Cam auf der Seite
liegt = Horizontal)
vflip 0 Aus
1 An
1 Voreingestellt
DCW (Downsize EN) ?
Verkleinert das Bild
dcw 0 Aus
1 An
1 Voreingestellt
Zeigt Farbbalken auf
dem Bildschirm
colorbar 0 Aus
1 An
0 Voreingestellt
Geischtssuche aktivieren face_detect0 Aus
1 An
0 Voreingestellt
Gesichtserkennung aktivieren face_recognize 0 Aus
1 An
0 Voreingestellt
Befehls Tabelle für HTTP Requests zur ESP Kamera

Beispiele:

Die Beispiele könnt ihr einfach in die Adressleiste eures Browser kopieren. Vom Webserver kommt keine Antwort zurück, ob es geklappt hat oder nicht. Bitte die IP durch die euere Kamera tauschen.

Auflösung auf VGA Stellen:
http://192.168.1.66/control?var=framesize&val=6

Bildqualität verschlechtern:
http:// 192.168.1.66/control?var=quality&val=20

Helligkeit einstellen:
http:// 192.168.1.66/control?var=brightness&val=2

3D Druck Gehäuse / Pan Tilt

Hier ein paar Links zu Gehäusen:

https://www.yeggi.com/q/esp32+cam/

https://www.thingiverse.com/search?q=esp+cam&type=things&sort=relevant

Den folgende Pan/Tilt habe ich mal ausgedruckt.

https://www.thingiverse.com/thing:3579507

3D Druck PanTilt für ESP Cam Quelle: https://www.thingiverse.com/thing:3579507
3D Druck PanTilt für ESP Cam
Quelle: https://www.thingiverse.com/thing:3579507

Wer es braucht, hier der Deckel aus dem Verbund gelöst.

Dafür dass ich dünne Aussenwände und schnelles drucken verwendet habe, passen die Teile ganz gut zusammen. Bei mir hängt der Deckel zum drehen des Kopfes etwas in der Luft, hier wäre eine schönere befestigung des Servo Kopfes denkbar. Auch hatte ich keinen Draht oder Büroklammer die ich opfern konnte, zur Hand, deshalb ist die Kosntruktion zum Neigen des Kopfesnicht optimal. Wie man dem kleinen Video entnehmen kann, funktioniert der Pan/Tilt dennoch so wie es soll. Auch die ESP Cam passt exakt in die Ausparung.

ESP32 Cam Pan Tilt/Test

ESP als Viewer für die Kamera

Sigi (Siehe Kommentare) hat die Frage aufgebracht, ob ein ESP auch als Viewer für die Kamera dienen könnte. Nach voheriger Abwägung und ein paar Tips von Lars. Habe ich meine eigene Version des M5 Stack Viewers erstellt:

Freie Pins

Die Cam bietet kaum nach aussen durchgeschleifte Pins. Nach Abzug des Programmers müsten IO1, IO3 und evtl. IO16 Frei sein. Gestestet habe ich dieses aktuell noch nicht.

Der ESP32 hat schon eine menge Pins, evtl könnte man hier auch direkt auf den ESP gehen. Die folgende Seite ist hat mir sehr geholfen deshalb möchte ich sie euch nicht vorenthalten:

ESP32-CAM AI-Thinker Pinout Guide: GPIOs Usage Explained

Es ist wohl möglich die SD Karte mittels der Fuses auf einen Ein-Leitungs-Betrieb umzustellen. Dies befreit den Port 12 und 13.

Der Befehl für die Konsole lautet wie folgt:

 espefuse.py –baud 115200 –port **your_USB_port_name** set_flash_voltage 3.3V

https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/

Hier noch mehr zum 1 Wire mode der SD Karte.

Der LINK könnte auch noch helfen.

Sonst vielleicht mal diese Kamera-Modelle ansehen:

https://github.com/lewisxhe/esp32-camera-series

Https://github.com/Xinyuan-LilyGo/esp32-camera-screen

Im Folgenden Link hat jemand einen PIR an die Kamera angeschlossen. Ports mit Hilfe des 1-wire Betriebs der SD Karte frei geschaltet.

https://github.com/jameszah/ESP32-CAM-Video-Recorder/blob/master/demo_fritz2.jpg

Kamera Kabel verlängern

Soweit ich das der Spezifikation entnehmen konnte, ist die Kamera eine OV2640 mit 24 Pins mit FFC Kabel 0,5 mm Raster. Für verschiedenen Projekte wird die Kamera an anderer Stelle als die Platine benötigt. Es gibt hierfür verlängerungen oder Kameras mit längerem Kabel. Wobei die Kameras mit längerem Kabel fast günstiger erscheinen.

Kamera vom schnellen Ali, mit längerem Kabel.

Noch ein Fischauge vom schnellen Ali

FFC Kabel Suche in der eletronischen Bucht

Ob die Verlängerung funktioniert habe ich noch nicht ausprobiert, ist also eher ein Versuch, sollte aber klappen solange das Kabel nicht zu lange wird.

Fazit

Es funktioniert, man kann eine Kamera am ESP32 betreiben. Die Inbetriebnahme gestaltet sich für den geübten Bastler einfach.
Es gibt ein paar Fallstricke siehe hierzu auch das Kapitel „Probleme“. Die Bildqualität überzeugt nicht wirklich evtl. ist hier noch die ein oder andere Optimierung möglich oder meine Hardware ist nicht ganz OK.
Das Testprogramm, ist für einen ersten Test überragend, es bietet viele Einstellmöglichkeiten bis hin zu einer Gesichtserkennung. Da hat sich jemand richtig mühe gegeben.

Verwandte Beiträge

Quellen

RTSP Source für die ESP32Cam

https://www.diymore.cc

Quelle: https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/

Link ins FHEM Forum zum gleichen Thema, gepostet von Papa_Romeo (Siehe Kommentar), da wurde sich schon ausfühlich mit der Materie befasst. Schaut doch einfach auch mal dort rein. https://forum.fhem.de/index.php/topic,95604.msg884592.html#msg884592
Weiterführende Links aus dem Forum selbst:
https://robotzero.one/
https://randomnerdtutorials.com/
https://robotzero.one/esp32-face-door-entry/
https://robotzero.one/esp-who-recognition-with-names/

https://www.instructables.com/id/Video-Capture-Using-the-ESP32-CAM-Board/

https://www.thingiverse.com/thing:3579507

https://www.thingiverse.com/search?q=esp+cam&type=things&sort=relevant

https://www.yeggi.com/q/esp32+cam/

https://www.videolan.org/vlc/index.de.html

https://github.com/geeksville/TenDollarWebcam

https://github.com/espressif/esp32-camera

https://circuitdigest.com/microcontroller-projects/how-to-use-esp32-camera-module-for-video-streaming-and-face-recognition

https://github.com/espressif/esp32-camera

https://github.com/easytarget/esp32-cam-webserver

https://randomnerdtutorials.com/esp32-troubleshooting-guide/

https://github.com/jameszah/ESP32-CAM-Video-Recorder

https://github.com/moononournation/M5Stack-Cam-Viewer

https://github.com/raphaelbs/esp32-cam-ai-thinker

Von sfambach

71 Gedanken zu „ESP32 Cam Modul“
  1. Hallo,
    Vielen Dank für den tollen Beitrag. Ich habe mit einem Raspberry PI Zero W eine LTE Wildkamera gebaut. Leider dauert der Bootvorgang relativ lange und das Bild wird zu spät aufgenommen. Daher wäre es schön das mit dem ESP32-CAM-Modul zu machen. Die Idee ist, das ESP nimmt ein Bild auf, speichert es und ich kann es dann mit dem PI abholen. z.B. über FTP oder wie auch immer.
    Wie lange benötigt das ESP-Modul bis es gebootet hat und ein Bild aufnehmen kann. Ich möchte es nicht genau wissen. Es geht mehr um die Größenordnung. (1-2 s oder eher 10-20 s) . Besteht überhaupt die Möglichkeit ein einzelnes Foto zu machen und es zu speichern? In welchem Format liegt das Foto dann vor?
    Vielen Dank
    Gruß
    Paul

    1. Hallo Paul,
      danke für deinen Kommentar. Es ist möglich einzelne Bilder mit der Kamera zu machen, diese liegen beim Kamera-Webserver im jpeg Format vor. Bei anderen Programmen habe ich auch schon die Ablage als BMP Datei gesehen. Wenn du die Cam an GSM anbinden möchtest, brauchst du noch ein zusätlich Modul z.b. SIM 8000. Die Anbindung ist nicht ganz trivial, weil die ESP Cam nicht so viele freie pins hat. Im Prinzip können die Bilder auf einer SD Karte gespeichert werden, oft werden die Pins für die SD Karte aber anderweitig verwendet. Als Kameramodul könntest du dir auch nochmal die von TTGO ansehen, die sind schon mit Bewegungsmelder und aus meiner Erfahrung heraus etwas leichter im Umgang da sie einen USB Port haben und stabiler laufen. https://www.fambach.net/vorschau-lilygottgo-t-kamera-esp32-2/
      Um auf deine Hauptfrage zu kommen, die Rebootzeiten sind wenige Sekunden und wenn du auf DeepSleep zurück greifst kannst du das nochmal optimieren. Da gibts auch ein nettes Video von Andreas Spiess https://www.youtube.com/watch?v=r75MrWIVIw4.
      Ich bin mir nicht sicher ob die Qualität für Wildbeobachtungen ausreicht, auch ist kein IR Licht dabei. Da der Preis je nach Modul bei 9-20 € liegt kann man das aber einfach mal ausprobieren ;).
      Gruß
      Stefan

      1. Hallo Stefan,
        danke für deine ausführliche Antwort. Die Qualität der Bilder ist eher nebensächlich, da ich die Aufnahmen lediglich mache, um die Wildarten zu erkennen. Die Kamera die ich aktuell baue hat schon Infrarotlicht und einen Bewegungsmelder. Das ist alles aus solchen China-Modulen zusammengebaut. Für die Übertragung der Bilder verwende ich einen LTE-Stick von Huawai. Das SIM 900 würde bei kleinen Bilddateien sicherlich auch gehen. Es benötigt ja nur zwei Pins für die UART. Ich werde das ESP32 auf jeden Fall mal testen. Aber erst muss meine Kamera fertig werden und schnell ins Revier, bevor die Schweine kommen.

        Viele Grüße
        Paul

  2. Hallo!
    Erstmal vielen Dank für deine Arbeit.
    Es scheint neue Module (mit OV2640) aus China zu geben, für die keine der hier angegebenen Parameter für die Arduiono-ESP 1.0.4 korrekt sind. Sie kommen aber mit eigenem Programm („esp32-cam-demo“) , welches funktioniert. Es wurde mit der ESP-IDF v3.3-beta1-506-gebdcbe8c6 am 5. März 2019 kompiliert.
    Mit einem Arduino Sketch erreicht man zwar das Board und kann auch die Kamera initialisieren. Beim Auslesen des Framebuffers gibt es aber den bekannten Fehler „“[E][camera.c:1344] esp_camera_fb_get(): Failed to get the frame on time! Camera capture failed“
    LG

    1. Hallo Horst,

      vielen Dank für deinen Beitrag.
      Ich würde deinen Tip gerne mit in das Problem Kapitel aufnehmen.
      Nach etwas suchen habe ich ein Frambuffer Problem gefunden das aber auf eine zu hohe Taktrate zurück zu führen ist.
      Hier mal die Links, entspricht dies deinen Beobachtungen?
      https://github.com/espressif/esp32-camera/issues/155
      https://github.com/espressif/esp32-camera/issues/93

      Meinst du mit Programm Camera Demo Igors?:
      https://github.com/igrr/esp32-cam-demo
      Vorab vielen Dank für deine Rückmeldung. Hast du evtl. noch einen Link/Bild von deiner Kamera?
      Gruß
      Stefan

  3. Hallo Stefan,
    hier ein kleiner Tip zum Übertragen auf das Modul: bei diesem Modul wie auch Node usw. wird immer gesagt, dass man beim „Connecting“ die Reset-Taste betätigen soll. Es geht viel einfacher: IO0 und GND verbinden, nach einer Sekunde den Reset-Taster kurz drücken und loslassen, danach die Verbindung IO0 und GND lösen ( ich habe hierzu einen Taster angelötet). Dann kann man beliebig den Compiler starten und die Übertragung läuft dann ohne weiteres zutun.
    Gruß Klaus

    1. Hallo Klaus,
      danke für den Tip, ist bestimmt Praktisch wenn man die Kamera oft neu programmieren will.
      Ich habe einen Taster genommen, ein Dupond Weibchen/Weibchen Kabel in der mitte durchgeschnitten und es an den Taster gelötet, klappt auch.

      Gruß
      Stefan

  4. Hallo zusammen,

    zunächst herzlichen Dank an Stefan für den super Artikel. Hat mir bei den ersten Schritten mit der ESP32-Cam prima geholfen.

    Als Info für alle, die bei Ali ein ESP32-Cam Board bestellen:

    Nach dem Flashen des Cam Webserver Beispiels mit Arduino IDE, Entfernen der Brücke und Reset warf das Board auf dem Serial Monitor immer einen Exception Error aus.

    Nach einigen Fragen an Tante Google, Debuggen und Auswerten des Stacktraces und eigenen Experimenten habe ich festgestellt, dass ich für mein Board nicht ESP32-Wrover, sondern TTGO T1 einstellen musste. Als Kamera Module das auch von Dir verwendete AI-Thinker Modell.

    Nun läuft das Board super !

    Viele Grüße
    Peter

  5. Hallo,
    danke für die Anleitung. Dies ist die einzige Seite, die ich gefunden habe, die die Fernsteuerung per HTTP beschreibt. Kann man beim Aufruf mit HTTP auch mehrere Paramater auf einmal übergeben?

    Freundlichen Gruß

    Andre

    1. Hallo Andre,
      die Steuerung wird in der Methode

      static esp_err_t cmd_handler(httpd_req_t *req){

      bei mir ab Zeile 452 in Datei app_httpd.cpp abgefragt. Wenn ich mich nicht ganz verguckt habe wird hier von einem Key/Value Paar ausgegangen. Das könnte man anpassen um mehrere Einstellungen zu akzeptieren oder man sendet einfach alle Einstellungen per Request hintereinander, was für mich jetzt ersteinmal einfacher klingt.
      Gruß
      Stefan

      1. Hallo Stefan,
        ich werde mir das mal anschauen, ob ich das umsetzen kann, mit mehreren Parametern übergeben, weiß ich noch nicht.
        Aber ich werde sicher hinbekommen, die für mich besten Parameter schon beim Kompilieren mit zu übergeben.
        Ich werde auch mal das Internet durchstöbern, ob sich jemand einen Webserver geschrieben hat, bei dem man ein paar Einstellungen machen kann die dann auch gespeichert werden.
        Ansonsten bin ich von der Qualität wirklich überrascht, klar ist das Bild etwas weich gezeichnet, aber dafür dass ich meine 3-D Drucker beobachten will, und das mit so wenig Aufwand klappt, ist das Modul perfekt. Mal sehen was die Weitwinkelkameras bringe ich bestellt habe.
        Freundliche Grüße André

    1. Hallo joednemesis,
      ich würde vermuten im
      app_httpd.cpp Ca Zeile 208
      static esp_err_t capture_handler(httpd_req_t *req){
      camera_fb_t * fb = NULL;
      esp_err_t res = ESP_OK;
      int64_t fr_start = esp_timer_get_time();

      GPIO 4 auf high schalten und am Ende wieder aus.
      Aufpassen GPIO 4 wird auch von der SD Karte verwendet.
      Gruß
      Stefan

  6. Hallo,
    ich habe mir o.g. CAM gekauft und mit dem Beispiel CameraWebServer programmiert.
    Hat auch soweit alles geklappt.
    Im Seriellen Monitor bekomme ich aber hier nur vorlaufent die folgende Info angezeigt.
    „—
    ets Jun 8 2016 00:22:57
    rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0018,len:4
    load:0x3fff001c,len:1216
    ho 0 tail 12 room 4
    load:0x40078000,len:9720
    ho 0 tail 12 room 4
    load:0x40080400,len:6352
    entry 0x400806b8
    –„
    Ansonsten geht es nicht weiter.
    Sieht so aus als ob das Programm in einer Schleife festhängt.
    Kann mir hier jemand helfen?

    1. Hallo Woli,
      da fallen mir leider nur die Standards ein:

    2. IO 0 wieder gelöst?
    3. Modul mit 5 Volt Versorgt?
    4. richtige Speichereinstellungen beim Programmieren gemacht?
    5. Korrekte Kamera gewählt
    6. Um dich dem Problem zu nähern mal ein paar debug Ausgaben in den code machen.

      1. Hallo Stefan,
        IO 0 wieder gelöst? – Nein
        Modul mit 5 Volt Versorgt? -Ja
        richtige Speichereinstellungen beim Programmieren gemacht? -ja
        Korrekte Kamera gewählt -Ja

        Nach weiteren versuchen und Rechergen im Netz, habe ich auch einfache Programme wie z.b. ChipID ausprobiert.
        Es wurde immer v. g. ausgegeben. Startsequenz vom ESP32
        Der Programmupload funktioniert zwar aber ein Starte erfolgt nicht. .
        Ich gehe davon aus dass es im Speicher probleme gibt.
        Werde Modul als def. zurückschicken.

        Danke nochmals für die Rückinfo.
        G.Woli

      2. wie war das gleich mit der Antworttiefe?
        Daher dieses Posting leider als Antwort auf eine korrekte Antwort und sehr geduldige Antwort (Respekt) und nicht das Posting, auf das ich mich eigentlich beziehe:

        „IO 0 wieder gelöst? – Nein“
        Sorry, aber wenn ich jemanden um Rat frage und der so nett ist, mir eine Checkliste zu schicken und bereits meine erste Antwort nein ist, dann wuerde ich doch stutzig werden und versuchen sie in ein Ja zu wandeln, bevor ich etwas als defekt zurueck schicken wuerde und dann mit dem Ersatz dasselbe Problem zu haben.

        Ich zitiere ein paar Zeilen weiter oben:
        „Die Verbindung zwischen Masse und IO0 muss zum Programmieren gesteckt und danach wieder entfernt werden.“
        (weiter unten steht das sinngemaess von mir noch einmal, bei jemandem, der ein aehnliches Problem hatte…)

        Das schreibt doch niemand nur zum Spass…

        Zum Hintergrund: Vereinfacht gesagt, guckt das Modul (genauer: der bootloader) bei einem Neustart -noch bevor das eigentliche Programm startet- ob der Pin auf 0 ist. Wenn ja, wird das als Zeichen gesehen, dass das Modul programmiert werden soll. Dann startet nicht das gewuenschte Programm, sondern die Routine fuer den Upload.

        (ja, ich weiss, dass ich so bin, wie die Lehrer, die ich als Kind gehasst habe… aber sie sind die, die mir am Ende etwas vermittelt haben…)

  7. Hallo,

    die den ESP32 Cam habe ich wie oben beschrieben in Betrieb genommen.
    Läuft auch alles.
    Leider muss ich nach Spannungsreset immer den kleinen Taster auf dem ESP drücken, damit die Camera läuft.
    Woran kann das liegen?

    1. Hallo Nico,
      Danke für deine Anfrage. Ich bin mir nicht ganz sicher was du mit Spannungs Reset meinst, Reset durch Spannungsverlusst oder einfach abgeklemmt. Der Taster macht ja auch einfach nur ein Reset. Hast du evtl. noch den Programmier pin (Glaube IO0) verbunden? Sonst würde mir leider auch nix einfallen.

      Gruß
      Stefan

  8. Hallo,
    ich benutze das gleiche Modul wie hier in der Anleitung.
    Leider bekomme ich die Fehlermeldung
    „⸮[E][camera.c:1344] esp_camera_fb_get(): Failed to get the frame on time! Camera capture failed“ als würde ich so ein Ali Express Teil ohne PSRAM verwenden. Das Design funktioniert im übrigen auch nicht. Kann der Fehler noch woanders her kommen?

    Vielen Dank und vg
    Kilian

  9. Guten Tag,
    ich möchte das Modul in einen HO Modellbahnwagen einbauen. Dazu ist es auf Grund der zu geringen Höhe des Wagens nötig, das Modul flach einzubauen. Dann kann ich die Kamera aber nicht mehr an der Rückwand des Waggons einbauen, da das Verbindungskabel Kamera-Stecker zu kurz ist. Gibt es Verlängerungskabel oder andere Kameramodule mit längerem Anschlusskabel? Falls jemand dazu etwas weiß, bin ich für einen Hinweis sehr dankbar.
    Gruß
    Rudolf

    1. Hallo Rudolf,

      das ist aber mal ein schönes Projekt, Modellbahn aus der Sicht des Reisenden. Zu deiner Frage ja es gibt Verlängerungen und auch Kameras mit längeren Kabeln,
      Hier eine Cam vom schnellen Ali: https://de.aliexpress.com/item/33032154571.html?spm=a2g0o.productlist.0.0.7bbfb95158cq3O&algo_pvid=fc9eceba-d0ea-4d2e-8216-c8e59311a5c0&algo_expid=fc9eceba-d0ea-4d2e-8216-c8e59311a5c0-37&btsid=0ab6f82215908620215504583e6b50&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_
      Unten noch mein Alter Beitrag dazu, ob das dann wirklich funktioniert müsste man mal ausprobieren,
      Gruß
      Stefan

      „Hallo Stefan,
      das ist ein FPC FFC Flachkabel mit 24 Adern (bitte nochmal gegeprüfen), es gibt Verlängerungen bei Ebay od. Ali Express wie der folgende Link zeigt (vorsicht sind nur 10 Adern) z.b hier, https://www.ebay.de/itm/5PCS-Extension-Flat-Cable-FPC-FFC-10Pin-To-10Pin-ZIF-0-5mm-Connector-Adapter-/153128423071

      Ach so, kurzer Nachtrag, wenn es zu Problemen mit der Verlängerung kommt, kann es sein dass die Spannung/Strom zu gring ist.
      Gruß
      Stefan“

  10. Hallo Sven,

    hast du auch versucht vor dem Programmieren den GPIO_Null auf Masse zu ziehen und im anschluss die RST-Taste am ESP zu drücken? Das müsste den Boot-Modus zum flashen aktivieren.

    Grüße Turgut

  11. Hallo zusammen,
    toller Artikel danke! Ich möchte gerne zusätzlich noch einen Temperatursensor über i2c anschließen, also (Cam+SD Karte+I2C Sensor), habe es aber noch nicht hingekriegt, den Sensor auszulesen… Habe ich in der Kombi überhaupt freie Ports dafür?
    Danke für die Hilfe!
    Liebe Grüße
    Mark

    1. Hallo Mark,
      danke für deinen Beitrag. Ich hatte das in einem anfänglichen Post mal beschrieben aber alte Posts verschwinden irgendwann ausser Sicht. Deshalb ist es jetzt bei Sonstiges gelandet.

      Wenn der Programmer ab ist bleiben meiner Meinung nach noch GPIO1, GPIO3 und evtl. GPIO16.
      Aber das habe ich leider noch nicht selbst getetest. Der ESP32 sollte noch mehr Pins frei haben, evtl. könnte man direkt an einen der Pins gehen.

      Mein Vorgehen wäre es mal den I2C Scanner (https://www.fambach.net/wp-admin/post.php?post=822&action=edit) als Wlan version zu implementieren.
      Dann den I2C Bus auf die genannten Ports zu legen und mit einem Putty den Output zu betrachten.
      Leider fehlt mir aktuell die Zeit 🙁 Ich wäre sehr an deiner Lösung interessiert 😉

      Gruß
      Stefan

  12. Hallo,
    vielen Dank für deinen Beitrag. Habe mir gleich das Gerät bestellt.
    Klappt dank der guten Kommentare. Doch leider nur bis zum Browser.
    Im Serial Monitor wird wie in der Beschreibung die IP des Webservers angezeigt. In der Fritzbox ist es im WiFi, doch der Server läuft nicht. Website Timeout. Auch der Stream auf Port 81 ist nicht erreichbar..
    Hat jemand eine Idee?

    1. Hallo Michael,

      Wenn du keine Exceptions bekommst und auch die 5V Spannungsversorgung angeschlossen hast, könnte ich auch nur Vermutungen anstellen. Alle würden in Richtung Firewall gehen.

      Gruß
      Stefan

      1. Hallo Stefan,

        danke für die Antwort. Warum auch immer bekomme ich nun die Website der Cam zu sehen. Die ganzen Einstellungen auf der linken Seite sind zu sehen. Einzelfotos werden hin und wieder angezeigt. Ein Video-Streaming-Bild leider gar nicht. Da sehe ich nur das Kreuz im roten Kreis. Nach einiger Zeit erscheint dann das browsertypische Symbol für eine Grafik, die nicht geladen werden kann.

        Da ich nun alle 3 ESP32-Cams mit zwei verschiedenen Routern und zwei verschiedenen Laptops getestet habe, bin ich mit meinem Latein am Ende. Ich hatte zwischenzeitlich auch die Version 1.0.2 für das ESP32-Board installiert. Dabei kam es allerdings zu Kompilierungsproblemen. Der 0k-Widerstand an der Antenne ist für die interne Antenne gesetzt.

        Hast du vielleicht noch einen Tipp?

        1. Hallo Michael,

          puh, das hatte ich auch ein paar mal wenn ich keine oder eine instabile 5V Versorgung hatte,
          das hast du ja aber schon, die Firewall ist auch schon geprüft.

          Wenn du es nicht ohnehin schon versucht hast, könntest du den Stream mal mit nem externen Prorgramm abfragen.
          Was kommt denn auf der Console an, wenn der Stream läuft müsste er dir schreiben wenn er einen Frame produziert sind kontinuierliche Ausgaben.

          Sonst lief das recht Problemlos, hättest du keine 3 Cams würde ich auf ein Motagsmodell tippen.

          Sorry habe sonst keine Idee ausser mal Consolen-Ausgaben in den Code zu bauen, um zu schauen was so lange dauert.

          (Pins?, Kameramodell?)

          Gruß

          Stefan

    1. Hallo Lars, nett habe hier seit zwei Wochen 2 weitere Kamera module u.a. mit pir liegen, diese wollte ich mal als nächstes ausprobieren. Vielleicht kann man das ja kombinieren.
      Zuerst möchte ich aber noch meinen Beitrag zum TTGO Ts fertig machen. Lora finde ich auch sehr interessant, habe mich aber noch garnicht (Ausser mit nem Bericht in der Make) auseinandergesetzt . Vielleicht sollte ich mal nach nem Forum ausscha halten die Kommentare werden doch recht schnell unübersichtlich .

      Gruß
      Stefan

    1. Glueckwunsch 🙂

      wenn Du mal Lust und Zeit hast, kannst Du ja mal gucken, ob -und wie- es Dir gelingt mittels

      LILYGO TTGO LORA32 868Mhz ESP32 LoRa OLED 0.96 Inch Blue

      laengere Entfernungen zu ueberbruecken… ich bin damit (mit den mitgelieferten Antennen) auf ca. 200m gekommen… und habe dann recht schnell das Projekt (zunaechst?!) auf Eis gelegt, da ich ein paar Kilometer brauche und weder die Antennen, noch die Ausgangsleistung messen kann…
      Ich weiss, Lora ist seeeeehr langsam, aber auch dafuer gibt es genug Anwendungsmoeglichkeiten. Zur Zeit nutze ich fuer ein Projekt einen Arduino mit GSM-Modul. Es werden nur ab und zu (manchmal mehrfach am Tag, teilweise wochenlang gar nicht) ein paar Daten (ca. 200 Bytes) uebertragen. Mittelfristig wuerde ich schon gerne von GSM weg kommen.
      Die Software selber ist kein Problem, die findet man an jeder Ecke, Wie so oft im Funkbereich scheitert es an der Hardware (Antenne) und ggf. an einer Einstellung, die dann den „Powermodus“ 😉 aktiviert…

      1. Claus hat gerade im nRF Beitrag geschrieben, dass er mit dem nRF24 Modul versucht gute Reichweiten hin zu bekommen evtl. habt ihr ja das gleich Forschungsgebiet 😉

        200 Meter hört sich echt wenig an da ja 2 bis 40 Kilometer angepriesen werden. Aber wahrscheinlich kommt es auch hier auf das „Richtige“ Modul an. In der Make war hierüber mal ein Beitrag muss mal bei Gelegenheit schauen welche Rechweiten die geschafft haben.

        Gruß Stefan

        Hier noch der Link zum Kommentar:
        https://www.fambach.net/funk-ueber-2-4-ghz-nrf24l01-module/#comment-3949

  13. Wieso kann man eigentlich auf einige Postings direkt antworten und auf andere nicht?

    Zur Frage nach dem Video ueber SPI: Da ich Dinge gerne mit eigen Augen sehe, habe ich bei Youtube nach:

    esp32 video spi

    gesucht. Gleich als Erstes kommt:

    https://www.youtube.com/watch?v=nRs2ZnhCV0g

    Hier wird ein Video von der SD Karte abgespielt und in der Beschreibung ist auch ein Link auf die Sourcen

    aber, wenn ich ehrlich sein soll: Ich denke, man ist hier mit einem Raspberry Pi besser bedient… Dafuer gibt es alles fertig und die paar Euro die man bei der Anschaffung spart, investiert man hundertfach in seine Zeit. Und irgendeine Stimme sagt mir, dass der Fragende die nicht unbedingt opfern moechte (aber vielleicht meint die Stimme auch mich 😉

    1. Hallo Lars,

      gute Frage mit dem direkten Antworten, habe bei WordPress dafür leider keine schnelle Antwort gefunden.
      Ich frage mich auch warum ich in der Administration immer in einem 5 Zeilen Feld antworten muss, wo doch so viel Platz auf dem Bildschirm ist …
      Zum Thema Display,
      Natürlich ist der Raspberry als Linux System durch seine vielen schon vorhanden Programme unschlagbar, zwei Zeilen Code und ne Config und schon ist das Bild da ;). Aber auch der PI muss installiert und konfiguriert werden, was nicht schwer ist aber für einen Neuling erstmal einwenig Website Hopping bedeutet.
      Auch gut eignet sich meiner Meinung nach das eigene Handy, das ist schon da und in den meisten Fällen auch leistungsfähiger.

      Davon abgesehen, wenn man aber ein Projekt sucht und vielleicht eine feste Station benötigt die weniger Strom zieht als der Raspberry ist man schon wieder nahe beim ESP.
      Nicht desto trotz muss ich dir zustimmen, Beispiele für Bildsequenzen oder Filme gibts genug im Netz.
      Mit meinen Suchanfragen konnte ich jedoch nur wenige finden dei denen der ESP als Streaming Client genutzt wird. Könnte ne lücke sein oder ich habe die falschen Begriffe verwendet 😉
      In einem bin ich mir aber ganz sicher, wer so etwas realisieren will muss auch einige Zeit ins Recherchieren stecken. Über deine Stimme musst du dir schon selbst klar werden, ganz abwegig klingen die für mich nicht.
      Meine Stimmen sagen mir, das es leichter ist einen paar Experten zu fragen als „lange“ nach einer Antwot zu suchen und sie sagen auch hey du hast da noch einen TTGO TS 1.2 rumliegen, der hat ein 1,4″ Farbdisplay und den wolltest du die ganze Zeit schon mal testen 🙂

      Gruß
      Stefan

      PS. Habe mal die feischalt funktion (Zensur 😉 ) nach dem ersten Beitrag ausgeschaltet, da der Captscha den ich installieren für die hunderte von Spam post die ich jeden Tag hatte zu funktionieren scheint.

      1. Stimmt, ein (altes) Handy ist eine noch leichtere Loesung! So viel Hard- und Software bekommt man selten fuer das Geld. Rechenleistung, Kamera, Programme… alles da!

        Wobei es natuerlich richtig ist, dass man viele Dinge macht, weil man es kann (oder lernen will). Geht mir auch so 🙂 ich kann auch bis 30 zaehlen und habe trotzdem aus einem Mikroprozessor, einem Ultraschallentfernungsmesser und einem LED Streifen einen Handwaschtimer gebaut 😉

        Ich kenne es aber aus anderen Foren, dass die Leute sich ueber- bzw. die Problematik unterschaetzen. Da wird der Blink Sketch hochgeladen, mit etwas Glueck klappt es auch und man hat „ganz alleine“ etwas gebaut. Und schon denkt man, man kann eine Smart Home Steuerung entwickeln… 😉

        Sogar ich habe, obwohl ich schon seit ueber 30 Jahren programmiere, erst einmal Blink umgeschrieben und zunaechst mit dem Delay rumexperimentiert, bis ich dann beliebige Texte morsen konnte, bevor ich angefangen habe, Sensoren anzuschliessen.

        Die Sache mit dem „Experten fragen, statt selber suchen“ sehe ich allerdings etwas kritischer. Wenn ich z. B. lese, dass jemand fragt, welche der 5 Optionen er fuer seine Kamera einstellen muss, waere mein Rat z. B.: Probiere doch erst einmal die restlichen vier aus! Wenn es dann nicht geht, kann man noch immer fragen. Aber das kommt vielleicht von meiner persoenlichen Geschichte: Zu meiner Zeit gab es kein Internet, Leute mit Computern waren die Aussenseiter, aeh Seltenheit 😉 und ich hatte viel Software ohne Dokumentation 😉 und musste damit ja irgendwie klar kommen…

        Apropos: „Zu meiner Zeit“: Dazu las ich heute einen Witz:

        Sohn: Papa, darf ich Deine Taschenlampe haben? Ich will heute Abend auf dem Friedhof knutschen!
        Vater, kopfschuettelnd: Zu meiner Zeit hatten wir keine Taschenlampen!
        Sohn: So sieht Mama auch aus 😉

        1. Hallo Lars,
          netter Witz :D. Ich muss sagen bei mir gabs schon Taschenlampen aber die Batterien waren immer ein Problem ;).
          Ich habe mal deinen Link mit dem Viewer näher betrachtet, finde ich ne gute Idee und habe den link jetzt auch mal in die Quellen aufgenommen.
          Folgende Seite klingt auch noch sehr vielversprechend:
          https://github.com/moononournation/M5Stack-Cam-Viewer
          Der M5 Stack ist ein ESP32 somt … ERSCHEINT ES MÖGLICH ;). Ich habe auch mal den TTGO TS angeworfen,
          bin aber aktuell erst nach der Verbindung die Daten werden gesammelt
          jetzt müsste ich sieh noch in jpeg Form bringen und dann über einen JPeg decoder anzeigen.
          Kenn jemand hierfür eine nette Lib, natürlich habe ich schon ein paar gefunden, gefallen mir aber nicht :).
          Wenn nicht würde ich glaube ich mal auf dem M5 stack weiter reiten und schauen wie die das machen.

          Gruß Stefan

    2. Ein kleiner Nachtrag: Ich habe glaube ich habe das Problem mit dem direkten Antworten gefunden. Ich hatte die Antworttiefe auf 2 beschränkt. Habe es mal auf 3 Hoch gesetzt. Ich glaube mehr wird zu unübersichtlich, Meinungen sind wie immer erswünscht 😉 Gruß Stefan

      1. hm.. an das mit der Tiefe dachte ich zunaechst auch, aber wenn ich mich nicht verguckt habe, gab es vorher auch schon Postings mit einer groesseren Tiefe?! Wobei ich mir nicht sicher bin… es kann auch sein, dass die Antworten von Dir stammen und als Admin darfst Du vielleicht das letzte Wort haben ;-)))

  14. Hallo,
    die Fehler: Brownout detected oder Kamera nicht erkannt sind häufig durch zu schwache Stromversorgung ausgelöst. Der FTDI232 bringt bei 3,3V zu wenig Strom für den Normalbetrieb (zum Programmieren reicht’s). Bei der Initialisierung bricht die Spannung ein, deshalb den FTDI auf 5V einstellen und am ESP32 den 5V-Pin (andere Seite) als Versorgung stöpseln. Dann läuft alles wunderbar.
    Stefan, Deine Seite ist toll, danke dafür.
    Gruß Georg

    1. Hallo
      Lob für die tolle Anleitung

      Kann man mit einem 2. esp32 und einem
      Display auch eine Video Brücke machen?
      hat der Empfänger esp32 genügend Dampf
      ein Display per SPI anzusteuern?

      1. Hallo Sigi,
        fände ich ein cooles Projekt. Ich versuche mich mal an einer möglichst vagen Antwort 😉
        Grundsätzlich können SPI oder auch I2C Displays am ESP betrieben werden.
        Ein beliebtes Beispiel sind die Uncanny Eyes (https://github.com/adafruit/Uncanny_Eyes).
        Dann bräuchte man noch einen MJpeg decoder auf dem Empfänger, was auch nur 10-20 Zeilen Code sind oder man denkt sich gleich ein eigenes Protokoll aus.

        Weiterhin gibt es begrenzende Faktoren

      2. Speicher – Bilder müssen gespeichert und an das Display übertragen werden.
        (Denkbar wäre hier auch zeilenweises übertragen und direktes Zeichnen auf dem Bildschirm.)
      3. Display Größe – viele Libs arbeiten mit Doppelbufferung, erst Bild in Speicher schreiben dann das Display updaten, bei 500×500 Pixel und 1 Bit farbtiefe wären das schon 250kB/Bild.
      4. CPU – der Empfänger muss das Bild Emfangen, decodieren und aufs Display packen da wird den ESP sicherlich nicht langweilig
      5. Fazit ein klares aber bestimmtes vielleicht 😉 Spass bei Seite ich denke es sollte möglich sein.
        Ich würde das gerne mal ausprobieren befürchte aber, dass mir die Zeit fehlt 🙁
        Wenn es jemand probieren möchte, ich verlinke oder veröffentliche die Ergebnisse gerne hier.

  15. Hallo,
    schöner Artikel, hat mich gleich inspiriert 😉
    Leider bekomme ich nach dem flashen im Monitor immer nur diese Ausgabe und keine IP:

    16:03:21.030 -> Brownout detector was triggered
    16:03:21.030 ->
    16:03:21.030 -> ets Jun 8 2016 00:22:57
    16:03:21.030 ->
    16:03:21.030 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    16:03:21.030 -> configsip: 0, SPIWP:0xee
    16:03:21.030 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    16:03:21.030 -> mode:DIO, clock div:1
    16:03:21.030 -> load:0x3fff0018,len:4
    16:03:21.030 -> load:0x3fff001c,len:1100
    16:03:21.030 -> load:0x40078000,len:9232
    16:03:21.030 -> load:0x40080400,len:6400
    16:03:21.030 -> entry 0x400806a8
    16:03:21.680 ->
    16:03:21.680 -> Brownout detector was triggered

    diese Anzeige läuft und läuft und läuft und …
    Erkennt jemand das Problem?
    Danke
    André

    1. Hallo André,
      ich hatte die „Brownout detector was triggered“ Nachricht bis jetzt nur wenn die Spannungsversorgung nicht gestimmt hat. Einfach mal mit externer 5V Spannungsquelle verbinden.
      Evtl. reicht auch ein besseres USB Kabel aus. Ich habe am Vin schon 6V und mehr angeschlossen, da ist ja ein Spannungswandler (Der dann aber ziemlich heiß wird), Angabe natürlich ohne Gewähr 😉

      Gruß
      Stefan

  16. Hallo Stefan, habe jetzt das Programm auf dem ESP32 drauf. Nun meckert der mir nur noch die Kamera an.
    Welche von den 5 Modellen entspricht meiner
    TY-OV2640-V2.0
    Oder, wo finde ich die Zuordnung? Nur über die Pinbelegung?
    Danke im voraus
    Siggi
    PS: im ser.Monitor kommt genau dein beschriebener Fehler.

    1. Hallo Siggi,

      dein Modul unterscheidet sich etwas von den meinem. Im Prinzip steuern die defines ja (fast) nur welche Pinbelegung verwendet wird.
      Bei mir war es CAMERA_MODEL_AI_THINKER. Grundsätzlich könntest du die auch mal durchprobieren natürlich ohne gewähr von mir ;).
      Bei mir war auch das Problem wenn ich keine 5 Volt angelegt habe, dass die Kamera nicht erkannt wurde, vielleicht hilft das noch?
      Das habe ich noch gefunden: https://github.com/espressif/esp32-camera/issues/5, es scheinen ein paar Leute Probleme mit dem Modell zu haben, weil Pullups anderst gesetzt werden müssten.

      Gruß
      Stefan

  17. Hallo, bin nach Anleitung gegangen und habe bereits beim Kompilieren folgenden Fehler:

    Der Sketch verwendet 2100663 Bytes (160%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
    Globale Variablen verwenden 53552 Bytes (16%) des dynamischen Speichers, 274128 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 ESP32 Wrover Module.

    Was mache ich falsch ?

    1. Hi Siggi schau mal bei den Boardeinstellungenen da muss Patition Schema huge app … no Ota stehen, Siehe Kapitel zur Testprogramm.
      Damit hats bei mir ohne Optimierung geklappt.
      Gruß
      Stefan

  18. Als kleiner viewer bietet sich unter Linux mpv an. Da der Probleme mit dem MJPEG Format hat, erzeugt man am Besten eine Datei
    ~/.config/mpv/mpv.conf mit folgendem Inhalt:
    demuxer-lavf-probescore=25
    Dann klappt’s auch mit dem Viewer!

    Ggf vor dem Aufruf die Konfiguration mit Hilfe der „http:///control?var=&val=“ URL schreiben. Dazu einmalig nach Benutzung über Web-IF den aktuellen Stand z.B. mit „wget http:///status“ auslesen und dann mit einer Latte von „http:///control?…“ setzen.

  19. Kurzes Update bezueglich der Streifen: Ich hatte das Modul mit 3,3 V betrieben, die ich aus einem breadboard power adapter erzeugt habe (mein USB-RS232 Adapter loeste einen Brownout reset aus).
    Nachdem ich mir an dem Adapter fast die Finger verbrannt habe, habe ich nach alternativen Spannungsversorgungen geguckt und dabei gesehen, dass das Modul auch einen 5V Eingang hat. Seit dem ich den nehme, sind die Streifen quasi weg.

    Gruss,
    Lars

    P. S.: Danke fuer den Artikel!

    1. Erstmal vielen Dank an alle die sich hier beteilligen. Ich betreibe den Blog schon ne weile und solch eine rege Kommunikation war noch nie da.
      Den Tip mit den 5V Eingang werde ich direkt in den Artikel aufnehmen.

      Ich habe nochmal über das Problem „im Programmiermodus verbleiben“ nachgedacht. Folgendes würde mir noch einfallen:
      Manchmal vergessen die Hersteller den Bootloader aufzuspielen, spielen den falschen auf oder es geht was schief. Es wäre also eine Möglichkeit diesen mal zu ersetzen. (habe ich selbst noch nicht gemacht gibt aber Beispiele im Netz).
      Als zweite Option ist mir nur noch ein physikalisches Problem eingefallen, schau mal ob am io0 irgendwo eine Verbindung zu einer anderen Leiterbahn oder so bsteht, bzw schaue mal am ESP ob dieser auch richtig verlötet ist. Gruß Stefan (und bleibt gesund 😉 )

  20. An Sven:
    Ich denke auch, dass sich Dein Modul noch im Programmiermodus befindet. Wenn Du sicher bist, dass Du die Bruecke zwischen io0 und GND entfernt hast und die Nachricht nach einem Reset noch immer erscheint, wuerde ich io0 einfach mal auf HIGH setzen, damit der Pin definitiv auf 1 ist.

    An alle: Auf dem obigen Foto sieht man duenne Querstreifen. Die habe ich auch. Weiss jemand, wie man sie weg bekommt, bzw. woher sie kommen? Bleibt bei Euch die Uebertragung auch ab und zu stehen und geht dann weiter?
    Gruss,
    Lars

  21. Hallo Stefan
    danke für den Artikel.
    Bei mir hat nach den üblichen Anfangsschwierigkeiten alles gut funktioniert.
    Hast Du schon herusgefunden wie man die fehlerhaften Zeilen
    verringern oder ganz ausschalten kann?
    ich würde gern auf einige Bider verzichten wenn ich dafür eine höhere Qualität erzielen kann.

  22. Hallo Stefan,

    ich habe Deinen Beitrag gelesen und die Installation auch versucht durchzuführen. Laut dem Log aus der ArduinoIDE kann ich nicht erkennen, ob er einen Fehler gemacht hat. Ich bekomme aber nach dem Upload nur die Meldung

    „ets Jun 8 2016 00:22:57

    rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
    waiting for download“

    angezeigt.

    Nach dem Upload in der IDE steht die Meldung

    „Writing at 0x00008000… (100 %)
    Wrote 3072 bytes (119 compressed) at 0x00008000 in 0.1 seconds (effective 282.5 kbit/s)…
    Hash of data verified.

    Leaving…
    Hard resetting via RTS pin…“

    Eigentlich sollte jetzt der sketch im esp sein, oder?

    Ich hoffe Du, oder jemand hier bei Dir hat eine Idee, warum der sketch nicht auf dem Board landet.

    Grüße

    Sven

    1. Hallo Sven, sieht erstmal recht gut aus. So pauschal fallen mir da auch nur die generelle Sachen ein: Unbedingt prüfen dass der Schalter am Programmer auf Programmieren steht und danach wieder zurück stellen. Evtl. vorher mal ein Reset machen. Wenn der Programmierer keinen Schalter hat, eine Widerstandsbrücke Basteln (siehe ESP01).Einstellungen zur Programmierung überprüfen (Board, ISP, Speicher, Comport). Ich hoffe das hilft weiter, Gruß Stefan

    2. Hallo Stefan,

      vielen Dank für Deine Antwort.

      Ich habe einiges versucht, und nach den div. Anleitungen versucht zu flashen…

      Mein Ergebnis ist immer das Gleiche: Schreiben geht, aber nach dem RST nichts…

      Hier der flash log aus der Arduino IDE

      Der Sketch verwendet 2107963 Bytes (67%) des Programmspeicherplatzes. Das Maximum sind 3145728 Bytes.
      Globale Variablen verwenden 53800 Bytes (16%) des dynamischen Speichers, 273880 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.
      esptool.py v2.6
      Serial port COM5
      Connecting……
      Chip is ESP32D0WDQ6 (revision 1)
      Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
      MAC: 24:6f:28:b0:f2:6c
      Uploading stub…
      Running stub…
      Stub running…
      Changing baud rate to 921600
      Changed.
      Configuring flash size…
      Auto-detected Flash size: 4MB
      Compressed 8192 bytes to 47…

      Writing at 0x0000e000… (100 %)
      Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 3855.1 kbit/s)…
      Hash of data verified.
      Compressed 17392 bytes to 11186…

      Writing at 0x00001000… (100 %)
      Wrote 17392 bytes (11186 compressed) at 0x00001000 in 0.2 seconds (effective 886.2 kbit/s)…
      Hash of data verified.
      Compressed 2108080 bytes to 1665609…

      Writing at 0x00010000… (0 %)
      Writing at 0x00014000… (1 %)
      Writing at 0x00018000… (2 %)
      Writing at 0x0001c000… (3 %)
      Writing at 0x00020000… (4 %)
      Writing at 0x00024000… (5 %)
      Writing at 0x00028000… (6 %)
      Writing at 0x0002c000… (7 %)
      Writing at 0x00030000… (8 %)
      Writing at 0x00034000… (9 %)
      Writing at 0x00038000… (10 %)
      Writing at 0x0003c000… (11 %)
      Writing at 0x00040000… (12 %)
      Writing at 0x00044000… (13 %)
      Writing at 0x00048000… (14 %)
      Writing at 0x0004c000… (15 %)
      Writing at 0x00050000… (16 %)
      Writing at 0x00054000… (17 %)
      Writing at 0x00058000… (18 %)
      Writing at 0x0005c000… (19 %)
      Writing at 0x00060000… (20 %)
      Writing at 0x00064000… (21 %)
      Writing at 0x00068000… (22 %)
      Writing at 0x0006c000… (23 %)
      Writing at 0x00070000… (24 %)
      Writing at 0x00074000… (25 %)
      Writing at 0x00078000… (26 %)
      Writing at 0x0007c000… (27 %)
      Writing at 0x00080000… (28 %)
      Writing at 0x00084000… (29 %)
      Writing at 0x00088000… (30 %)
      Writing at 0x0008c000… (31 %)
      Writing at 0x00090000… (32 %)
      Writing at 0x00094000… (33 %)
      Writing at 0x00098000… (34 %)
      Writing at 0x0009c000… (35 %)
      Writing at 0x000a0000… (36 %)
      Writing at 0x000a4000… (37 %)
      Writing at 0x000a8000… (38 %)
      Writing at 0x000ac000… (39 %)
      Writing at 0x000b0000… (40 %)
      Writing at 0x000b4000… (41 %)
      Writing at 0x000b8000… (42 %)
      Writing at 0x000bc000… (43 %)
      Writing at 0x000c0000… (44 %)
      Writing at 0x000c4000… (45 %)
      Writing at 0x000c8000… (46 %)
      Writing at 0x000cc000… (47 %)
      Writing at 0x000d0000… (48 %)
      Writing at 0x000d4000… (49 %)
      Writing at 0x000d8000… (50 %)
      Writing at 0x000dc000… (50 %)
      Writing at 0x000e0000… (51 %)
      Writing at 0x000e4000… (52 %)
      Writing at 0x000e8000… (53 %)
      Writing at 0x000ec000… (54 %)
      Writing at 0x000f0000… (55 %)
      Writing at 0x000f4000… (56 %)
      Writing at 0x000f8000… (57 %)
      Writing at 0x000fc000… (58 %)
      Writing at 0x00100000… (59 %)
      Writing at 0x00104000… (60 %)
      Writing at 0x00108000… (61 %)
      Writing at 0x0010c000… (62 %)
      Writing at 0x00110000… (63 %)
      Writing at 0x00114000… (64 %)
      Writing at 0x00118000… (65 %)
      Writing at 0x0011c000… (66 %)
      Writing at 0x00120000… (67 %)
      Writing at 0x00124000… (68 %)
      Writing at 0x00128000… (69 %)
      Writing at 0x0012c000… (70 %)
      Writing at 0x00130000… (71 %)
      Writing at 0x00134000… (72 %)
      Writing at 0x00138000… (73 %)
      Writing at 0x0013c000… (74 %)
      Writing at 0x00140000… (75 %)
      Writing at 0x00144000… (76 %)
      Writing at 0x00148000… (77 %)
      Writing at 0x0014c000… (78 %)
      Writing at 0x00150000… (79 %)
      Writing at 0x00154000… (80 %)
      Writing at 0x00158000… (81 %)
      Writing at 0x0015c000… (82 %)
      Writing at 0x00160000… (83 %)
      Writing at 0x00164000… (84 %)
      Writing at 0x00168000… (85 %)
      Writing at 0x0016c000… (86 %)
      Writing at 0x00170000… (87 %)
      Writing at 0x00174000… (88 %)
      Writing at 0x00178000… (89 %)
      Writing at 0x0017c000… (90 %)
      Writing at 0x00180000… (91 %)
      Writing at 0x00184000… (92 %)
      Writing at 0x00188000… (93 %)
      Writing at 0x0018c000… (94 %)
      Writing at 0x00190000… (95 %)
      Writing at 0x00194000… (96 %)
      Writing at 0x00198000… (97 %)
      Writing at 0x0019c000… (98 %)
      Writing at 0x001a0000… (99 %)
      Writing at 0x001a4000… (100 %)
      Wrote 2108080 bytes (1665609 compressed) at 0x00010000 in 24.7 seconds (effective 682.7 kbit/s)…
      Hash of data verified.
      Compressed 3072 bytes to 119…

      Writing at 0x00008000… (100 %)
      Wrote 3072 bytes (119 compressed) at 0x00008000 in 0.0 seconds (effective 1365.3 kbit/s)…
      Hash of data verified.

      Leaving…
      Hard resetting via RTS pin…

      Demnach sieht alles okay aus, aber es funktioniert nicht…

      Was kann das noch sein?

      Viele Grüße

      Sven

    3. Hallo Stefan,

      ich noch einmal. Ich vermute, dass das Board im BOOT/FLASH-Modus bleibt, ob ich gpio0 Brücke oder nicht. Wenn ich das richtig gelesen habe, ist die Meldung im Monitor
      „ets Jun 8 2016 00:22:57

      rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
      waiting for download“

      der Hinweis darauf, dass das Board auf Daten für den FLASH wartet. Korrigiere mich, wenn das falsch ist.

      Viele Grüße

      Sven

  23. Hallo,

    gibt es die Möglichkeit die Kamera über ein „Verlängerungskabel“ auch ein weniger weiter weg von der Platine zu platzieren?

    Wie heißt diese Anschluss über den die Kamera mit dem ESP32 verbunden wird?

    Grüße

    1. Hallo Stefan,
      das ist ein FPC FFC Flachkabel mit 24 Adern (bitte nochmal gegeprüfen), es gibt Verlängerungen bei Ebay od. Ali Express wie der folgende Link zeigt (vorsicht sind nur 10 Adern) z.b hier, https://www.ebay.de/itm/5PCS-Extension-Flat-Cable-FPC-FFC-10Pin-To-10Pin-ZIF-0-5mm-Connector-Adapter-/153128423071

      Ach so, kurzer Nachtrag, wenn es zu Problemen mit der Verlängerung kommt, kann es sein dass die Spannung/Strom zu gring ist.
      Gruß
      Stefan

  24. Hallo
    Kurze Frage zu den I/O ’s kann ich die wie gewohnt verwenden oder sind die für das Kammera-Modul Reserviert?
    Ich würde gern ein Bewegungsmelder, einen Helligkeitssensor und und ein Ausgang für Leuchten dazu basteln.

    1. Hallo Karsten,

      Ich habe mir mal die Pinouts von Kamera und SD Karte herausgesucht und in den Artikel gepackt.
      Wenn der Programmer ab ist bleiben meiner Meinung nach noch GPIO 1 und GPIO 3. Wenn du den SD Karten Slot nicht verwendest, hast du mehr GPIOs frei.

      Vielleicht wäre ja die TTGO Cam was für dich. Die ist nicht viel teuerer und hat schon einen Bewegungsmelder (PIR) mit drauf. Ausserdem hat sie einen USB Port gleich mit dabei …
      https://www.heise.de/newsticker/meldung/Gesichtserkennung-mit-ESP32-WLAN-Kameraboards-ab-15-Euro-4269519.html
      Gruß
      Stefan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.