Update ESP32cam-demo.ino

master
Alan 2025-04-01 10:05:32 +01:00 zatwierdzone przez GitHub
rodzic 7462501a9f
commit b4b99a90fe
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
1 zmienionych plików z 22 dodań i 17 usunięć

Wyświetl plik

@ -1,5 +1,3 @@
// new esp32 manager - esp32cam - regular
/*******************************************************************************************************************
*
* ESP32Cam development board demo sketch using Arduino IDE or PlatformIO
@ -77,7 +75,7 @@
// forward declarations
bool initialiseCamera(bool); // this sets up and enables the camera (if bool=1 standard settings are applied but 0 allows you to apply custom settings)
bool cameraImageSettings(); // this applies the image settings to the camera (brightness etc.)
bool cameraImageSettings(bool); // this applies the image settings to the camera (brightness etc.)
void changeResolution(framesize_t); // change camera resolution
String localTime(); // returns the current time as a String
void flashLED(int); // flashes the onboard indicator led
@ -103,8 +101,8 @@
// -SETTINGS
// ---------------------------------------------------------------
char* stitle = "BackCam"; // title of this sketch
char* sversion = "11Mar25"; // Sketch version
char* stitle = "ESP32CamDemo"; // title of this sketch
char* sversion = "01Apr25"; // Sketch version
framesize_t FRAME_SIZE_IMAGE = FRAMESIZE_SVGA; // default camera resolution
// Resolutions available:
@ -523,7 +521,7 @@ if (reset) {
if (serialDebug) Serial.printf("ERROR: Camera init failed with error 0x%x", camerr);
}
cameraImageSettings(); // apply the camera image settings
cameraImageSettings(0); // apply the camera image settings
return (camerr == ESP_OK); // return boolean result of camera initialisation
}
@ -534,11 +532,12 @@ if (reset) {
// ----------------------------------------------------------------
// Adjust image properties (brightness etc.)
// Defaults to auto adjustments if exposure and gain are both set to zero
// if 'flush' is set then several frames are captured to ensure settings take effect straight away
// - Returns TRUE if successful
// More info: https://randomnerdtutorials.com/esp32-cam-ov2640-camera-settings/
// interesting info on exposure times here: https://github.com/raduprv/esp32-cam_ov2640-timelapse
bool cameraImageSettings() {
bool cameraImageSettings(bool flush) {
if (serialDebug) Serial.println("Applying camera settings");
@ -576,10 +575,13 @@ bool cameraImageSettings() {
//s->set_vflip(s, 1); // flip image vertically
//s->set_hmirror(s, 1); // flip image horizontally
// Discard initial frames to ensure new settings apply
for (int i = 0; i < 5; i++) {
camera_fb_t *fb = esp_camera_fb_get();
esp_camera_fb_return(fb);
// Discard initial frames to ensure new settings apply
// This is a pain as it takes a while but without this the first few frames will not have the new setting applied
if (flush == 1) {
for (int i = 0; i < 5; i++) {
camera_fb_t *fb = esp_camera_fb_get();
esp_camera_fb_return(fb);
}
}
return 1;
@ -897,7 +899,7 @@ void rootUserInput(WiFiClient &client) {
if (val >= -2 && val <= 2 && val != cameraImageBrightness) {
if (serialDebug) Serial.printf("Brightness changed to %d\n", val);
cameraImageBrightness = val;
cameraImageSettings(); // Apply camera image settings
cameraImageSettings(0); // Apply camera image settings
}
}
}
@ -911,7 +913,7 @@ void rootUserInput(WiFiClient &client) {
if (val >= 0 && val <= 1200 && val != cameraImageExposure) {
if (serialDebug) Serial.printf("Exposure changed to %d\n", val);
cameraImageExposure = val;
cameraImageSettings(); // Apply camera image settings
cameraImageSettings(0); // Apply camera image settings
}
}
}
@ -925,7 +927,7 @@ void rootUserInput(WiFiClient &client) {
if (val >= 0 && val <= 31 && val != cameraImageGain) {
if (serialDebug) Serial.printf("Gain changed to %d\n", val);
cameraImageGain = val;
cameraImageSettings(); // Apply camera image settings
cameraImageSettings(0); // Apply camera image settings
}
}
}
@ -1471,13 +1473,16 @@ bool handleJPG() {
camera_fb_t * fb = NULL;
// drop first frame to ensure it is not an old image
fb = esp_camera_fb_get();
esp_camera_fb_return(fb);
for (int attempts = 0; attempts < 3; attempts++) {
delay(30); // help stabilize the frame?
fb = esp_camera_fb_get();
if (fb && fb->buf && fb->len > 0) break; // frame has been captured
if (fb) esp_camera_fb_return(fb);
fb = NULL;
delay(100); // delay before retry
delay(60); // delay before retry
}
if (!fb) {
@ -1691,7 +1696,7 @@ void readGrayscaleImage() {
delay(camChangeDelay);
config.pixel_format = PIXFORMAT_GRAYSCALE; // change camera setting to grayscale (default is JPG)
initialiseCamera(0); // restart the camera (0 = without resetting all the other camera settings)
cameraImageSettings();
cameraImageSettings(1);
// capture the image and use flash if required
int currentBrightness = brightLEDbrightness;