ESP32 CAM mit OV5640

Begonnen von TomLee, 22 Dezember 2023, 13:59:23

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

hab mir ohne mich damit zuvor wirklich zu beschäftigen/ einzulesen dieses Fischauge bestellt. Ich war der Hoffnung dass das schon irgendwie klappen wird iVm. dem CameraWebServer-Sketch, spätestens halt wenn ich Pin 24 mit 3,3 Volt verbinde.
Auf einem ESP32-Kameramodul das bereits mit Tasmota geflasht war hab ich das OV2640-Modul einfach mal gegen das OV5640-Modul getauscht, da wurde dann einfach kein Stream mehr angezeigt.
Mit dem CameraWebServer-Sketch bekomme ich den Stream angezeigt, der aber nur ein "verschwommenes" Bild zeigt, egal ob mit oder ohne Verbindung des 24. Pin mit 3,3V.

Hat sich hier irgendwer schon damit beschäftigt und kann was dazu sagen ?

Gruß

Thomas

Papa Romeo

#1
Zitat von: TomLee am 22 Dezember 2023, 13:59:23Auf einem ESP32-Kameramodul das bereits mit Tasmota geflasht war hab ich das OV2640-Modul einfach mal gegen das OV5640-Modul getauscht ...

Hallo Thomas,
wird so nicht funktionieren, da der bestehende Sketch auf dem ESP mit der camera_index.h für das OV2640-Modul kompiliert und geflashed wurde.
Vor dem Kompilieren musst du dem Sketch bzw. ESP mitteilen, mit welchem Kamera-Modul er zusammenarbeiten soll.
Dazu ist es aber auch erforderlich, das du eine camera_index.h im Sketch-Ordner hinterlegst, welche die entsprechenden Daten für das OV5640-Modul enthält.

... eventuell noch zur Info:  https://forum.fhem.de/index.php?topic=95604.0

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

TomLee

Vielen Dank für die Antwort.

Deine angehängte camera_index.h, mein ich, sieht auf den ersten Blick genauso aus, wie die die schon in dem Sketch-Ordner standardmäßig vorhanden ist.

Die Frage die ich mir dazu sowieso schon zuvor stellte ist die, wo ich jetzt in dem Sketch (denke doch mal in CamerWebServer.ino) genau mitteile das er für das OV5640 kompilieren soll, ich sehe/finde die Stelle in keiner der Dateien in dem Sketch-Ordner ?

frober

Bei mir ist in der camera_index.h nur die verwendete Kamera enthalten.

Also alles was nicht benötigt wird entfernen.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

TomLee

Hi,

wenn ich nur das define und die zugehörige Variable für OV5640 in der camera_index.h lasse bekomme ich den Fehler beim kompilieren:
Compilation error: 'index_ov3660_html_gz' was not declared in this scopeDie Arduino IDE "springt" in die Zeile 1192 der Datei app_httpd.cpp und die Zeilen 1192 und 1196 werden rot hinterlegt.

Das ist die Funktion:

Zitatstatic esp_err_t index_handler(httpd_req_t *req)
{
    httpd_resp_set_type(req, "text/html");
    httpd_resp_set_hdr(req, "Content-Encoding", "gzip");
    sensor_t *s = esp_camera_sensor_get();
    if (s != NULL) {
        if (s->id.PID == OV3660_PID) {
1192        return httpd_resp_send(req, (const char *)index_ov3660_html_gz, index_ov3660_html_gz_len);
        } else if (s->id.PID == OV5640_PID) {
            return httpd_resp_send(req, (const char *)index_ov5640_html_gz, index_ov5640_html_gz_len);
        } else {
1196        return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len);
        }
    } else {
        ESP_LOGE(TAG, "Camera sensor not found");
        return httpd_resp_send_500(req);
    }
}

Papa Romeo

#5
..dann lass die Daten für die OV3660 auch mal drin.

 Edit: nee...geht nicht ... du musst die if-Anweisungen für die nicht genutzten Kameras rauslöschen.

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

TomLee

Mehr oder weniger das gleiche Verhalten, nur das jetzt nur noch die fehlenden Daten zu dem OV2640 angeprangert werden:

Zitatstatic esp_err_t index_handler(httpd_req_t *req)
{
    httpd_resp_set_type(req, "text/html");
    httpd_resp_set_hdr(req, "Content-Encoding", "gzip");
    sensor_t *s = esp_camera_sensor_get();
    if (s != NULL) {
        if (s->id.PID == OV3660_PID) {
            return httpd_resp_send(req, (const char *)index_ov3660_html_gz, index_ov3660_html_gz_len);
        } else if (s->id.PID == OV5640_PID) {
            return httpd_resp_send(req, (const char *)index_ov5640_html_gz, index_ov5640_html_gz_len);
        } else {
1196        return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len);
        }
    } else {
        ESP_LOGE(TAG, "Camera sensor not found");
        return httpd_resp_send_500(req);
    }
}

Es muss doch irgendwo im Code eine Stelle geben wo man einstellt für welches Modul kompiliert werden soll ?

frober

Ich vermute das die Kamera automatisch erkannt wird.
Hast du das richtige Board ausgewählt?

Laut camera_pins.h gibt es da einige Unterschiede.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

TomLee

#8
Ja, die Frage welches ESP-Board man wählen muss und ob es davon abhängig ist, stell ich mir auch. Mit dem OV2460 hab ich bisher #define CAMERA_MODEL_AI_THINKER genommen, damit klappts mit dem OV5640 eben nicht.

Ein Bild von meinem ESP ist mal im Anhang.

Hier das :
#elif defined(CAMERA_MODEL_ESP_OV5640)

#define RESET_GPIO_NUM     5
#define XCLK_GPIO_NUM     15
#define SIOD_GPIO_NUM     22
#define SIOC_GPIO_NUM     23

#define Y9_GPIO_NUM       39
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       33
#define Y6_GPIO_NUM       27
#define Y5_GPIO_NUM       12
#define Y4_GPIO_NUM       35
#define Y3_GPIO_NUM       14
#define Y2_GPIO_NUM        2

#define VSYNC_GPIO_NUM    18
#define HREF_GPIO_NUM     36
#define PCLK_GPIO_NUM     26

#define LED_GPIO_NUM      25

hab ich eben mal in der camera_pins.h ergänzt und in der CamerWebServer.ino #define CAMERA_MODEL_ESP_OV5640.
Damit gibt es einen Kompilierfehler Compilation error: 'PWDN_GPIO_NUM' was not declared in this scope, daraufhin hab ich in CAMERA_MODEL_ESP_OV5640 PWDN_GPIO_NUM    32 ergänzt (wie in CAMERA_MODEL_AI_THINKER).Damit klappt dann zwar das kompilieren, in der Oberfläche startet aber kein Stream.

frober

Laut Berrybase
ZitatUnterstützt Kameras des OV2640 und OV7670

Das habe ich auch schon wo anders gelesen.

https://www.berrybase.de/en/esp32-cam-development-board-inkl.-ov2640-kameramodul
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

TomLee

::) THX

Dann werd ich mal schauen wo ich ein kompatibles ESP-Modul bestelle.