Skip to content
Snippets Groups Projects
Select Git revision
  • main default protected
1 result

thk_espcamserver

  • Clone with SSH
  • Clone with HTTPS
  • Vladislav Vlasuk's avatar
    Vladislav Vlasuk authored
    # Conflicts:
    #   README.md
    42b332f7
    History

    thk_EspCamServer

    Zunächst muss die Bibliothek im Sketch inkludiert werden.

    #include "thk_EspCamServer.h" // WIFI und HTTP-Server

    Anschließend wird das WiFI-Netzwerk konfiguriert und (optional) der Name des HTTP-Ressource festgelegt.

    const char *ssid = "FRITZBOX";
    const char *password = "qqqqqqqq";
    const char *uri = "/stream";

    Nun kann das Objekt erzeugt werden.

    thk_EspCamServer server(ssid, password, uri);

    Für die Verwendung der Klasse ist ein sogenannter Handler erforderlich. Dieser regelt das Verhalten beim Aufrufen der Internetressource (bspw. beim eintippen von http://172.02.11/server im Browser innerhalb des lokalen Netzwerks).
    Hier kann für den Anfang die folgende Funktion außerhalb der setup() und loop() Routine erstellt werden:

    static esp_err_t get_helloworld_handler(httpd_req_t *req)
    {
    /* Send a simple response */
    Serial.println("Ein HTTP Request hat uns erreicht!");
    return ESP_OK;
    }

    Hier erfolgt beim Aufrufen der Internetressource eine Textausgabe durch den ESP32 im Seriellen Monitor.

    In der Setup Routine wird die Verbindung zum WiFi-Netzwerk aufgebaut

    server.connect(); 

    und der Webserver mit einer Referenz auf den benutzerdefinierten Handler (hier unser HelloWorld Beispiel) aufgerufen.

    server.start_webserver(&get_stream_handler);

    CameraWebServer

    Das Beispiel cameraserver.ino streamt das Kamerabild mittels eines lokalen Webservers. Hierfür ist die Bibliothek thk_EspCamDriver erforderlich!

    https://git-ce.rwth-aachen.de/thk_libs/microcontrollers/thk_espcamdriver.git

    Zum Verwenden des Skriptes muss das Netzwerk vorab angepasst werden

    const char* ssid = "iPhone von Vladislav";
    const char* password = "qqqqqqqq";

    Im Anschluss den Sketch auf den ESP32 One hochladen. Hierbei als Board "ESP32 DEV MODULE(esp32)" wählen. Nun kann mit einem im Netzwerk befindlichen Gerät über die Https-Adresse das Bild im Webserver angezeigt und gespeichert werden. Im Seriellen Monitor wird hier durch das Neustarten des ESP (Reset-Button) die Adresse ausgegeben.

    [OK] WiFi verbunden: 172.20.10.2
    [OK] HTTP_Get-Server bereit ( Port 80 ) HTTP: 172.20.10.2/stream

    Erläuterung des Skripts

    Zunächst wird die erforderliche Bibliothek zum Interagieren mit der Kamera und Starten des Servers inkludiert

    #include "thk_EspCamDriver.h" // ESP32 Kamera
    #include "thk_EspCamServer.h" // WIFI und HTTP-Server

    Im Anschluss wird das Netzwerk eingerichtet

    const char *ssid = "iPhone von Vladislav";
    const char *password = "qqqqqqqq";

    Optional kann auch die Internetressource unbenannt werden. Diese wird beim Aufruf des Servers benötigt.

    const char *uri = "/stream";

    Die folgenden Objekte sind für den Datenaustausch mit der Kamera notwendig

    camera_config_t cameraconfig; // Konfig
    esp_err_t cameraerror;        // Fehler
    camera_fb_t *fb = NULL;       // Framebuffer

    Um sowohl die Kamera als auch den Server möglichst kompakt für den Anwender nutzbar zu machen, sind zwei benutzerdefinierten Klassen vorhanden

    thk_EspCamDriver camera(&cameraconfig, &cameraerror, fb);
    thk_EspCamServer server(ssid, password, uri);

    Anschließend kann in der Setup-Routine die Kamera initialisiert

    camera.init();

    Und mit dem WiFi-Netzwerk verbunden werden

    server.connect(); 

    Abschließend wird der Webserver gestartet. Dafür ist ein sogenannter Handler erforderlich. Dieser bildet die Antwort auf den Zugriff über HTTP. Hier kann neben dem Stream-Handler für das Kamerabild

    server.start_webserver(&get_stream_handler);

    auch stattdessen das HelloWorld Beispiel ausprobiert werden. Hierzu die Referenz entsprechend anpassen.

    server.start_webserver(&get_helloworld_handler);

    Das Kamerabild wird hier als Buffer gespeichert. Die Länge und der Inhalt (Pixel) können über die Server-Bibliothek bezogen werden.

    camera.getBufLen()
    camera.getJpgBuf()