Produktbilder dienen ausschließlich zu Informationszwecken und können je nach Charge und Lieferant geringfügige Unterschiede aufweisen. Produktspezifikationen und Preise können ohne vorherige Ankündigung geändert werden. Wir tun unser Bestes, um der Produktseite möglichst genaue und richtige Spezifikationen hinzuzufügen, es ist jedoch möglich, dass diese nicht ganz korrekt sind. Sollten Sie einen solchen Fall feststellen, melden Sie ihn uns bitte.
Das Produkt ist für Fachleute bestimmt und erfordert qualifiziertes und autorisiertes Personal. Dem Produkt liegt keine Montage-/Gebrauchsanleitung bei . Die Inbetriebnahme des Produktes durch nicht qualifizierte Personen führt zum Verlust der Garantie gemäß den AGB auf der Seite.
Die angegebenen technischen Spezifikationen (Strom, Leistung usw.) stellen maximale zulässige Werte unter idealen Betriebsbedingungen dar. Für einen sicheren Betrieb und eine optimale Lebensdauer wird empfohlen, das Produkt im Dauerbetrieb mit höchstens 50 % der angegebenen Maximalwerte zu verwenden.
ESP32-CAM-Entwicklungsboard, WLAN, Bluetooth, OV5640 5 MP
Kompakte Lösung für Projekte mit künstlicher Vision, Video-Streaming und IoT, mit WiFi 802.11b/g/n und Bluetooth 4.2 LE für drahtlose Anwendungen. Integriert einen Dual-Core-Prozessor mit bis zu 240 MHz und 4 MB PSRAM für schnelle Bildverarbeitung, eine OV5640-Kamera mit 5 MP für detaillierte Aufnahmen, TF-Kartenunterstützung und die Formate JPEG, BMP, Graustufen, kompatibel mit der Arduino IDE für eine schnelle Entwicklung.
Shipping by Mittwoch 11 November
Mit dem Kauf dieses Produkts erhalten Sie 311,06 Ft an Treuepunkten.
International fast shipping within EU. Free Shipping for orders above 100 EUR in most EU countries.
We ship from our stock within 24H
Sie erhalten bei jeder Bestellung Punkte im Wert von 5 %.
Das Entwicklungsboard ESP32-CAM kombiniert auf einem einzigen Modul den ESP32-Prozessor mit WiFi und Bluetooth sowie eine über ein Flexkabel mit dem FPC-Anschluss der Platine verbundene OV5640-Kamera mit 5 MP. Es ist eine Komplettlösung für die Aufnahme und Übertragung von Bildern in Projekten der künstlichen Bildverarbeitung, für Video-Streaming und IoT. Das Board kann unabhängig arbeiten und Bilder sowie Videostreams per WiFi ins Netzwerk senden, oder so programmiert werden, dass es auf über UART empfangene Befehle reagiert. Damit eignet es sich für Überwachung, Objekterkennung, Fernüberwachung und automatisierte Fotografie.
Der Prozessor ist ein dualer Core LX6 ESP32 mit 32 Bit, einer Taktfrequenz von 80 bis 240 MHz und einer Rechenleistung von bis zu 600 DMIPS. Der interne 520-KB-SRAM wird durch 4 MB externes PSRAM ergänzt, das für die Verarbeitung hochauflösender Bilder vor Kompression und Übertragung erforderlich ist. Die OV5640-Kamera bietet eine maximale Auflösung von 2592 x 1944 Pixeln (5 MP) und wird über einen 24-poligen FPC-Anschluss verbunden. Das Modul unterstützt WiFi 802.11 b/g/n, Bluetooth 4.2 LE, Bilder im JPEG-, BMP- oder Graustufenformat sowie die Energiesparmodi Deep-sleep, Modem-sleep und Light-sleep.
Zu den wichtigsten Merkmalen gehören der FPC-Anschluss für die Kamera, der microSD-Kartensteckplatz für Karten bis zu 4 GB, eine weiße LED als Blitz, eine auf der Platine gedruckte PCB-Antenne, zwei Pinreihen (insgesamt 16 Pins), die Versorgungsspannung, freie GPIOs und die UART-Schnittstelle bereitstellen, sowie eine RESET-Taste. Die Versorgung erfolgt mit 5 VDC am 5V-Pin, bei einer stabilen Stromquelle von mindestens 2 A; das Board kann außerdem über den 3V3-Pin mit 3.3 VDC versorgt werden.
Über die UART-Schnittstelle (Pins U0T und U0R) wird das Board mit einem an den Computer angeschlossenen USB-zu-Seriell-Adapter programmiert und getestet. Nach dem Verbinden mit dem Netzwerk können Bilder und Videostream direkt über einen Browser von jedem Computer oder Telefon im lokalen Netzwerk aufgerufen werden. Die verbleibenden GPIO-Pins ermöglichen den Anschluss zusätzlicher Sensoren oder Module, die mit Arduino, ESP32, STM32 oder Raspberry Pi kompatibel sind, unter Verwendung der 3.3-V-Logikpegel des Boards.
Spezifikationen:

