diff --git a/README.md b/README.md index f80e5f72d9b8e136acf870ca3523af7f7b26f869..a3fd3c82e8809713081ba01757d0ef7531d8b6bb 100644 --- a/README.md +++ b/README.md @@ -1,120 +1,87 @@ +## Beschreibung +Treiber mit Beispielen für die Verwendung eines ESP32 Boards mit Kameramodul -## CameraServer -Das Beispiel *cameraserver.ino* streamt das Kamerabild mittels eines lokalen Webservers. -Zum Verwenden des Skriptes muss das Netzwerk vorab angepasst werden -Im Anschluss den Sketch auf den ESP32 One hochladen. Hierbei als Board "ESP32 DEV MODULE(esp32)" wählen. +## Installation +1. git Repository herunterladen -### 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 + git clone https://git-ce.rwth-aachen.de/thk_libs/microcontrollers/thk_espcamdriver.git -Die Server-Bibliothek kann über das Git bezogenn werden. - https://git-ce.rwth-aachen.de/thk_libs/microcontrollers/thk_espcamserver + oder als Zip -Im Anschluss wird das Netzwerk eingerichtet. Optional kann auch die Internetressource unbenannt werden. Diese wird beim Aufruf des Servers benötigt. +  - const char *ssid = "iPhone von Vladislav"; - const char *password = "qqqqqqqq"; - const char *uri = "/stream"; +2. Bibliothek ins lokale Arduino libraries Verzeichnis verschieben. \ +Unter Windows: `Dokumente/Arduino/libraries/` \ +(Falls als .zip heruntergeladen Bibliothek vorher entpacken) -Die folgenden Objekte sind für den Datenaustausch mit der Kamera notwendig +## Anwendung +In der Arduino-IDE können die Beispiele unter Datei>Beispiele>espcamdriver geöffnet werden. - esp_image_t image; - camera_config_t cameraconfig; // Konfig - esp_err_t cameraerror; // Fehler +* cameraimage.ino \ + Kamerabild auslesen und auf dem seriellen Monitor ausgeben. -Um sowohl die Kamera als auch den Server möglichst kompakt für den Anwender nutzbar zu machen, sind zwei benutzerdefinierten Klassen vorhanden +* cameraserver.ino \ + Streamen des Kamerabildes per lokalem Netzwerk. - thk_EspCamDriver camera(&cameraconfig, &cameraerror, &image); - thk_EspCamServer server(ssid, password, uri); +* UnitTest.ino \ + Testfälle -Spiegeln und Graustufe (Filter) bei Bedarf auch möglich +### Erläuterung - camera.set_hmirror(1); - camera.set_vflip(1); - camera.set_grayscale(1); +Für die Verwendung eines Kameramoduls am ESP32 ist die Pinbelegung notwendig. +Diese sind in der seperaten Datei `camera_boards.h` hinterlegt. Gerne um neue Board erweitern! -Anschließend kann in der Setup-Routine die Kamera initialisiert + espboard_t waveshare_esp32_one{ + waveshare_esp32_one.cpin1 = 13, + waveshare_esp32_one.cpin2 = 14, + waveshare_esp32_one.pin_d0 = 34, + waveshare_esp32_one.pin_d1 = 13, + waveshare_esp32_one.pin_d2 = 14, + waveshare_esp32_one.pin_d3 = 35, + waveshare_esp32_one.pin_d4 = 39, + waveshare_esp32_one.pin_d5 = 38, + waveshare_esp32_one.pin_d6 = 37, + waveshare_esp32_one.pin_d7 = 36, + waveshare_esp32_one.pin_xclk = 4, + waveshare_esp32_one.pin_pclk = 25, + waveshare_esp32_one.pin_vsync = 5, + waveshare_esp32_one.pin_href = 27, + waveshare_esp32_one.pin_sscb_sda = 18, + waveshare_esp32_one.pin_sscb_scl = 23, + waveshare_esp32_one.pin_pwdn = -1, + waveshare_esp32_one.pin_reset = -1, + waveshare_esp32_one.xclk_freq_hz = 20000000, + waveshare_esp32_one.jpeg_quality = 12, + waveshare_esp32_one.fb_count = 1, + waveshare_esp32_one.ledc_channel = LEDC_CHANNEL_0, + waveshare_esp32_one.ledc_timer = LEDC_TIMER_0, + waveshare_esp32_one.frame_size = FRAMESIZE_96X96, + waveshare_esp32_one.pixel_format = PIXFORMAT_JPEG, + waveshare_esp32_one.grab_mode = CAMERA_GRAB_WHEN_EMPTY, + waveshare_esp32_one.fb_location = CAMERA_FB_IN_DRAM, + waveshare_esp32_one.im_width = 96, + waveshare_esp32_one.im_height = 96 + }; - 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); - - -Das Kamerabild wird hier als Buffer gespeichert. Die Länge und der Inhalt (Pixel) können wie folgt ausgelesen werden - - image.buf_len; - image->buf; // Buffer Kamerabild - ---- - -# thk_EspCamDriver - -Für die Verwendung eines Kameramoduls am ESP32 ist die genaue Pinbelegung notwendig. -Diese sind in der seperaten Datei `camera_pins.h` hinterlegt. Gerne um neue Board erweitern! - - #define CAMERA_PIN1 13 - #define CAMERA_PIN2 14 - #define D7_GPIO_NUM 36 - #define D6_GPIO_NUM 37 - #define D5_GPIO_NUM 38 - #define D4_GPIO_NUM 39 - #define D3_GPIO_NUM 35 - #define D2_GPIO_NUM 14 - #define D1_GPIO_NUM 13 - #define D0_GPIO_NUM 34 - - #define XCLK_GPIO_NUM 4 - #define PCLK_GPIO_NUM 25 - #define VSYNC_GPIO_NUM 5 - #define HREF_GPIO_NUM 27 - #define SIOD_GPIO_NUM 18 - #define SIOC_GPIO_NUM 23 - #define PWDN_GPIO_NUM -1 - #define RESET_GPIO_NUM -1 - #define XCLK_HZ_FREQ 20000000 - #define IMG_QUALITY 12 - #define FRAMEBUFFER_COUNT 1 - - #define LED_CHANNEL LEDC_CHANNEL_0 - #define LED_TIMER LEDC_TIMER_0 - - #define FRAMESIZE FRAMESIZE_240X240 - #define IMAGE_WIDTH 240 - #define IMAGE_HEIGHT 240 - - #define PIXELFORMAT PIXFORMAT_JPEG - #define GRABMODE CAMERA_GRAB_WHEN_EMPTY - #define FRAMEBUFFER_LOCATION CAMERA_FB_IN_DRAM - - -Um die Bibliothek zu nutzen, muss zunächst das Modul im Kopf der Bibliothek (thk_EspCamDriver.h) definiert werden. - - #define CAMERA_MODEL_WAVESHARE_ESP_ONE - -Im Anschluss kann im Arduino-Sketch (.ino Datei) die Bibliothek inkludiert werden +Zunächst müssen im Arduino-Sketch (.ino Datei) die Bibliotheken inkludiert werden #include "thk_EspCamDriver.h" + #include "camera_boards.h" -Anschließend die Kamera-Objekte (nach Espressiv) erzeugen - - esp_image_t image; - camera_config_t cameraconfig; // Konfig - esp_err_t cameraerror; // Fehler +Anschließend das Kamera-Objekt (nach Espressiv) erzeugen + esp_image_t image; // hier werden die Bilddaten gesichert + thk_EspCamDriver camera(waveshare_esp32_one, + FRAMESIZE_96X96, + PIXFORMAT_GRAYSCALE, + &image); -Und dem Konstruktor übergeben +Falls notwendig kann das Bild gespiegelt werden - thk_EspCamDriver camera(&cameraconfig, &cameraerror, &image); + camera.set_hmirror(true); + camera.set_vflip(true); In der Setup()-Routine wird die Kamera initialisiert @@ -124,13 +91,12 @@ In der Loop()-Routine das Bild eingelesen, camera.take_picture(&image) -und abschließend immer geschlossen (Speicher freigeben) +und abschließend immer der Speicher freigeben camera.free_buffer(&image) -Weitere Kamerainformationen +Auf die Pixel des Bildes wird über den Bild-Buffer zugegriffen - image.width - image.height image.buf - image.buf_len + image.width + image.height \ No newline at end of file diff --git a/git_img.png b/git_img.png new file mode 100644 index 0000000000000000000000000000000000000000..7605456752f4f99360f16301f57c730aa945e52b Binary files /dev/null and b/git_img.png differ