Guten Tag,
habe das https://github.com/lewisxhe/esp32-camera-bme280
ist eine esp32 mit sensoren und vor allem mit der camera ov2640
Auf die Sensoren und den Bildschirm kann man einfach mit den
Bibliotheken zugreifen. Nur die Kamera ist etwas komplizierter. Ziel ist
es ein Bild zu schießen und es erstmal zu speichern auf dem internen
Speicher.. RAM... .
Man findet aber quasi gar nicht die richtige Funktion zum schießen eines
Bildes !
Auch wenn man die unterschiedlichen Codes auf GitHub durchschaut ist es
nicht so einfach...
Vielleicht habt ihr einen Tipp !
Danke !
Diesen Forumbeitrag werde ich nun auch näher betrachten:
(Vielleicht steht dort ja auch irgendwo die Lösung xD)
Beitrag "ESP32-CAM Entwicklungskit"
Hallo,
fang hier an:
https://github.com/espressif/esp32-camera
Es gibt nur weniges dazu, es macht wohl bisher kaum jemand mehr mit den
Cams als das Demo zu begutachten.
Genaugenommen brachst Du nicht allzuviel:
camera_config Struktur sinnvoll füllen,
camera_init() azfrufen.
Dann camera_capture() aufrufen, das liefert Dir die gefüllte camera_fb
Struktur zurück, in der alles steht, was Du zur Weiternutzung des Bildes
brauchst.
Findest Du in
https://github.com/espressif/esp32-camera/blob/master/driver/include/esp_camera.h
Viel Erfolg.
Was willst Du mit dem Bild dann machen?
Gruß aus Berlin
Michael
Vielen dank für die schnelle Antwort,
bin schon die ganze Zeit dabei die die Bibliotheken näher zu betrachten
und zu "analysieren".
Werde jetzt mal deine Tipps anschauen ! Danke !
>>camera_config Struktur sinnvoll füllen,>>camera_init() azfrufen.>>Dann camera_capture()
Weißt du spontan in welcher Bibliothek das ist ? .. ist mir aber schon
über den Weg gelaufen.
Ziel ist es das geschossene Bild per WLAN an einen PC zu schicken, damit
es dort relativ sicher gespeichert wird. Dann kann dass Bild intern
wieder überschrieben werden :D
Momentan beschäftige ich mich damit:
https://github.com/yoursunny/ESP32-CAM-OV2640
Denn dort findet sich die OV2640.cpp und .h und in einem weiteren
Ordner:
bitmap.c
bitmap.h
camera.c
camera.h
camera_common.h
ov2640.c
ov2640.h
ov2640_regs.h
sccb.c
sccb.h
sensor.h
twi.c
twi.h
xclk.c
xclk.h
Ist jetzt natürlich etwas verwirrend, alleine dass das Programm normal
läuft
Halli,
guges schrieb:> Weißt du spontan in welcher Bibliothek das ist ? .. ist mir aber schon> über den Weg gelaufen.
ist Bestandteil des sdk, in der ArduinoIDE ist es unter
...\packages\esp32\hardware\esp32\1.0.2\tools\sdk\include\esp32-camera
zu finden.
guges schrieb:> Momentan beschäftige ich mich damit:> https://github.com/yoursunny/ESP32-CAM-OV2640
Habe ich mir ich auch schon angesehen, allerdings ist die SDK-Lib meiner
Meinung nach was wirklich sehr gutes, was Espressif da abgeliefert hat.
guges schrieb:> Ziel ist es das geschossene Bild per WLAN an einen PC zu schicken, damit> es dort relativ sicher gespeichert wird. Dann kann dass Bild intern> wieder überschrieben werden :D
Kommt auf Deine Absichten an. Man könnte den ESP32 auch mit dem PIR
aufwecken, ein Bild schießen und dann z.B. zu einem RasPi schicken. Wäre
mein Ansatz, weil der RasPi hier sowieso 24/7 läuft.
Vermutlich würde ich da sogar einfach den dort recht nutzlos laufenden
FTP-Server benutzen, müßte ich nur schauen, ob jemad schon einen
funktionierenden FTP-Client für den ESP32 gebaut hat, faul, wie ich bin.
;)
Gruß aus Berlin
Michael
Vielen Dank für die Tipps,
>>unter>>...\packages\esp32\hardware\esp32\1.0.2\tools\sdk\include\esp32-camera
d.h. die Lösung um die Kamera zu beherrschen liegt also (hoffentlich)
näher als ich denke xD
Die haben da aber so eine Demo programmiert, wo man erstmal einiges
verstehen muss. Die machen da einen Webserver drauf und ich meine, man
kann dann im Browser streamen( bereits getestet vor kurzem). Der Code
für die Homepage ist sogar als Array in einer Datei gespeichert^^.
Schau ich mir jetzt nochmal näher an. Um den Code für ein Foto
herauszusuchen !
>>Kommt auf Deine Absichten an. Man könnte den ESP32 auch mit dem PIR>>aufwecken, ein Bild schießen und dann z.B. zu einem RasPi schicken. Wäre>>mein Ansatz, weil der RasPi hier sowieso 24/7 läuft.
Ja der PIR Sensor wird haargenau dafür verwendet. Konnte ihn bereits
abfragen. Nur das Foto muss jetzt noch geschossen werden.
(Das Bild muss an einen Windows Rechner geschickt werden. Über einen
Router.)
Freundliche Grüße,
danke für die Tipps
So da muss ich auch sagen ist die Pinbelegung einfach zu machen,
man muss aber wissen, dass man AI_Thinker auswählen muss...
Camera Ready !:
WiFi connected
Starting web server on port: '80'
Starting stream server on port: '81'
Camera Ready! Use 'http://192.168.zensiert'; to connect
Nächster Schritt ist das ganze Webserverzeug auszukommentieren und den
Fokus auf das Foto machen legen :D
hmm..
ardware\espressif\esp32\tools\sdk\include\esp32-camera
Könnte es sich bei der Fotofunktion um: esp_camera_fb_get(); handeln?
Was ich mich frage, man findet die c Datei zu der esp32_camera.h gar
nicht... die müsste doch vorhanden sein oder ?
Denn ich habe gerade nur die h Datei vor mir und würde gerne wissen wie
sie ausprogrammiert ist, um auf die gespeicherten Daten zugreifen zu
können.
Man erhält : camera_fb_t * fb
und er kann dann im Beispiel über fb-> auf seinen Inhalt zugreifen:
display_image(fb->width, fb->height, fb->pixformat, fb->buf, fb->len);
in buf ist hoffentlich das Bild gespeichert.
Werde mal schauen wie ich den Datentyp herausfinde :D
1
esp_err_tcamera_example_capture(){
2
//capture a frame
3
camera_fb_t*fb=esp_camera_fb_get();
4
if(!fb){
5
ESP_LOGE(TAG,"Frame buffer could not be acquired");
Hallo,
gugess schrieb:> in buf ist hoffentlich das Bild gespeichert.> Werde mal schauen wie ich den Datentyp herausfinde :D
steht doch in der esp_camera.h:
typedef struct {
uint8_t * buf; /*!< Pointer to the pixel data */
size_t len; /*!< Length of the buffer in bytes */
size_t width; /*!< Width of the buffer in pixels */
size_t height; /*!< Height of the buffer in pixels */
pixformat_t format; /*!< Format of the pixel data */
} camera_fb_t;
Du bekommst den Zeiger auf einen Buffer mit uint8_t der Länge len.
Ich habe mir gerade mal den index.html Kram aus den camera_index.h
entpackt.
Unsinnigerweise mit ein paar Zeilen PHP, weil gerade was Web-mäßiges
gemacht habe und der locale Apache sowieso lief. :-))
Gruß aus Berlin
Michael
Hier meine erste Ausgabe:
Beginn Setup()
Camera Ready! (Use 'http://)Ende Setup()
Test capture
Höhe des Bildes:
240
Breite des Bildes:
320
buf[0] evtl. Pixelinformation
255
Hallo,
gugess schrieb:> Mal schauen ob ich buf auslesen kann, ist ja ein Zeiger .. evtl. auf ein> Array mit Pixelinformationen...mal schauen!
ja, ist das Array mit dem Bild. Aufbau findest Du im Datenblatt Deiner
Kamera. Wenn Du JPG bestellt hast (was anderes macht normalerweise
keinen Sinn), liegt da das komplette JPG fertig zum
Übertragen/Speichern.
Gruß aus Berlin
Michael
Die Werte als Dezimalwerte auszugeben ist nicht die hellste Torte auf
der Kerze, denn Dezimalwerte (vor allem, wenn sie ohne führende Nullen
ausgegeben werden) sind ein bis drei Zeichen lang.
Wenn man so etwas ohne Trennzeichen ausgibt, dann wenigstens als Hexdump
mit führenden Nullen.
Außerdem: Welchen Teil von
"Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang"
hast Du jetzt nicht verstanden?
Daß Dein Dump kein Sourcecode ist, aber das gleiche Konzept angewandt
werden sollte, dürfte klar sein, oder?
Hallo,
welches Format hast Du denn angefordert? Was Du da oben angibst ist das
Format des Kamerasensors, das bekommst Du nicht zu sehen.
Ich habe jetzt nicht geschaut, ob die OV2640 RGB888 kann, welches Format
hast Du denn beim Init eingestellt?
Gruß aus Berlin
Michael
Hallo,
habe mal noch einen Schnellschuß gebaut.
Minimal-Webserver drauf und die Kamera. Beim ersten Start etwas Geduld,
das Formatieren des SPIFFS dauert etwas.
Dann sollte er ins WLAN gehen und Cam-Init ok melden.
Aufruf der Webseite bietet dann das Bild als Download an.
Einstellung ist VGA und JPG, der Umweg über das SPIFFS ist nur dem
Umstand geschuldet, daß ich auf was vorhandenes zurückgegriffen habe...
Außerdem wollte ich mich auf meine alten Tage jetzt nicht wieder mit
meinen unvollkommenen C/C++ Kenntnissen rumärgern. :-)
Gruß aus Berlin
Michael
Entschuldigung wegen dem langen Text !
>>Außerdem: Welchen Teil von>>"Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang">>hast Du jetzt nicht verstanden?>>Daß Dein Dump kein Sourcecode ist, aber das gleiche Konzept angewandt>>werden sollte, dürfte klar sein, oder?
habe einen Hotspot von einem PC , mit dem verbindet sich der ESP:
SPIFFS ok
..
Connected to SVG
IP address: 10.42.0.219
HTTP server started
Cam Init ok
Wenn ich jetzt mit einem PC, der auch an diesem Hotspot angemeldet ist,
auf die IP Adresse gehe, kommt nur, dass die Seite nicht erreichbar ist.
Werde aber jetzt noch ein wenig weitertesten.
Vielen Dank für den Code !
Schaue ich mir jetzt genauer an um ihn zu verstehen.
Hallo,
ich habe meinen obigen Test-Sketch jetzt mal um einen FTP-Client connect
erweitert und speichere das Bild zusätzlich auf meinem NAS (da läuft ein
lokaler FTP-Server).
Komisch, zu FTP-Client findet man immernoch wenig "fertiges", war ja
aber kein Hexenwerk, das selber zu machen.
Jetzt muß ich den DeepSleep mal einbauen und langsam überlegen, wozu ich
das eigentlich nutzen will...
Gruß aus Berlin
Michael
Hallo,
falls doch jemand mit den Cams rumspielt:
der Sketch macht alle 3 Minuten ein Bild und legt es auf einem
FTP-Server ab.
Ist nur ein weiterer Test, läuft bisher erstmal stabil hier.
Gruß aus Berlin
Michael