Versorgungsspannung: 5 VDC (Pin 5V)
Stromverbrauch: 180 mA (Flash-LED aus) / 310 mA (Flash-LED an, maximale Helligkeit)
Stromverbrauch Deep-sleep: mindestens 6 mA
Stromverbrauch Modem-sleep: mindestens 20 mA
Stromverbrauch Light-sleep: mindestens 6.7 mA
Pinanzahl: 16
WiFi: 802.11 b/g/n
Bluetooth: 4.2 LE
CPU: Dual Core LX6, 32 Bit
CPU-Frequenz: 80 - 240 MHz
Interner Speicher: 520 KB SRAM
Externer Speicher: 4 MB PSRAM
SPI-Flash-Speicher: 32 Mbit
Unterstützte Schnittstellen: UART, SPI, I2C, PWM, ADC, DAC
Integrierte Kamera: OV5640, 5 MP, maximale Auflösung 2592 x 1944 Pixel
Kamerasteckverbinder: FPC, 24 Pins
Bildformate: JPEG, BMP, Graustufen
Speicherkarte: microSD (TF), bis zu 4 GB
Energiesparmodi: Deep-sleep, Modem-sleep, Light-sleep
Integrierter Software-Stack: LwIP, FreeRTOS
Netzwerk-Betriebsmodi: STA / AP / STA+AP
Smart Config / AirKiss: Ja
FOTA-Update: Ja
Mitgelieferter Programmer: Nein, externer Adapter erforderlich (FT232 oder gleichwertig empfohlen)
Abmessungen: 42 x 27 x 12 mm
ACHTUNG!
Bitte vor dem Kauf sorgfältig lesen
OV5640-Kamera (aktuelle Charge)
Dieses Modul wird mit der OV5640-Kamera (5 MP) anstelle der OV2640 geliefert, aufgrund von Problemen bei der Beschaffung qualitativ hochwertiger OV2640-Kameras. Der Sensor erwärmt sich im Betrieb stark und kann sich bei Berührung heiß anfühlen. Dies ist ein normales Verhalten für diese Platinen-Kamera-Kombination und kein Defekt.
Der Programmer kann je nach Charge den CH340- oder FT232-Treiber verwenden.
Obligatorische Nutzungsbedingungen:
Kühlkörper auf der Rückseite der Kamera montiert, mit Wärmeleitband oder -pad.
Gute Belüftung; verwenden Sie das Modul nicht in geschlossenen Gehäusen ohne Luftzirkulation.
Stabile 5-V-Versorgung, mindestens 2 A, am 5V-Pin. Das Modul nicht über den USB-Seriell-Adapter mit 3.3 V versorgen.
Reduzierung der Erwärmung der OV5640-Kamera auf dem ESP32-CAM-Board
Das ESP32-CAM-Board (AI Thinker) wurde für die OV2640-Kamera entwickelt und versorgt den Kameraanschluss mit 3.3 V (DOVDD), 2.8 V (AVDD) und 1.2 V (DVDD). Der OV5640-Sensor benötigt jedoch 1.5 V für den Kern (DVDD). Damit er auch unter diesen Bedingungen funktioniert, aktiviert die OV5640 standardmäßig ihren internen 1.5-V-Regler, gespeist aus der 3.3-V-Spannung. Der Spannungsunterschied wird direkt im Sensor in Wärme umgewandelt, weshalb sich das Modul im Dauerbetrieb stark erwärmt. Ab etwa 50°C können Rauschen und ein violetter Farbton im Bild auftreten. Die Lösung besteht darin, den 1.2-V-Regler durch einen 1.5-V-Regler zu ersetzen und anschließend den internen Regler per Software zu deaktivieren.
Erforderlich
Regler: XC6206P152MR oder ME6206A15XG (1.5 V, SOT-23)
Werkzeuge: Heißluftstation, Multimeter
OV5640-Register: 0x3031, Bit 3 (Wert 0x08)
Verwendung
Trennen Sie die Kamera ab und versorgen Sie das Board mit 5 V.
Messen Sie mit dem Multimeter gegen einen GND-Pin des Boards die Ausgangsspannung der SOT-23-Regler neben dem Kamerasteckverbinder und identifizieren Sie den Regler, der etwa 1.2 V liefert. Der 2.8-V-Regler und der AMS1117 (3.3 V) werden nicht geändert.

Notieren Sie die Pinbelegung VIN (3.3 V), VOUT (1.2 V) und GND des identifizierten Reglers.
Löten Sie den 1.2-V-Regler aus und setzen Sie an seiner Stelle den 1.5-V-Regler ein, nachdem Sie im Datenblatt geprüft haben, dass VIN, VOUT und GND mit den Pads übereinstimmen.
Versorgen Sie das Board ohne Kamera und prüfen Sie, dass die Ausgangsspannung des neuen Reglers zwischen 1.45 V und 1.55 V liegt.
Verbinden Sie die Kamera und fügen Sie im Code direkt nach esp_camera_init() die Deaktivierung des internen Reglers hinzu (siehe Beispiel unten).
Überprüfen Sie im Serial Monitor, dass das Register 0x3031 den Wert 0x08 hat.
Optional können Sie auf der Rückseite des Kameramoduls einen kleinen Aluminiumkühlkörper mit Wärmeleitband anbringen.
// OV5640: den internen 1.5-V-Kernregler deaktivieren (Register 0x3031, Bit 3)
// NUR verwenden, wenn DVDD extern mit 1.5 V versorgt wird
sensor_t *s = esp_camera_sensor_get();
if (s->id.PID == OV5640_PID) {
s->set_reg(s, 0x3031, 0x08, 0x08);
Serial.printf("OV5640 reg 0x3031 = 0x%02X\n", s->get_reg(s, 0x3031, 0xFF));
}
Nach der Änderung funktioniert die Kamera korrekt bei allen getesteten Auflösungen bis 2560x1920, und die Temperatur des Moduls sinkt. Ein Kühlkörper ist weiterhin erforderlich, da die Kamera im Betrieb dennoch etwa 50°C erreicht.
Alternative ohne Löten
Montieren Sie einen Kühlkörper auf der Kamera, verwenden Sie im Stream Auflösungen von höchstens SVGA oder HD und versetzen Sie den Sensor zwischen den Aufnahmen in den Standby-Modus (Register 0x3008 = 0x42 für Standby, 0x02 für aktiv).
Achtung! Deaktivieren Sie den internen Regler nicht auf einem unveränderten Board mit 1.2 V an DVDD. Der Sensorkern würde unterhalb der angegebenen Mindestspannung betrieben, mit dem Risiko fehlerhafter Bilder und Abstürze. Auf einem Board ohne DVDD-Regler bleibt der Kern bei Deaktivierung vollständig ohne Versorgung.
Nach der Änderung ist das Board nicht mehr für die OV2640-Kamera geeignet, die 1.2 V am Kern benötigt. Kennzeichnen Sie das Board entsprechend. Die Modifikation erfordert Erfahrung im Löten von SMD-Bauteilen.
Layout:
| Element | Funktion |
|---|---|
| ESP32-S-Modul mit PCB-Antenne | Der duale Core-ESP32-Prozessor und die auf der Platine gedruckte WiFi-/Bluetooth-Antenne. |
| Weiße LED | Wird als Blitz für die Kamera verwendet und von GPIO4 gesteuert. Sie leuchtet, wenn GPIO4 HIGH ist, und erlischt, wenn GPIO4 LOW ist. |
| Rote Status-LED | LED auf der Rückseite des Boards, gesteuert von GPIO33. Sie leuchtet, wenn GPIO33 LOW ist, und kann als frei verwendbare Anzeige im Programm dienen. |
| FPC-Anschluss für die Kamera | 24-poliger Anschluss, an dem das Flexkabel der OV5640-Kamera befestigt ist. |
| OV5640-Kamera | 5-MP-Kameramodul, separat vom Board montiert und über ein Flexkabel verbunden. |
| microSD-Kartenslot (TF) | Lokale Speicherung von Bildern und Dateien, Karten bis zu 4 GB. Verwendet die Pins IO2, IO4, IO12, IO13, IO14 und IO15. |
| Zwei Pinreihen (Doppel-Header) | Stellen die Versorgung, freie GPIOs und die UART-Schnittstelle bereit, insgesamt 16 Pins. |
| Pin IO0 | Wählt den Startmodus. Mit GND verbunden (der benachbarte GND-Pin) beim Reset, wechselt das Board in den Programmiermodus. Unverbunden läuft das Board das Programm aus dem Flash-Speicher. |
| RESET-Taste | Setzt den ESP32-Mikrocontroller zurück. Sie wird gedrückt, nachdem IO0 mit GND verbunden wurde, um in den Programmiermodus zu wechseln, und nachdem die Brücke entfernt wurde, um das Programm auszuführen. |
| Spannungsregler | Wandelt die 5-V-Versorgung in die für die Schaltung erforderliche 3.3-V-Spannung um. |
| Befestigungslöcher | Zwei Bohrungen zwischen den Pinreihen zur Befestigung des Boards. |
Pinbelegung:

| Anschluss | Pin | Funktion |
|---|---|---|
| 5V-Header | 5V | Versorgung des Boards, 5 VDC |
| 5V-Header | GND | Masse |
| 5V-Header | IO12 | GPIO12, auch als MicroSD DATA2 verwendet |
| 5V-Header | IO13 | GPIO13, auch als MicroSD DATA3 verwendet |
| 5V-Header | IO15 | GPIO15, auch als MicroSD CMD verwendet |
| 5V-Header | IO14 | GPIO14, auch als MicroSD CLK verwendet |
| 5V-Header | IO2 | GPIO2, auch als MicroSD DATA0 verwendet |
| 5V-Header | IO4 | GPIO4, auch als MicroSD DATA1 verwendet, steuert die Flash-LED |
| 3V3-Header | 3V3 | Versorgung des Boards, 3.3 VDC |
| 3V3-Header | IO16 | GPIO16, freie Leitung, kann UART2 RX sein |
| 3V3-Header | IO0 | GPIO0, wählt den Startmodus; wird zur Programmierung mit GND verbunden |
| 3V3-Header | GND | Masse |
| 3V3-Header | VCC | 3.3-V- oder 5-V-Ausgang, das Board darf nicht über diesen Pin versorgt werden |
| 3V3-Header | U0R (IO3) | UART RX, serielle Datenempfangsleitung |
| 3V3-Header | U0T (IO1) | UART TX, serielle Datenübertragungsleitung |
| 3V3-Header | GND | Masse |
| Kamerasignal (FPC) | ESP32 GPIO | Funktion |
|---|---|---|
| D0 | GPIO5 | Kameradatenleitung (Y2) |
| D1 | GPIO18 | Kameradatenleitung (Y3) |
| D2 | GPIO19 | Kameradatenleitung (Y4) |
| D3 | GPIO21 | Kameradatenleitung (Y5) |
| D4 | GPIO36 | Kameradatenleitung (Y6) |
| D5 | GPIO39 | Kameradatenleitung (Y7) |
| D6 | GPIO34 | Kameradatenleitung (Y8) |
| D7 | GPIO35 | Kameradatenleitung (Y9) |
| XCLK | GPIO0 | Eingangstakt für den Kamerasensor |
| PCLK | GPIO22 | Pixel-Ausgangstakt |
| VSYNC | GPIO25 | Vertikale Framesynchronisation |
| HREF | GPIO23 | Horizontale Zeilensynchronisation |
| SIOD (SDA) | GPIO26 | I2C / SCCB, Sensorkonfiguration |
| SIOC (SCL) | GPIO27 | I2C / SCCB, Sensorkonfiguration |
| PWDN | GPIO32 | Sensor-Power-Down, HIGH zum Abschalten zwischen Aufnahmen |
Verwendung:
Falls das Kameramodul noch nicht montiert ist, befestigen Sie es am FPC-Anschluss der Platine unter Beachtung der Kontaktorientierung und schließen Sie die Verriegelung des Steckverbinders.
Montieren Sie vor der ersten Verwendung einen kleinen Kühlkörper mit Wärmeleitband oder -pad auf der Rückseite der OV5640-Kamera, da sich der Sensor im Betrieb stark erwärmt und sich heiß anfühlen kann; dies ist ein normales Verhalten dieser Platinen-Kamera-Kombination.
Sorgen Sie für eine gute Belüftung rund um das Modul und verwenden Sie es nicht in einem geschlossenen Gehäuse ohne Luftzirkulation.
Versorgen Sie das Board mit 5 VDC, mindestens 2 A, am 5V-Pin über eine stabile Stromquelle, und versorgen Sie das Modul nicht über den 3.3-V-Ausgang eines USB-Seriell-Adapters. Legen Sie keine Spannung an den VCC-Pin an, da dies ein Ausgang ist.
Für die Programmierung verbinden Sie einen FT232 oder gleichwertigen Adapter mit den Pins U0R, U0T und GND, stellen Sie den Jumper des Adapters auf 3.3 V, verbinden Sie TXD des Adapters mit U0R und RXD des Adapters mit U0T sowie die Masse des Adapters mit der Masse des Boards.
Installieren Sie im Arduino IDE über den Boards Manager das esp32-Paket von Espressif Systems, wählen Sie das Board AI Thinker ESP32-CAM aus und öffnen Sie das Beispiel CameraWebServer im Menü File - Examples.
Wählen Sie im Code die Zeile mit dem Kameramodell CAMERA_MODEL_AI_THINKER aus und tragen Sie den WiFi-Netzwerknamen und das Passwort ein.
Verbinden Sie vor dem Hochladen vorübergehend IO0 mit GND, drücken Sie die RESET-Taste und laden Sie das Programm hoch.
Entfernen Sie nach dem Hochladen die Brücke zwischen IO0 und GND und drücken Sie erneut RESET. Öffnen Sie den Serial Monitor mit 115200 Baud und notieren Sie die angezeigte IP-Adresse; geben Sie diese anschließend im Browser eines Computers oder Telefons im selben Netzwerk ein.
Für kontinuierliches Streaming wählen Sie das JPEG-Format und eine reduzierte Auflösung (SVGA oder HD), und verwenden Sie die maximale Auflösung nur für Fotos. Wenn Sie periodische Aufnahmen machen, versetzen Sie den Sensor zwischen den Bildern in den Abschaltmodus, indem Sie GPIO32 auf HIGH setzen.
Wenn Sie die microSD-Karte verwenden, beachten Sie, dass die Pins IO2, IO4, IO12, IO13, IO14 und IO15 von der Karte belegt sind und IO4 zusätzlich die weiße LED steuert.
Das Modul wird nicht für kontinuierliches Streaming rund um die Uhr empfohlen. Für stabile Ergebnisse verwenden Sie eine gute Stromversorgung, kurze Stromkabel und ein WiFi-Netzwerk mit starkem Signal am Montageort des Boards.
Abmessungsdiagramm:

Tutorial:

