ESP32-Cam - přisvětlovací dioda

20.05.2021 Arduino #esp #programování #arduino

ESP32-Cam má vestavěnou diodu, jako zdroj světla pro přisvícení obrazu. Zde je návod, jak rozšířit ovládací software o přepínač pro zapnutí/vypnutí diody.


Nevýhodou je to, že se jedná a DPS diodu, která je přímo na desce ESP a tudíž, pokud chceme desku dát do krabičky, je nám k ničemu. Další nevýhodou je, že se dioda extrémně zahřívá a lze se o ní spálit. Lze tedy využít externě připojenou diodu. Tato dioda je připojena piny, ke kterým je připojená i interní DPS dioda tj. GPIO 4.

Upravíme kód v jednotlivých souborech následujícím způsobem.

V první řadě upravíme výchozí soubor CameraWebServerAccessPoint.ino. Do funkce setup() přidáme definici GPIO (řádek 90).

...  

  WiFi.softAP(ssid, password);
  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  startCameraServer();

  //GPIO output LED flashlight
  pinMode (4, OUTPUT);

...

Dále upravíme soubor app_http.cpp. Přidáme proměnou pro kontrolu diody.

  • 0 je OFF
  • 1 je ON

Definice kontrolní proměnné (řádek 68).

...

static face_id_list id_list = {0};

//LED flashlight control variable
static int8_t flash_enabled = 0;

static ra_filter_t * ra_filter_init(ra_filter_t * filter, size_t sample_size){

...

Ve funkci cmd_handler() přidáme podmínku pro test proměnné flash_enabled (řádek 535).

  • Jestliže je proměnná flash_enabled TRUE, potom LED svítí
  • Pro vypnutou LED je flash_enabled FALSE
...

 else if(!strcmp(variable, "face_recognize")) {
        recognition_enabled = val;
        if(recognition_enabled){
            detection_enabled = val;
        }
    }

    //LED flash control process
    else if(!strcmp(variable, "flash_enabled")) {

      flash_enabled = val;

      if(flash_enabled){
        digitalWrite(4, HIGH); //LED ON
      } else{
        digitalWrite(4, LOW);  //LED OFF
      }
    }

    else {
        res = -1;
    }

...

Do funkce status_handler() se provádí aktualizace proměnné flash_enabled (řádek 594).

...

    p+=sprintf(p, ""face_recognize":%u,", recognition_enabled);

    //LED flash control from HTML commands
    p+=sprintf (p,""Flash_enabled":% u ", flash_enabled);

    p+=sprintf(p, ""cam_name":"%s",", myName);

...

Posledním souborem pro úpravu je camera_index.h, který obsahuje html rozhraní pro ovládání funkcionalit kamery. Do html kódu se přidá zaškrtávací políčko pro ovládání LED (řádek 590).

...

<div class="container">
    <!-- LED flash ON/OFF control for the switch from here //-->
       <div class="input-group" id="flash_light-group">
             <label for="flash_enabled">Flash Light</label>
             <div class="switch">
                   <input id="flash_enabled" type="checkbox" class="default-action">
                   <label class="slider" for="flash_enabled"></label>
              </div>
         </div>
    <!-- switch to here for the LED flash ON/OFF control //-->
       <button id="get-still">Get Still</button> 
       <button id="toggle-stream">Start Stream</button>                
</div>

...

Jak bylo uvedeno v úvodu, DPS dioda se poměrně dost zahřívá. Proto, pokud se použije externí dioda, může být DPS odstraněna. Stačí je odloupnout z ESP desky.

espled