ESP32 Kamera: LED Blitzlicht deaktivieren

OP #7684516
Lesenswert?

Ich habe ein ESP32-Cameramodul (https://www.waveshare.com/esp32-cam.htm), welches ich unter idf 5.2 programmiere. Bilder aufnehmen und auf SD-Card speichern funktioniert soweit.

Allerdings wird für jede Aufnahme die Blitzlicht-LED eingeschaltet, was ich nicht möchte. Die LED hängt an GPIO4.

Ich sehe aber nicht, wie ich dieses deaktivieren könnte, und fände es seltsam, wenn das wirklich nicht gehen würde.

Hier sind die wichtigsten Code-Zeilen in meinem Testprogramm

1
static camera_config_t camera_config = {
2
    .pin_pwdn = CAM_PIN_PWDN,
3
    .pin_reset = CAM_PIN_RESET,
4
    .pin_xclk = CAM_PIN_XCLK,
5
    .pin_sccb_sda = CAM_PIN_SIOD,
6
    .pin_sccb_scl = CAM_PIN_SIOC,
7

8
    .pin_d7 = CAM_PIN_D7,
9
    .pin_d6 = CAM_PIN_D6,
10
    .pin_d5 = CAM_PIN_D5,
11
    .pin_d4 = CAM_PIN_D4,
12
    .pin_d3 = CAM_PIN_D3,
13
    .pin_d2 = CAM_PIN_D2,
14
    .pin_d1 = CAM_PIN_D1,
15
    .pin_d0 = CAM_PIN_D0,
16
    .pin_vsync = CAM_PIN_VSYNC,
17
    .pin_href = CAM_PIN_HREF,
18
    .pin_pclk = CAM_PIN_PCLK,
19

20
    // XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental)
21
    .xclk_freq_hz = 20000000,
22
    .ledc_timer = LEDC_TIMER_0,
23
    .ledc_channel = LEDC_CHANNEL_0,
24

25
    .pixel_format =
26
        PIXFORMAT_JPEG,  // PAN: was: RGB565,  // YUV422,GRAYSCALE,RGB565,JPEG
27
    .frame_size = FRAMESIZE_UXGA,
28

29
    .jpeg_quality = 12,  // 0-63, for OV series camera sensors, lower number
30
                         // means higher quality
31
    .fb_count = 1,  // When jpeg mode is used, if fb_count more than one, the
32
                    // driver will work in continuous mode.
33
    .fb_location = CAMERA_FB_IN_PSRAM,
34
    .grab_mode = CAMERA_GRAB_WHEN_EMPTY,
35
};
36

37
   esp_camera_init(&camera_config);
38
   camera_fb_t *pic = esp_camera_fb_get();
Gast #7684528
Lesenswert?

Anon X. schrieb:

Ich finde es einfach seltsam, dass es im Kamera-Code dafür keine Konfigurationsoption gibt.

In China ist es üblich, Produkte (auch Software) zu verkaufen sobald sie verkaufbar sind. Oft endet damit auch die Entwicklung. Findet man nachträglich Mängel, geht man eher mit dem Preis runter, als sie zu korrigieren. Es kommt ift vir, daß mangelhafte Produkte 10 Jahre lang von eechselnden Firmen produziert werden. Man baut noch weiteren Schnickschnack dazu, die Basis bleibt aber wie beim ersten Entwurf.

Deswegen ist es für deutsche Softwarefirmen so schwer, mit Chinesischen programmierern zu arbeiten. Die liefern nach kurzer Zeit 80% ab und sehen nicht ein, das Ding in deutschem Sinn fertig zu stellen. Abgeliefert heisst für den Chinesen "fertig". Über unsere Interpretation von Pareto lachen die nur.

Gast #7684699
Lesenswert?

Joachim B. schrieb:

Das wäre doch mal ein Grund die Finger stillzuhalten?

Du könntest auch mal aufhören, jeden Käse zu kommentieren. Insbesondere was nichts mit dem Thread zu tun hat.

Mache doch einen eigenen Thread dafür auf, mit dem Titel "Joachim will reden!". Oder noch passender "Joachim kommentiert Stefan". Da kannst du dann all deine Flames sammeln, ohne andere Threads zu stören. Ich werde dir auch ab und zu Feedback gegeben, damit das nicht wie ein krankes Selbstgespräch aussieht.

#7685009
Lesenswert?

Ich finde es einfach seltsam, dass es im Kamera-Code dafür keine Konfigurationsoption gibt.

Es liegt daran, dass die Flash-LED am GPIO4 (HS2_DATA1) hängt, der eben auch mit Data1 des SD-Card Slots verbunden ist. (Schau mal hier: https://github.com/SeeedDocument/forum_doc/blob/master/reg/ESP32_CAM_V1.6.pdf )

Ein Möglichkeit wäre die SD im 1-Bit Modus zu betreiben, dann wird GPIO4 frei für die LED, wie hier (https://esp32.com/viewtopic.php?t=13141) vorgeschlagen wurde.

Oder einen kleinen Hack, der die kleine rote Status-LED opfert und den GPIO33 als Ansteuerung der Flash-LED verwendet. --> Link: https://www.youtube.com/watch?v=loet1ndG8Sg

edit: alternative Lösung angehängt.

OP #7685142
Lesenswert?

Danke für all die Inputs !

Hadmut F. schrieb:

Diue led wird mit ledc angesteuert. Suchen, löschen. Det: .ledc_timer = LEDC_TIMER_0, .ledc_channel = LEDC_CHANNEL_0,

Das hat nicht funktioniert.

Am Ende habe ich den GPIO als Input konfiguriert:

1
    esp_err_t err = esp_camera_init(&camera_config);
2
    if (err != ESP_OK)
3
    {
4
        ESP_LOGE(TAG, "Camera Init Failed");
5
        return err;
6
    }
7

8
    gpio_config_t cfg = {
9
        .pin_bit_mask = 1 << 4,
10
        .mode = GPIO_MODE_INPUT,
11
        .pull_down_en = GPIO_PULLDOWN_ONLY,
12
    };
13
    err = gpio_config(&cfg);
14
    if (err != ESP_OK) {
15
        ESP_LOGE(TAG, "Camera Init: GPIO config failed");
16
        return err;
17
    }

...und das SD-Card-Interface auf 1 Bit Breite gesetzt:

1
    sdmmc_host_t host = SDMMC_HOST_DEFAULT();
2
    sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();
3
    slot_config.width = 1;

Das ist für meine Anwendung noch schnell genug und ich habe noch zwei zusätzliche GPIO frei...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren