ESP32-CAM Server mit Passwort sichern

Hallo Kollegen, ich bin noch neu hier im Forum und in Sachen "Arduino" unterwegs :slight_smile:
Ich habe es geschafft, auf meinem ESP32 einen Camserver zu installieren, aber wie bekomme ich es hin, diesen Server auch mit einem Benutzer / Passwort (oder nur Passwort) zu sichern ?

Gibt es irgendwo schon so einen fertig programmierten Teil, den ich einfach in das CAM-Server Skript einbauen kann? Und wie müsste das aussehen, bzw. an welcher stelle müsste ich das einbauen ? :slight_smile:

:+1: Sehr Gut

Da Alle gerade die Glaskugeln putzen um irgendwie dein Code zu erraten wird deine Frage ewig lange nicht beantwortet, so ist eben das Leben der Hellseher

bool authenticated() {
  if (server.authenticate("admin", "esp32")) return true;
  server.requestAuthentication(DIGEST_AUTH, "Anmeldung erforderlich", "Authentifizierung fehlgeschlagen!");
  return false;
}

In Zeile 42 passt es.

1 Like

42 passt immer :wink:
https://de.wikipedia.org/wiki/42_(Antwort)

Vielen Dank für die netten Antworten :slight_smile: Wie gesagt, ich bin noch neu in Sachen Arduino IDE und so... Gibt es auch eine Software (Simulation) für den Mac, wo ich z.B. ein Adruino Skript erst einmal testen kann, bevor ich es auf einen ESP schreibe ?

Was ist ein "Arduino Skript" ?

  • JavaScript läuft im WebBrowser, also auf Safari so ähnlich wie in Google Chrome oder im Internet Explorer.
  • C++ (Die "Arduino-Sprache") läuft im Prinzip auf der Ziel-Maschine eines C++ Compilers, aber alle Simulationen, die das Arduino-Ökosystem nachbilden, und die ich bisher gesehen habe, taugen nichts. Und "Arduino auf ESP" basiert auf einer speziellen ESP-Software (Core) die speziell für ESP geschrieben wurde (und z.B. auch zwischen ESP32 und ESP8266 unterscheidet)

Also hier ist das Skript des Webcam Server , und dort müsste ich dann in Zeile 42 den zusätzlichen code einbauen für eine Anmelde abfrage ? Kann ich den URL Stream damit auch irgendwie versehen ?

#include "esp_camera.h"
#include <WiFi.h>

//
// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
// Ensure ESP32 Wrover Module or other board with PSRAM is selected
// Partial images will be transmitted if image exceeds buffer size
//

// Select camera model
#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM

#include "camera_pins.h"

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

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");
}

void loop() {
// put your main code here, to run repeatedly:
delay(10000);
}

Über http:// solltest du gar keine Passwörter senden, sagt dir heutzutage jeder Browser.

Und Fips' Vorschlag geht, wenn überhaupt nur innerhalb deiner esp_camera Library, wo du erstmal schauen solltest, was die Funktion startCameraServer() in der Zeile davor macht.

Tja, ich merke schon - ich bin noch zu weit am Anfang um das alles verstehen zu können :wink: ich kann mich da erst einmal nur auf fertige Images berufen... :ok_man:
Dieses CamServer Skript war bei den Beispielen dabei von der Arduino IDE..

Meine Funktion basiert auf dem Webserver, dass der hier gar nicht verwendet wird, war dank Salamitaktik, zum Zeitpunkt des Beitrages, Unbekannt!