- Versorgungsspannung
- 5 V DC
- Abmessungen
- 42 x 27 x 12 mm
- Anzahl der Pins
- 16
- Schnittstelle
- UART, SPI, I2C, PWM, ADC, DAC
- Flash-Speicher
- 32 Mbit SPI
- Stromverbrauch
- 180 mA (Flash LED oprit) / 310 mA (Flash LED pornit)
- Speicher
- 4 MB PSRAM
- Prozessor
- Dual-Core LX6, 32 Bit
- WLAN
- 802.11 b/g/n
- Bluetooth
- 4.2 LE
- Standby-Verbrauch
- 6 mA (Deep-sleep)
- SRAM-Speicher
- 520 KB
- Prozessortakt
- 80-240 MHz
Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.
Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.
Avertismente generale de siguranta:
Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.
Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.
Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.
Nu lasati produsul alimentat nesupravegheat in timpul testelor.
Produsul nu este jucarie si nu este destinat copiilor.
Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.
Identificare produs:
Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.
Producator / Importator / Distribuitor:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Website: www.sigmanortec.ro
Persoana responsabila in UE:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Documentatie si siguranta:
Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].
/*
Test sketch for ESP32-CAM (AI-Thinker) with OV5640 5MP camera
Board selected in Arduino IDE: "AI Thinker ESP32-CAM" (Tools > Board > esp32)
Board package: esp32 by Espressif Systems (installed from Boards Manager)
Boards Manager URL (File > Preferences): https://dl.espressif.com/dl/package_esp32_index.json
Libraries: none to install, esp_camera.h comes with the esp32 package
Wiring: camera attached to the onboard FPC connector, board powered at 5 V (min 2 A) on the 5V pin,
FT232 TXD -> U0R, FT232 RXD -> U0T, FT232 GND -> GND, IO0 bridged to GND only during upload
This sketch does not use WiFi. It checks that the camera starts and reports the frame size.
*/
#include "esp_camera.h"
// AI-Thinker camera pin map
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
bool cameraReady = false;
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("ESP32-CAM OV5640 test starting");
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
// SVGA keeps the sensor cooler than the maximum resolution
config.frame_size = psramFound() ? FRAMESIZE_SVGA : FRAMESIZE_CIF;
config.jpeg_quality = 12;
config.fb_count = psramFound() ? 2 : 1;
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x\n", err);
return;
}
sensor_t *s = esp_camera_sensor_get();
Serial.printf("Camera init OK, sensor PID: 0x%04X\n", s->id.PID);
cameraReady = true;
}
void loop() {
if (!cameraReady) {
delay(1000);
return;
}
camera_fb_t *fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Frame capture failed");
} else {
Serial.printf("Captured frame: %u x %u pixels, %u bytes\n",
(unsigned)fb->width, (unsigned)fb->height, (unsigned)fb->len);
esp_camera_fb_return(fb);
}
delay(5000);
}
Die Platine ESP32-CAM mit der 5-MP-Kamera OV5640 ist ein ESP32-Modul mit eingebauter Kamera, das Bilder aufnimmt und über WLAN überträgt, ohne weitere Bauteile zu benötigen. Es wird in Projekten zur Überwachung, Fernüberwachung, automatischen Fotografie und Bilderkennung eingesetzt.
Das Tutorial verwendet die Platine ESP32-CAM AI-Thinker als Plattform, programmiert über die Arduino IDE. Die Platine hat keinen USB-Anschluss, daher erfolgt das Hochladen des Programms über einen USB-Seriell-Adapter FT232RL. Die Stromversorgung erfolgt separat über eine Quelle mit 5 VDC und mindestens 2 A. Das Programm startet die Kamera und stellt einen Videostream über einen einfachen Webserver bereit.

So funktioniert es:
Der Sensor OV5640 erfasst das Bild und sendet es über 8 parallele Datenleitungen (D0 - D7) an den ESP32. Die Übertragung wird durch die Signale XCLK (Takt für den Sensor), PCLK (Pixeltakt), VSYNC (Bildbeginn) und HREF (gültige Zeile) synchronisiert. Die Konfiguration des Sensors, also Auflösung, Belichtung und Weißabgleich, erfolgt über einen I2C-/SCCB-Bus auf den Leitungen SIOD (GPIO26) und SIOC (GPIO27). Der Pin PWDN (GPIO32) kann den Sensor abschalten, wenn er nicht benutzt wird.
Die folgende Rechnung zeigt, warum das Bild direkt im Sensor als JPEG komprimiert wird. Die maximale Auflösung beträgt 2592 x 1944 = 5 038 848 Pixel. Mit 2 Byte pro Pixel (Format RGB565) hätte ein Bild etwas über 10 MB (10 077 696 Byte), also mehr als die 4 MB PSRAM der Platine. Als JPEG belegt ein Bild wesentlich weniger Platz und passt problemlos in den Speicher.
Bei der Auflösung SVGA (800 x 600 = 480 000 Pixel) hat ein JPEG-Bild je nach Szene und der im Code gewählten Qualität etwa 10 - 40 KB. In unseren Tests lag der Durchschnitt bei Qualität 12 bei etwa 13 KB pro Bild. Wenn das WLAN in der Praxis 400 KB/s liefert und ein Bild 40 KB groß ist, ergibt sich 400 / 40 = 10 Bilder pro Sekunde. Oberhalb der HD-Auflösung liefert der Sensor bei einem XCLK-Takt von 20 MHz nur 4 - 6 Bilder pro Sekunde. Die maximale Auflösung bleibt daher für Einzelfotos reserviert, und für den Videostream werden SVGA oder HD gewählt. Die Bibliothek esp32-camera bietet als maximale Auflösung QSXGA mit 2560 x 1920 Pixel, etwas unter den 2592 x 1944 Pixeln des Sensors.
Anschluss:
Die Platine wird über eine separate Quelle mit 5 VDC und mindestens 2 A am Pin 5V versorgt. Speisen Sie sie nicht über den USB-Seriell-Adapter, denn dieser liefert nicht den Spitzenstrom, den die Kamera OV5640 zusammen mit dem WLAN benötigt, und der 3,3-V-Ausgang des Adapters ist für diese Platine nicht geeignet. Der Pin VCC des Adapters FT232RL bleibt unverbunden, und der Jumper des Adapters wird auf 3.3 V gesetzt, damit die Signale TXD und RXD den Logikpegel von 3.3 V der GPIOs des ESP32 haben. Die seriellen Leitungen werden gekreuzt: TXD des Adapters geht an U0R, RXD des Adapters an U0T. Die Brücke zwischen IO0 und GND wird nur während des Hochladens des Programms gesetzt.
| Pin der Platine | Wird verbunden mit | Funktion |
|---|---|---|
| 5V | Quelle 5 VDC, Klemme + | Stromversorgung der Platine, mindestens 2 A |
| GND (Header 5V) | Quelle 5 VDC, Klemme - | Masse der Stromversorgung |
| U0R (GPIO3) | FT232 TXD | Empfang serieller Daten auf der Platine |
| U0T (GPIO1) | FT232 RXD | Senden serieller Daten von der Platine |
| GND (neben U0T) | FT232 GND | Gemeinsame Masse mit dem Adapter |
| IO0 | GND (Pin neben IO0) | Temporäre Brücke für den Programmiermodus |
Das folgende Bild zeigt den Anschluss der Platine an den FT232-Programmierer.

