Skip to content
Snippets Groups Projects
Commit 437f5fd5 authored by Vladislav Vlasuk's avatar Vladislav Vlasuk
Browse files

readme

parent 1d5673be
No related branches found
No related tags found
No related merge requests found
## 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.
![](git_img.png)
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.buf
image.width
image.height
\ No newline at end of file
image.buf
image.buf_len
git_img.png

95.1 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment