3D Drucken macht Spaß. Doch leider dauert der Druck mancher Objekte schon einige Zeit. Ab und zu macht der Drucker dann auch nicht das, was er soll. Und wer möchte schon die ganze Zeit neben dem Drucker sitzen und auf den Druck warten? Deswegen gibt es ja schon seit einiger Zeit Kameralösungen für den 3D Drucker.
Die einfachste Art der Überwachung ist natürlich eine Webcam und ein entsprechendes Programm auf den PC zu installieren und einzurichten. Mit der richtigen Software fungiert dieser dann als Webcam Server. Ein Beispiel unter Windows wäre dafür Yawcam (https://yawcam.com/). Nachteil, der PC muss die ganze Zeit an bleiben. Es gibt auch Lösungen mit Raspberry Pi als Webcam Server (z.B. Motion: https://motion-project.github.io/).
Besser sind natürlich Kameralösungen mit eingebautem Web Interface. Auch von dieser Art gibt es viele. Einige sogar mit der Möglichkeit, die Kamera über das Web Interface zu steuern. Leider sind alle diese Lösungen recht teuer. Deshalb habe ich nach einer günstigeren Lösung gesucht und bin dabei auf das ESP32 CAM Set gestoßen.
Der Plan
Das ESP32-CAM Set besteht aus einem speziellen ESP32 Board und einer kleinen Kamera.
Der ESP-32 ist ein 32-Bit Dual-Core Microcontroller der Firma Espressif mit 160MHz bzw. 240MHz und eingebauten 512MB RAM, und ist der große Bruder des ESP8266. Der Programmspeicher (Flash) ist nur in einigen Varianten eingebaut. Üblicherweise wird dafür, wie beim ESP8266, ein externes serielles Flash auf dem Controller-Board verbaut. Weitere Besonderheiten des ESP32 sind das eingebaute WiFi, ähnlich wie beim ESP 8266, und Bluetooth. In den Kamerasets sind üblicherweise ESP32-S Module verbaut. Diese haben ein 32MBit (4MB) Flash eingebaut. Neben der internen Antenne gibt es auch die Möglichkeit, eine externe Antenne anzuschließen.
Ein Programmierinterface ist üblicherweise bei dem Kameraset nicht eingebaut. Somit muss der ESP32 mit einem externen FTDI Adapter programmiert werden. Auf den Boards befindet sich auf der Vorderseite neben Reset Taster und der Stromversorgung noch ein zusätzliches 8MB PSRAM, das für schnelle Bildverarbeitung genutzt werden kann. Auf der Rückseite des Moduls findet man den Kamera Anschluss, eine helle weiße LED (kann als Blitz und Videoleuchte dienen) und einen MicroSD Karten Slot. Der Kameraanschluss ist so angeordnet, dass man die Kamera direkt auf den SD Karteneinschub aufkleben kann. Als Kamera ist eine 2MP OV2640 üblich. Somit ist in diesem Set alles enthalten, was man für eine WLAN-fähige WebCam benötigt. Und das für nur ein paar Euro.
Nun dann mal ans Werk.
Hardwareaufbaubeschreibung
Teileliste
Für die Printercam benötigt man:
- ESP-32 CAM Modul
- FTDI-Adapter mit 3V3 zum Progammieren
- MicroUSB Breakout, alternativ MB102 Breadboard Netzteil oder LM2596S DC-DC Netzteil für die Stromversorgung
- ein passendes Gehäuse, z.B. https://www.thingiverse.com/thing:3463679
oder auch https://www.thingiverse.com/thing:4192842
- ein MicroUSB Kabel
- USB Netzteil
Soweit die Hardware.
Aufbau
Bei manchen Boards ist die Kamera bereits montiert und muss nur noch auf dem SD Slot mit Doppelklebeband festgeklebt werden. Beim Befestigen der Kamera sollte man vorher testen, ob die Position mit dem Kameraausbruch im Gehäuse passt. Bei anderen Sets muss die Kamera noch montiert werden. Zunächst klappt man den kleinen grauen Balken am Kameraanschluss nach oben. Jetzt kann man das Flachkabel der Kamera vorsichtig einschieben. Dann wird das graue Teil wieder nach unten geklappt und mit dem weißen festen Teil zusammengedrückt. Jetzt kann man die Kamera vorsichtig auf den MicroSD Slot kleben. Manche Kameras haben noch einen Schutz auf der Linse. Diesen sollte man vor der Benutzung abziehen - fertig.
Hardwareverbindungen zur Programmierung/Betrieb
Um den ESP32 programmieren zu können, benötigt man den FTDI Adapter. Dieser wird nach folgendem Anschlussschema angeschlossen. Das linke Bild wird benutzt, wenn der Adapter am VCC Anschluss +3V3 liefert. Das mittlere Anschlussschema kann man verwenden, wenn der Adapter zwar 3V3 an den Datenanschlüssen liefert, der VCC Anschluss aber fest auf 5V eingestellt ist (am besten die Spannung vorher messen!).
Programmierbrücke: Soll der ESP32 programmiert werden, muss die Brücke (zwischen IO0, GND) vor einem Reset gesteckt werden. Soll das Programm im ESP32 ausgeführt werden, muss die Brücke geöffnet werden.
Für den Einbau und späteren Betrieb ist der rechte Plan wichtig. So wie dargestellt wird der MicroUSB Breakout an das ESP32 Board angeschlossen. Die USB Verbindung benötigt man nicht, der USB wird nur für die Stromversorgung gebraucht. Natürlich können Sie den ESP32 auch anderweitig mit Strom versorgen.
Gehäuseeinbau
Der Gehäuseeinbau ist schnell erledigt. Die ESP32 Platine passt mitsamt der Kamera genau in das Gehäuse. Falls Sie die Pins auf den ESP aufgelötet haben, achten Sie beim Gehäusedruck darauf, dass Sie die tiefere Gehäusevariante verwenden. Ähnliches gilt für das USB Breakout. Für die verschiedenen Varianten gibt es jeweils verschiedene Deckel. Ich habe das ESP32 Board lediglich mit etwas Heißkleber gesichert. Die USB Platine habe ich mit 2 Schrauben am hinteren Deckel fest gemacht.
Unter das Gehäuse habe ich dann noch einen Standard Kamerastativblock geklebt. Jetzt passt die Kamera auch auf jedes Kamerastativ (https://www.thingiverse.com/thing:4200944).
Es gibt auch fertige ESP32 Kameragehäuse mit Stativanschluss.
Software
Installation Arduino Boardverwalter
Zunächst muss man das ESP32 CAM Board in den Boardmanager der Arduino IDE aufnehmen. Das macht man, indem man in den Voreinstellungen folgende URL in die Liste "zusätzliche Boardverwalter URLs" aufnimmt.
https://dl.espressif.com/dl/package_esp32_index.json
Jetzt geht man unter Werkzeuge/Board/Boardverwalter und sucht dort nach ESP32. Der "esp32" Eintrag enthält unser Board. Diesen installiert man dann.
Als letzten Schritt der Hardwareeinrichtung muss nun das ESP32 Wrover als aktives Board ausgewählt werden. Die weiteren Parameter wählt man dann nach den Erfordernissen aus.
Installation der Software
Die Software kann von meinem Github Repository bezogen werden. https://github.com/willie68/PrinterCamESP32
Der Download der Sourcen funktioniert über den Button "Clone or Download" und dort dann Download ZIP. Die dann heruntergeladene ZIP Datei (PrinterCamESP32-master.zip) enthält zunächst einen Ordner PrinterCamESP32-master. Dieser enthält README und LICENSE Datei. Darunter befindet sich dann der Ordner PrinterCam, der die Dateien für die Arduino IDE enthält. Diesen kann man entweder in sein Sketch-Verzeichnis extrahieren, oder man extrahiert die gesamte ZIP Datei in ein Verzeichnis seiner Wahl. In der Arduino IDE muss man dann die PrinterCam.ino öffnen. Dabei sollten jetzt automatisch auch die anderen Dateien mit geöffnet werden.
Sind Board und Parameter richtig eingestellt, kann man das Programm kompilieren und auf das ESP32 Board hochladen. Dazu zunächst die Brücke am ESP32 stecken und den Resetknopf drücken. Jetzt in der Arduino IDE auf den "Hochladen" Knopf drücken.
Das Programm
Das Programm selber wurde auf der Basis des Webcam-Beispiels CameraWebServer
aufgebaut. Zunächst wurde die gesamte Gesichtserkennung herausgenommen und das Kameramodell auf die in dem Set enthaltene Kamera beschränkt.
Die Wifi-Netzwerk-Anbindung wurde etwas stabiler aufgebaut. Jetzt ist auch ein Reconnect nach Abbruch der Verbindung möglich.
Dann wurde die Index Seite deutlich verkleinert und auf die Punkte beschränkt, die für den Einsatz als PrinterCam notwendig sind. Die Indexseite wird nun auch nicht mehr im GZIP-Format abgelegt, sondern liegt als Plain Text in der new_index.h-Datei vor. Somit sind auch Änderungen leichter vorzunehmen. Wer möchte, kann diese später wieder ins GZIP-Format konvertieren und als ByteArray ablegen. Das ist aber nicht Bestandteil dieses Blogs.
Eingebaut wurde zusätzlich die Möglichkeit, die Flash LED zu benutzen. Es wurde speziell dafür ein Timer eingebaut, der die LED nach 1 min. automatisch ausschaltet. Die LED verbraucht ordentlich Strom und gibt dabei auch ordentlich Wärme ab. Da das Gehäuse aber aus PLA gedruckt und somit etwas wärmeempfindlich ist, könnte ein Zuviel an Wärme dieses zum Erweichen bringen.
Als letztes habe ich das Web Interface meines 3D Druckers (Malyan M200) mit eingearbeitet. Somit kann ich nun die beiden Parameter Extruder und Plattform-Temperatur auslesen und sogar aus diesem Web Interface steuern. Außerdem erhalte ich eine Rückmeldung über den Druckstatus. Um das zu aktivieren, muss nur in der app_httpd.cpp
der #include "new_index.h"
durch #include "new_index_malyan.h"
ersetzt werden. In der Datei muss dann auch noch die IP des Drucker gesetzt werden. (Zeile 418: var printerUrl = 'http://192.168.178.61'
)
Hinweis: Denken Sie daran, ihren WLAN Router, bzw. den DHCP so zu konfigurieren, dass dem ESP32 Modul wie auch dem 3D-Drucker immer die gleiche IP zugewiesen wird.
Rufen Sie die IP im Browser auf:
Screenshot der neuen Kamera vom PC Browser
Screenshot der neuen Kamera im Einsatz von einem Apple iPad.
Zuletzt
Ich habe diese Kamera nun bereits seit mehreren Monaten im Einsatz. Und es funktioniert hervorragend. Viel Spaß beim Nachbau.
Ich hoffe, Ihnen hat dieser kleine Blog gefallen! Bis zum nächsten Mal.
Wilfried Klaas
12 comentarios
Peter Jordan
Danke – funktinierte fast auf Anhieb, nur dass ich unterhalb von SVGA als Auflöung (also auch beim start mit CIF) kein Bild bekomme, aber je nach Auflösung Fehlermeldungen.
10:31:04.427 → Item psram alloc failed. Size: 355200 × 1
10:31:04.427 → matrix3du item alloc failed.
10:31:04.427 → dl_matrix3du_alloc failed
10:31:21.028 → Item psram alloc failed. Size: 230400 × 1
10:31:21.028 → matrix3du item alloc failed.
10:31:21.028 → dl_matrix3du_alloc failed
Andreas Wolter
@Geyer Mario: der Fehler müsste mit der Version des ESP Core zu tun haben. Normalerweise reicht es, die Version auf 1.0.6 zurückzustellen. Das haben Sie scheinbar schon getan. Haben Sie bei der Auswahl auch den Core installiert?
Sie könnten alternativ den neueren Link für den Core einsetzen:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
und dort Version 2.0.1 auswählen (bis zu der Version sollte es funktioieren, darüber nicht, da die fd_forward.h aus dem ESP Arduino Core entfernt wurde.
Siehe auch hier:
https://github.com/easytarget/esp32-cam-webserver/issues/191
Grüße,
Andreas Wolter
AZ-Delivery Blog
Geyer Mario
hallo, ich arbeite mit der Arduino IDE 1.8.19, https://dl.espressif.com/dl/package_esp32_index.json ist eingestellt.
ESP32 Espressif Version 1.0.6 ist eingestellt. ESP32 Wrover Module ist gewählt.
Beim Kompillieren kommt trotzdem
exit status 1
fd_forward.h: No such file or directory
Hat jemand noch eine Idee?
Andreas Wolter
@Frank: in der Funktion doFlashLight() wird die LED ein- und ausgeschaltet.
digitalWrite(4,0); schaltet Pin 4 aus.
digitalWrite(4,1); schaltet Pin 4 ein.
Damit müsste man die LED steuern können.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Frank
Moin,
wie spreche ich denn die LED an?
Gruß Frank
Thorsten Hartwig
Noch zwei Tips von mir.
Das nervige Ermitteln der vom DHCP vergebenen IP-Adresse (entweder per Serial Monitor oder per Webinterface des AccessPoints) kann man sich sparen. ESP32 unterstützt ein Protokoll Namens MDNS.
Dazu an den Anfang der PrinterCam.ino die Zeile
#include
einfügen und nach der Zeile “reconnect();” noch dies einfügen:
if (!MDNS.begin(“PrinterCam”))
Serial.println(“Error setting up MDNS responder!”);
Danach lässt sich das Gerät mit der URL “PrinterCam.local” ansprechen. Ohne http o.ä.
Das zweite Problem ist das Hardcoden der SSID und des Passworts. Wer gibt schon gern sein Passwort fest in Code. Ruckzuck ist der Code versehentlich irgendwie gepublished und alle kennen das Passwort.
Stattdessen hat Espressif das SmartConfig ins Feld gebracht.
Es gibt eine App im Android PlayStore namens “EspTouch: SmartConfig”.
Damit kann ein Android-Gerät die Zugangsdaten auf einen ESP32 übertragen, solange er darauf, noch ohne WLAN-Verbindung, wartet.
Die Zugangsdaten bleiben über den Neustart hinaus erhalten. Löschen ist umständlicher… z.B. WLAN abschalten, dann wartet der ESP auf SmartConfig, dann absichtlich falsche Zugangsdaten übertragen.
Vorgehen wäre so:
1) Die Vorkommen von “WiFi.begin(ssid, password)” ersetzen durch “WiFi.begin();”
2) Die Funktion “AwaitConfig einfügen:
void AwaitSmartConfig()
{
#define MDNS_TIMEOUT 30000 // Wait 20 seconds for smartconfig
WiFi.disconnect(); delay(500);
WiFi.mode(WIFI_STA); delay(500);//Init WiFi as Station
WiFi.setHostname(”PrinterCam"); //define hostname
digitalWrite(4, 1); // LED indicates waiting for smartconfig
WiFi.beginSmartConfig();
unsigned long now = millis();
while (!WiFi.smartConfigDone() && ((millis() – now) < MDNS_TIMEOUT))
;
digitalWrite(4, 0); // LED off as SmartConfig is finished
WiFi.stopSmartConfig();
}
3) Die Funktion reconnect() so erweitern:
void reconnect()
{
if (WiFi.status() != WL_CONNECTED) // makes no sense to leave this method while WiFi is not connected
{
#define CONNECT_TIMEOUT 8000 // Wait 8 seconds for WiFi connect
unsigned long now = millis();
while ((WiFi.status() != WL_CONNECTED) && ((millis() – now) < CONNECT_TIMEOUT))
;
if (WiFi.status() == WL_CONNECTED)
{
Serial.println();
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
return;
}
Serial.println(“Not connected after timeout.”);
AwaitSmartConfig();
now = millis();
while ((WiFi.status() != WL_CONNECTED) && ((millis() – now) < CONNECT_TIMEOUT))
;
if (WiFi.status() == WL_CONNECTED)
{
Serial.println();
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
return;
}
}
}
Thorsten Hartwig
Ganz so einfach war es wirklich nicht.
Egal, ob ich die Arduino IDE 1.8.19, die 2.0.0.rc3 oder Visual Studio mit der vMicro extension probiert habe, beim compilieren kam “fd_forward.h: file not found”. Googeln half nur vage: irgendwie gibt es da zwei unterschiedliche Boradverwalter-URLs. Bevor noch andere reinfallen, hier die Lösung.
Mit der oben angegebenen
https://dl.espressif.com/dl/package_esp32_index.json
bekommt man einen Boardverwalter von Espressif mit der Version 1.0.6, wie im Bild oben.
Damit ist alles wie gewünscht compilierbar. Läuft auf Anhieb, vielen Dank dafür.
Mit der von Arduino selbst propagierten URL
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
bekommt man Version 2.03. Darin fehlen besagte Dateien und weitere Teile.
Der langen Rede kurzer Sinn: downgraden auf 1.06 hilft
Wilfried Klaas
Hallo Jörg,
Ja, es kann durchaus sein, das ein anderes Board dort zu wählen ist. Bei der Boardauswahl immer das Board wählen, was der Hersteller angibt. Damit sollte es zumindest funktionieren. Manchmal ändert sich auch das eingesetzte Modul bei unterschiedlichen Chargen.
#Repetier-Server: Ich hab mir den Repetier Server nicht in der Tiefe angeschaut. Deswegen kann ich da leider keine genaueren Aussagen treffen. Die CAM funktioniert nicht als klassische WebCam, liefert also keinen konstanten Stream. Statt dessen ruft der WebClient immer wieder eine URL auf und bekommt dort ein JPEG. Wenn der Repetier Server das nachstellen und verarbeiten kann, dann sollte das funktionieren. In der Doku hab ich allerdings nichts dergleichen gefunden.
Jörg
Hat klasse geklappt, nachdem ich erstmal mein altes defekten Adapter gegen einen neuen FT232RL von AZ getauscht habe.
Dann noch das AZ Board “Al Thinker ESP32-CAM” ausgewählt und schon hat es funktioniert.
FRAGE: Kann man die Cam unter WebCam bei Repetier-Server im Bereich “Dynamische Bild URL”
oder sonstwie einbinden???
Danke für eine Info!
VG
Jörg
Andreas Wolter
@Georg: das Problem gibt es scheinbar schon länger. Vielleicht hilft Ihnen das hier weiter:
https://github.com/espressif/esp32-camera/issues/102
Grüße,
Andreas Wolter
AZ-Delivery Blog
georg
hallo,
meine ESP32cam stammt vom AZ-delivery, leider wird der start des codes mit der fehlermeldung:
-————————-
rst:0×1 (POWERON_RESET),boot:0×13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0×00,q_drv:0×00,d_drv:0×00,cs0_drv:0×00,hd_drv:0×00,wp_drv:0×00
mode:DIO, clock div:1
load:0×3fff0018,len:4
load:0×3fff001c,len:1216
ho 0 tail 12 room 4
load:0×40078000,len:10944
load:0×40080400,len:6388
entry 0×400806b4
] camera_probe(): Detected camera not supported.
[E][camera.c:1379] esp_camera_init(): Camera probe failed with error 0×20004
-——————-
beendet. Woran kann das liegen?
Dave
Die ESP32CAM ist genial und unschlagbar zu dem Preis. Ich hatte sie mehrere Wochen zur Beobachtung eines kranken Haustieres im Einsatz. Aktuell bin ich am entwickeln einer temporären Rückfahrkamera zum Ankuppeln vom Wohnwagen, eingesteckt und versorgt aus der KFZ-Anhängerkupplung und Anzeige des Bildes auf dem Smartphone. Ich bin schon gespannt, ob die Latenzzeit geringer ist, wie die der winkenden und rufenden Ehefrau zum Fahrer :-) Die Verbesserungen zum Verbindungsaufbau und die reduzierte Oberfläche gefällt mir gut. Vielen Dank für die tollen und gut nachvolziehbaren Projekte und Blogbeiträge hier!