Tasten, Einstellungen und Anzeigen:
| Element | Funktion | Bedienung |
|---|---|---|
| Taste RESET | Setzt den Mikrocontroller ESP32 zurück. | Kurz drücken, nachdem IO0 mit GND verbunden wurde, um in den Programmiermodus zu gelangen. Danach die Brücke entfernen und erneut drücken, um das Programm zu starten. |
| Brücke IO0 - GND | Wählt den Startmodus. | Beim Zurücksetzen gesetzt, wartet die Platine auf das Hochladen eines Programms. Beim Zurücksetzen ohne Brücke führt die Platine das Programm aus dem Flash aus. |
| Weiße LED (Blitz) | Beleuchtet die Szene für die Kamera, gesteuert von GPIO4. | Leuchtet, wenn GPIO4 HIGH ist. Im Programm aus dem Tutorial bleibt sie aus. |
| Rote Status-LED | Anzeige auf der Rückseite der Platine, gesteuert von GPIO33. | Leuchtet, wenn GPIO33 LOW ist. Wird vom Programm aus dem Tutorial nicht verwendet. |
Zum Hochladen verbinden Sie IO0 mit GND, drücken RESET und laden das Programm hoch. Die Platine ist im richtigen Modus, wenn die Arduino IDE den Upload ohne Verbindungsfehler startet.
Entfernen Sie nach dem Hochladen die Brücke zwischen IO0 und GND und drücken Sie RESET. Die Platine führt nun das Programm aus, und im Seriellen Monitor erscheinen die Startmeldungen.
Die weiße LED bleibt im Programm aus. Wenn Sie zusätzliche Beleuchtung wünschen, steuern Sie GPIO4 im Code an. Beachten Sie, dass die LED bei maximaler Helligkeit den Verbrauch um etwa 130 mA erhöht. In unseren Tests hat die Platine mit der Kamera OV5640 bei 5 V etwa 340 - 360 mA verbraucht, mit aktiver Kamera und ausgeschalteter LED.
Platine und Bibliotheken:
Gehen Sie in der Arduino IDE zu Datei - Voreinstellungen und tragen Sie im Feld Zusätzliche Boardverwalter-URLs die Adresse https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json ein. Öffnen Sie danach Werkzeuge - Board - Boardverwalter, suchen Sie nach esp32 und installieren Sie das Paket esp32 by Espressif Systems in einer aktuellen Version (2.0.x oder neuer).
Nach der Installation wählen Sie die Platine AI Thinker ESP32-CAM unter Werkzeuge - Board - esp32. Die folgenden Abbildungen zeigen die Konfigurationsschritte in der Arduino IDE.
Es muss keine Bibliothek über den Bibliotheksverwalter installiert werden, da esp_camera.h und WiFi.h im Paket esp32 by Espressif Systems enthalten sind.
Der Code:
Das Programm initialisiert die Kamera mit der Pinbelegung der Platine AI-Thinker, verbindet sich mit dem WLAN und sendet den JPEG-Videostream an einen Client, der über Port 80 verbunden ist. Ersetzen Sie vor dem Hochladen Name und Passwort des Netzwerks.
/*
ESP32-CAM (AI-Thinker) with OV5640 5MP camera - WiFi MJPEG video stream
Board selected in Arduino IDE: "AI Thinker ESP32-CAM" (Tools > Board > esp32)
Board package: esp32 by Espressif Systems (installed from Boards Manager)
Boards Manager URL (File > Preferences): https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Libraries: none to install, esp_camera.h and WiFi.h come with the esp32 package
Upload wiring: FT232 TXD -> U0R, FT232 RXD -> U0T, FT232 GND -> GND,
5V supply (min 2 A) on the 5V pin, IO0 bridged to GND only during upload
*/
#include "esp_camera.h"
#include <WiFi.h>
// ---- Wi-Fi credentials (replace with your own) ----
const char* WIFI_SSID = "YOUR_WIFI_SSID";
const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD";
// ---- AI-Thinker camera pin map ----
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
// White flash LED on GPIO4 (also SD card DATA1)
#define FLASH_LED_GPIO_NUM 4
WiFiServer server(80);
// Configure and start the camera
bool startCamera() {
camera_config_t config = {}; // start from a zeroed structure
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sccb_sda = SIOD_GPIO_NUM;
config.pin_sccb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000; // 20 MHz clock for the sensor
config.pixel_format = PIXFORMAT_JPEG; // the sensor compresses the image itself
if (psramFound()) {
config.frame_size = FRAMESIZE_SVGA; // 800x600, a good balance for streaming
config.jpeg_quality = 12; // lower number = better quality, bigger file
config.fb_count = 2; // two frame buffers for smoother streaming
config.fb_location = CAMERA_FB_IN_PSRAM;
config.grab_mode = CAMERA_GRAB_LATEST; // always send the newest frame
Serial.println("PSRAM found, using SVGA with 2 frame buffers");
} else {
config.frame_size = FRAMESIZE_CIF;
config.jpeg_quality = 15;
config.fb_count = 1;
config.fb_location = CAMERA_FB_IN_DRAM;
config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
Serial.println("No PSRAM, using CIF with 1 frame buffer");
}
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x\n", err);
return false;
}
// Read the sensor ID to confirm which camera is attached
sensor_t *s = esp_camera_sensor_get();
Serial.printf("Camera init OK, sensor PID: 0x%04X\n", s->id.PID);
if (s->id.PID != OV5640_PID) {
Serial.println("Warning: the attached sensor is not an OV5640");
}
return true;
}
// Read and ignore the HTTP request header sent by the browser
void skipRequest(WiFiClient &client) {
unsigned long start = millis();
while (client.connected() && millis() - start < 1000) {
if (client.available()) {
String line = client.readStringUntil('\n');
if (line.length() <= 1) break; // blank line ends the header
}
}
}
// Send frames to the client until it disconnects
void streamTo(WiFiClient &client) {
client.print("HTTP/1.1 200 OK\r\n");
client.print("Content-Type: multipart/x-mixed-replace; boundary=frame\r\n\r\n");
Serial.println("Streaming started");
uint32_t frames = 0;
while (client.connected()) {
camera_fb_t *fb = esp_camera_fb_get(); // get one JPEG frame
if (!fb) {
Serial.println("Frame capture failed");
break;
}
size_t len = fb->len;
client.print("--frame\r\n");
client.print("Content-Type: image/jpeg\r\n");
client.printf("Content-Length: %u\r\n\r\n", (unsigned)len);
size_t sent = client.write(fb->buf, len);
client.print("\r\n");
esp_camera_fb_return(fb); // give the buffer back to the driver
if (sent != len) break; // client is gone
frames++;
}
Serial.printf("Client disconnected after %u frames\n", (unsigned)frames);
}
void setup() {
Serial.begin(115200);
delay(500);
Serial.println();
Serial.println("ESP32-CAM OV5640 stream example");
// Keep the white flash LED off
pinMode(FLASH_LED_GPIO_NUM, OUTPUT);
digitalWrite(FLASH_LED_GPIO_NUM, LOW);
if (!startCamera()) {
return; // stop here if the camera did not start
}
// Connect to Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
WiFi.setSleep(false); // no Wi-Fi power saving, better for streaming
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("WiFi connected, IP address: ");
Serial.println(WiFi.localIP());
Serial.print("Open http://");
Serial.print(WiFi.localIP());
Serial.println("/ in a browser to see the stream");
server.begin();
}
void loop() {
WiFiClient client = server.available(); // wait for a browser
if (client) {
Serial.println("Client connected");
skipRequest(client);
streamTo(client);
client.stop();
}
}
So funktioniert der Code:
Der erste Teil enthält die Definitionen. Die Konstanten WIFI_SSID und WIFI_PASSWORD speichern die Netzwerkdaten. Die Zeilen mit PWDN_GPIO_NUM, XCLK_GPIO_NUM, SIOD_GPIO_NUM, SIOC_GPIO_NUM, Y2_GPIO_NUM - Y9_GPIO_NUM, VSYNC_GPIO_NUM, HREF_GPIO_NUM und PCLK_GPIO_NUM beschreiben die Pins zwischen dem ESP32 und dem Kameraanschluss, dieselben wie in der Tabelle der Beschreibung. FLASH_LED_GPIO_NUM ist GPIO4, und das Serverobjekt lauscht auf Port 80.
Die Funktion startCamera() füllt die Struktur camera_config_t mit den Pins der Kamera, dem XCLK-Takt von 20 MHz und dem Format PIXFORMAT_JPEG. Die Struktur wird leer initialisiert (= {}), damit nicht gesetzte Felder keine zufälligen Werte enthalten. Gibt psramFound() true zurück, wird FRAMESIZE_SVGA mit zwei Bildpuffern im PSRAM (fb_count = 2) und dem Modus CAMERA_GRAB_LATEST gewählt, der immer das neueste Bild sendet. Andernfalls wird FRAMESIZE_CIF mit einem einzigen Puffer im internen Speicher gewählt. Nach esp_camera_init() liest die Funktion den Sensor mit esp_camera_sensor_get(), gibt die PID-Kennung aus, die beim OV5640 0x5640 ist, und warnt, wenn der angeschlossene Sensor ein anderer ist.
Die Funktion skipRequest() liest und ignoriert den HTTP-Header der Anfrage des Browsers bis zur ersten Leerzeile. Die Funktion streamTo() sendet den Header multipart/x-mixed-replace und wiederholt dann in einer Schleife: Sie holt ein Bild mit esp_camera_fb_get(), sendet das Trennzeichen, den Typ und die Länge, schreibt die JPEG-Daten mit client.write() und gibt den Puffer mit esp_camera_fb_return() frei. Die Schleife endet, wenn sich der Client trennt.
In setup() wird Serial mit 115200 Baud gestartet, die weiße LED bleibt aus, startCamera() wird aufgerufen, die Platine verbindet sich über WiFi.begin() mit dem WLAN, und die erhaltene IP-Adresse wird ausgegeben. In loop() wartet das Programm mit server.available() auf einen Client, und sobald einer erscheint, sendet es ihm den Stream über streamTo().
Ergebnis:
Öffnen Sie den Seriellen Monitor mit 115200 Baud. Nach dem Start muss die Bestätigung der Kamerainitialisierung mit PID 0x5640 erscheinen, danach die IP-Adresse der Platine. Geben Sie die Adresse im Browser ein, dann erscheint das Bild in Echtzeit.
ESP32-CAM OV5640 stream example
PSRAM found, using SVGA with 2 frame buffers
Camera init OK, sensor PID: 0x5640
Connecting to WiFi......
WiFi connected, IP address: 192.168.1.57
Open http://192.168.1.57/ in a browser to see the stream
Client connected
Streaming started
Client disconnected after 412 frames
Häufige Probleme:
Der Upload bricht mit einem Verbindungsfehler ab. Die übliche Ursache ist der falsche Startmodus. Prüfen Sie, ob IO0 mit GND verbunden ist, drücken Sie RESET vor dem Hochladen und kontrollieren Sie, ob TXD an U0R und RXD an U0T angeschlossen ist und nicht direkt.
Nach dem Hochladen passiert nichts, und im Seriellen Monitor erscheint eine Meldung, dass auf das Hochladen des Programms gewartet wird. Die Brücke zwischen IO0 und GND ist noch gesetzt. Entfernen Sie sie und drücken Sie RESET.
Die Platine startet sich ständig neu, oder es erscheint die Meldung Brownout detector was triggered. Die Stromversorgung ist unzureichend, meist weil die Platine über USB oder mit einer schwachen Quelle versorgt wird. Verwenden Sie eine stabile Quelle mit 5 VDC und mindestens 2 A sowie kurze Kabel.
Es erscheint die Meldung Camera init failed mit einem Fehlercode. Das Flachbandkabel der Kamera ist nicht vollständig eingesteckt, oder die Klappe des FPC-Steckers ist nicht geschlossen. Trennen Sie die Stromversorgung, stecken Sie das Kabel mit den Kontakten in der richtigen Position ein und schließen Sie die Klappe.
Das Bild hat nach einer gewissen Betriebszeit Rauschen oder einen violetten Farbstich. Der Sensor OV5640 hat sich zu stark erwärmt. Montieren Sie einen Kühlkörper auf der Rückseite der Kamera, sorgen Sie für Belüftung und reduzieren Sie die Auflösung auf SVGA oder HD.
Die Platine verbindet sich mit dem WLAN, aber das Bild stockt oder hat nur wenige Bilder pro Sekunde. Das WLAN-Signal ist schwach oder die Auflösung ist zu hoch. Rücken Sie die Platine näher an den Router und reduzieren Sie die Auflösung im Code.
Einschränkungen und Tipps:
Das Modul wird für einen dauerhaften Streaming-Betrieb rund um die Uhr nicht empfohlen, da sich die Kamera OV5640 auf dieser Platine stark erwärmt. Der Grund ist, dass die Platine für die Kamera OV2640 entwickelt wurde und den Kameraanschluss mit 3.3 V, 2.8 V und 1.2 V versorgt, während der OV5640 seinen Kern über einen internen 1.5-V-Regler versorgt, der aus 3.3 V gespeist wird. Die Spannungsdifferenz wird direkt im Sensor in Wärme umgewandelt, und ab etwa 50 Grad C können Rauschen und ein violetter Farbstich im Bild auftreten.
Ohne Hardwareänderungen verwenden Sie einen Kühlkörper auf der Kamera, im Streaming Auflösungen von höchstens SVGA oder HD und setzen den Sensor zwischen den Aufnahmen über das Register 0x3008 in den Standby (Wert 0x42 für Standby und 0x02 für aktiv). In unseren Tests sank der Verbrauch der Platine von etwa 338 mA auf 163 mA, wenn der Sensor im Standby war. Die maximale Auflösung der Bibliothek, 2560 x 1920 Pixel, eignet sich für Fotos.
Anwender mit Erfahrung im Löten von SMD-Bauteilen können die Erwärmung reduzieren, indem sie den 1.2-V-Regler neben dem Kameraanschluss durch einen 1.5-V-Regler ersetzen (zum Beispiel XC6206P152MR oder ME6206A15XG) und per Software den internen Regler des Sensors abschalten. Dies geschieht über Bit 3 des Registers 0x3031 (Wert 0x08), direkt nach esp_camera_init(). Nach dieser Änderung blieb der Kühlkörper der Kamera in unseren Tests merklich kühler.
// Only on a board where the DVDD regulator was replaced with a 1.5 V one
sensor_t *s = esp_camera_sensor_get();
if (s->id.PID == OV5640_PID) {
s->set_reg(s, 0x3031, 0x08, 0x08); // bypass the internal 1.5 V core regulator
}
Deaktivieren Sie den internen Regler nicht auf einer unveränderten Platine, denn der Kern des Sensors würde dann unter der minimalen Spannung arbeiten, mit dem Risiko beschädigter Bilder und Abstürze. Eine modifizierte Platine ist nicht mehr für die Kamera OV2640 geeignet und muss entsprechend gekennzeichnet werden.
Auf Basis dieses Tutorials können Sie eine Überwachungskamera mit Zugriff über den Browser, ein System für periodische Fotos mit Speicherung auf der microSD-Karte oder ein Projekt zur Objekterkennung bauen, indem Sie die freien GPIOs für Bewegungssensoren oder andere Module nutzen.