Forum: Mikrocontroller und Digitale Elektronik ESP32 Kamera: LED Blitzlicht deaktivieren


von Anon X. (pascalx)


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();

von Rahul D. (rahul)


Lesenswert?

Anon X. schrieb:
> Ich sehe aber nicht, wie ich dieses deaktivieren könnte

Ablöten.

von Monk (roehrmond)


Lesenswert?

Anon X. schrieb:
> Ich sehe aber nicht, wie ich dieses deaktivieren könnte

Versuche, den Pin als Input zu konfigurieren.

von Anon X. (pascalx)


Lesenswert?

Ablöten möchte ich die LED erst mal nicht.

Als Input Konfigurieren könnte gehen.

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

von Monk (roehrmond)


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.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Monk schrieb:
> Es kommt ift vir, daß mangelhafte Produkte 10 Jahre lang
> von eechselnden Firmen

don`t drink and write

von Monk (roehrmond)


Lesenswert?

Joachim B. schrieb:
> don`t drink and write

Ja ich schäme nicht. Ich komme mit dem Smartphone nicht gut zurecht 
(Wurstfinger).

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Monk schrieb:
> Ich komme mit dem Smartphone nicht gut zurecht
> (Wurstfinger).

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

von Christian H. (ch-hunn)


Lesenswert?

Was passiert, wenn du hier einen anderen Pin angibst?
    .pin_d4 = CAM_PIN_D4,

von Monk (roehrmond)


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.

: Bearbeitet durch User
von Andreas B. (andreas-ab)


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.*

: Bearbeitet durch User
von Hadmut F. (hadmut)


Lesenswert?

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

: Bearbeitet durch User
von Anon X. (pascalx)


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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.