Camera Webserver mit Deepsleep

Mehr
19 Apr 2023 21:06 - 19 Apr 2023 21:09 #875 von Darker89
Darker89 erstellte das Thema Camera Webserver mit Deepsleep
Hallo,

ich habe mir aus dem Beispiele von Arduino IDE das Beispiel für den ESP32 Camera Webserver genommen und diese um eine DeepSleep funktion erweiter.. und zwar um 6 Uhr Morgens schaltet der DeepSleep ein und um und nach 20 Uhr schaltet der DeepSleep wieder ab. Jedoch beim testet hat es leider nicht funktioniert... um und Nach 20 Uhr, ist der ESP32 trotzdem wieder in dem DeepSleep modus gegangen. Arduino IDE meldet natürlich beim Prüfen keinen Fehler.

Kann mir jemand sagen wo das Problem liegen könnte?
Vielen Dank schonmal :)
#include "esp_camera.h"
#include <WiFi.h>
#include <esp_sleep.h>
#include <time.h>

// Select camera model
#define CAMERA_MODEL_AI_THINKER // Has PSRAM

#include "camera_pins.h"

const char* ssid = "***";
const char* password = "***";

// Set your Static IP address
IPAddress local_IP(000, 000, 0, 000);
// Set your Gateway IP address
IPAddress gateway(000, 000, 0, 0);
IPAddress subnet(255, 255, 255, 0);

// NTP-Server-Informationen
const char* ntpServer = "de.pool.ntp.org";
const long  gmtOffset_sec = 3600; // GMT+1 (Deutsche Zeit)
const int   daylightOffset_sec = 3600; // Sommerzeit

void startCameraServer();

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  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;
  
  // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
  //                      for larger pre-allocated frame buffer.
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  sensor_t * s = esp_camera_sensor_get();
  // initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) {
    s->set_vflip(s, 1); // flip it back
    s->set_brightness(s, 1); // up the brightness just a bit
    s->set_saturation(s, -2); // lower the saturation
  }
  // drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");

//////
  // NTP-Zeit abrufen
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  Serial.println("NTP-Zeit wird abgerufen...");
  while (!time(nullptr)) {
    delay(1000);
    Serial.println("Warte auf NTP-Zeit...");
  }
  
  // Aktuelle Zeit ausgeben
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) {
    Serial.println("Fehler beim Abrufen der NTP-Zeit!");
  } else {
    Serial.println("Aktuelle Zeit:");
    Serial.println(&timeinfo, "%d.%m.%Y %H:%M:%S");
  }
  
  // Wenn die aktuelle Zeit zwischen 6:00 Uhr und 20:00 Uhr liegt, den Deepsleep-Modus wieder aktivieren
  int hour = timeinfo.tm_hour;
  if (hour >= 20 || hour < 6) {
  Serial.println("ESP32 geht wieder in den Deepsleep-Modus...");
  esp_deep_sleep_start();
}
}

void loop() {
  // ESP32 in den Deepsleep-Modus versetzen
  Serial.println("ESP32 geht in den Deepsleep-Modus...");
  esp_deep_sleep_start();
}

// Wird aufgerufen, wenn der ESP32 aus dem Deepsleep-Modus aufwacht
void IRAM_ATTR wakeUp() {
  // Aktuelle Zeit ausgeben
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) {
    Serial.println("Fehler beim Abrufen der NTP-Zeit!");
  } else {
    Serial.println("Aktuelle Zeit:");
    Serial.println(&timeinfo, "%d.%m.%Y %H:%M:%S");
  }
  
  // Wenn die aktuelle Zeit zwischen 06:00 Uhr und 20:00 Uhr liegt, den Deepsleep-Modus wieder aktivieren
int hour = timeinfo.tm_hour;
if (hour >= 20 || hour < 6) {
  Serial.println("ESP32 geht wieder in den Deepsleep-Modus...");
  esp_deep_sleep_start();
}
}
Letzte Änderung: 19 Apr 2023 21:09 von Darker89.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Powered by Kunena Forum