Hallo,
wenn meine Schaltung eingeschaltet wird, dann benötigt sie 80mA. Wenn ich ein Foto gemacht habe steigt es auf 400mA und geht dann wieder auf 200mA runter, aber leider nicht mehr auf 80...
Die OV5640 wird dabei dann auch heiß und da es eine akkubetriebene Anwendung ist, ist das nicht gut.
Ein esp_camera_deinit() oder ESP Restart bringt da leider auch nichts.
Also die Frage: wie kann ich nach einem Bild die Stromaufnahme wieder verringern?
Ich habe dieses Tutorial gemacht:
und das ist der Code:
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ESP32_CAM_Send_Photo_to_Server
//======================================== Including the libraries.
#include <WiFi.h>
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "esp_camera.h"
//========================================
//======================================== CAMERA_MODEL_AI_THINKER GPIO.
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
//========================================
// LED Flash PIN (GPIO 4)
#define FLASH_LED_PIN 4
#define Ausloser 13
#define blitzschalter 14
#define Blitzindikator 12
#define bereitschaftsindikator 15
#define Bilder_alle_X_sekunden 5
//======================================== Insert your network credentials.
const char* ssid = "xxxx";
const char* password = "xxxxxxx";
//========================================
//======================================== Variables for Timer/Millis.
unsigned long previousMillis = 0;
const int Interval = Bilder_alle_X_sekunden * 1000; //--> Photo capture every 20 seconds.
//========================================
// Server Address or Server IP.
String serverName = "192.168.178.22"; //--> Change with your server computer's IP address or your Domain name.
// The file path "upload_img.php" on the server folder.
String serverPath = "/ESP32CAM/upload_img.php";
// Server Port.
const int serverPort = 80;
// Variable to set capture photo with LED Flash.
// Set to "false", then the Flash LED will not light up when capturing a photo.
// Set to "true", then the Flash LED lights up when capturing a photo.
bool LED_Flash_ON = false;
bool Kamera_bereit = true;
// Initialize WiFiClient.
WiFiClient client;
//________________________________________________________________________________ sendPhotoToServer()
void sendPhotoToServer() {
//---------------------------------------- Set the camera ESP32 CAM.
Serial.println();
Serial.print("Set the camera ESP32 CAM...");
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
// init with high specs to pre-allocate larger buffers
if (psramFound()) {
config.frame_size = FRAMESIZE_QSXGA;
config.jpeg_quality = 10; //--> 0-63 lower number means higher quality
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 8; //--> 0-63 lower number means higher quality
config.fb_count = 1;
}
// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
Serial.println();
Serial.println("Restarting the ESP32 CAM.");
delay(1000);
ESP.restart();
}
sensor_t* s = esp_camera_sensor_get();
// Selectable camera resolution details :
// -QSXGA = 2560 x 1920 pixels
// -UXGA = 1600 x 1200 pixels
// -SXGA = 1280 x 1024 pixels
// -XGA = 1024 x 768 pixels
// -SVGA = 800 x 600 pixels
// -VGA = 640 x 480 pixels
// -CIF = 352 x 288 pixels
// -QVGA = 320 x 240 pixels
// -HQVGA = 240 x 160 pixels
// -QQVGA = 160 x 120 pixels
s->set_framesize(s, FRAMESIZE_QSXGA); //--> UXGA|SXGA|XGA|SVGA|VGA|CIF|QVGA|HQVGA|QQVGA
Serial.println();
Serial.println("Set camera ESP32 CAM successfully.");
//----------------------------------------
String AllData;
String DataBody;
Serial.println();
Serial.println("-----------");
//---------------------------------------- Pre capture for accurate timing.
Serial.println("Taking a photo...");
if (LED_Flash_ON == true) {
digitalWrite(FLASH_LED_PIN, HIGH);
delay(100);
}
for (int i = 0; i <= 3; i++) {
camera_fb_t* fb = NULL;
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Camera capture failed");
Serial.println("Restarting the ESP32 CAM.");
delay(1000);
ESP.restart();
return;
}
esp_camera_fb_return(fb);
delay(200);
}
camera_fb_t* fb = NULL;
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Camera capture failed");
Serial.println("Restarting the ESP32 CAM.");
delay(1000);
ESP.restart();
return;
}
if (LED_Flash_ON == true) digitalWrite(FLASH_LED_PIN, LOW);
Serial.println("Taking a photo was successful.");
//----------------------------------------
Serial.println("Connecting to server: " + serverName);
if (client.connect(serverName.c_str(), serverPort)) {
Serial.println("Connection successful!");
String post_data = "--dataMarker\r\nContent-Disposition: form-data; name=\"imageFile\"; filename=\"ESP32CAMCap.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n";
String head = post_data;
String boundary = "\r\n--dataMarker--\r\n";
uint32_t imageLen = fb->len;
uint32_t dataLen = head.length() + boundary.length();
uint32_t totalLen = imageLen + dataLen;
client.println("POST " + serverPath + " HTTP/1.1");
client.println("Host: " + serverName);
client.println("Content-Length: " + String(totalLen));
client.println("Content-Type: multipart/form-data; boundary=dataMarker");
client.println();
client.print(head);
uint8_t* fbBuf = fb->buf;
size_t fbLen = fb->len;
for (size_t n = 0; n < fbLen; n = n + 1024) {
if (n + 1024 < fbLen) {
client.write(fbBuf, 1024);
fbBuf += 1024;
} else if (fbLen % 1024 > 0) {
size_t remainder = fbLen % 1024;
client.write(fbBuf, remainder);
}
}
client.print(boundary);
esp_camera_fb_return(fb);
int timoutTimer = 10000;
long startTimer = millis();
boolean state = false;
Serial.println("Response : ");
while ((startTimer + timoutTimer) > millis()) {
Serial.print(".");
delay(200);
// Skip HTTP headers
while (client.available()) {
char c = client.read();
if (c == '\n') {
if (AllData.length() == 0) { state = true; }
AllData = "";
} else if (c != '\r') {
AllData += String(c);
}
if (state == true) { DataBody += String(c); }
startTimer = millis();
}
if (DataBody.length() > 0) { break; }
}
client.stop();
Serial.println(DataBody);
Serial.println("-----------");
Serial.println();
} else {
client.stop();
DataBody = "Connection to " + serverName + " failed.";
Serial.println(DataBody);
Serial.println("-----------");
}
Serial.println(esp_camera_deinit());
digitalWrite(PWDN_GPIO_NUM, HIGH);
Kamera_bereit = true;
ESP.restart();
digitalWrite(bereitschaftsindikator, HIGH);
}
//________________________________________________________________________________
//________________________________________________________________________________ VOID SETUP()
void setup() {
// put your setup code here, to run once:
// Disable brownout detector.
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
Serial.begin(115200);
Serial.println();
pinMode(FLASH_LED_PIN, OUTPUT);
pinMode(Ausloser, INPUT_PULLUP);
pinMode(blitzschalter, INPUT_PULLUP);
pinMode(Blitzindikator, OUTPUT);
pinMode(bereitschaftsindikator, OUTPUT);
pinMode(PWDN_GPIO_NUM, OUTPUT);
digitalWrite(PWDN_GPIO_NUM, HIGH);
// Setting the ESP32 WiFi to station mode.
WiFi.mode(WIFI_STA);
Serial.println();
//---------------------------------------- The process of connecting ESP32 CAM with WiFi Hotspot / WiFi Router.
Serial.println();
Serial.print("Connecting to : ");
Serial.println(ssid);
WiFi.begin(ssid, password);
// The process timeout of connecting ESP32 CAM with WiFi Hotspot / WiFi Router is 20 seconds.
// If within 20 seconds the ESP32 CAM has not been successfully connected to WiFi, the ESP32 CAM will restart.
// I made this condition because on my ESP32-CAM, there are times when it seems like it can't connect to WiFi, so it needs to be restarted to be able to connect to WiFi.
int connecting_process_timed_out = 20; //--> 20 = 20 seconds.
connecting_process_timed_out = connecting_process_timed_out * 2;
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
if (connecting_process_timed_out > 0) connecting_process_timed_out--;
if (connecting_process_timed_out == 0) {
Serial.println();
Serial.print("Failed to connect to ");
Serial.println(ssid);
Serial.println("Restarting the ESP32 CAM.");
delay(1000);
ESP.restart();
}
}
Serial.println();
Serial.print("Successfully connected to ");
Serial.println(ssid);
//Serial.print("ESP32-CAM IP Address: ");
//Serial.println(WiFi.localIP());
//----------------------------------------
digitalWrite(bereitschaftsindikator, HIGH);
Serial.println(digitalRead(PWDN_GPIO_NUM));
}
//________________________________________________________________________________
//________________________________________________________________________________ VOID LOOP()
void loop() {
// put your main code here, to run repeatedly:
//---------------------------------------- Timer/Millis to capture and send photos to server every 20 seconds (see Interval variable).
unsigned long currentMillis = millis();
if (Kamera_bereit == true && digitalRead(Ausloser) == LOW) {
previousMillis = currentMillis;
Kamera_bereit = false;
digitalWrite(bereitschaftsindikator, LOW);
sendPhotoToServer();
}
if (digitalRead(blitzschalter) == LOW) {
delay(500);
LED_Flash_ON = !LED_Flash_ON;
digitalWrite(Blitzindikator, LED_Flash_ON);
}
//----------------------------------------
}
//________________________________________________________________________________
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<