ESP32 S3 Kamera - Fotos auf der SD-Karte im Webbrowser ansehen

In den anderen SD-Karten-Tutorials müssen Sie das Board abstecken und die Karte zu Ihrem Computer bringen, um die Fotos zu sehen. Dieses Tutorial löst das Problem. Der ESP32 S3 speichert Fotos auf der microSD-Karte und betreibt eine kleine Fotogalerie. Öffnen Sie die Adresse in einem beliebigen Webbrowser, und alle Fotos sind da, auf Ihrem Handy oder auf Ihrem Computer.

ESP32 S3 Kamera - Fotos auf der SD-Karte im Webbrowser ansehen

Was Sie bauen werden:

  1. Eine ESP32 S3 Kamera, die alle 30 Sekunden ein Foto auf der microSD-Karte speichert
  2. Eine Fotogalerie-Webseite, die jedes Foto auf der Karte anzeigt
  3. Ein Klick auf ein Foto öffnet es in voller Größe, und Sie können es speichern
  4. Eine Kamera, die Sie nie wieder öffnen müssen, um die Bilder herauszuholen

Erforderliche Hardware

1×ESP32 S3 N16R8 OV5640 Camera
1×(Alternativ) ESP32 S3 N16R8 OV2640 Camera
1×microSD Card
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×(Optional) DC-Stromanschluss
1×(Empfohlen) Screw Terminal Expansion Board for ESP32 S3
1×(Empfohlen) Breakout Expansion Board for ESP32 S3
1×(Empfohlen) Power Splitter for ESP32 S3

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

※ Notiz:

Das ESP32 S3 Kamera-Board hat 40 Pins, aber der Schraubklemmenblock und das Breakout-Board haben 44 Pins. Sie funktionieren trotzdem zusammen. Setzen Sie das Kamera-Board in die Mitte des 44-Pin-Boards, sodass auf der linken Seite 2 Pins frei bleiben und auf der rechten Seite 2 Pins frei bleiben.

Mit dem Schraubklemmenblock können Sie Drähte mit einem Schraubendreher anschließen, ganz ohne Löten. Das Breakout-Board bietet Ihnen einfache Stiftleisten für ein Breadboard.

Wie es funktioniert

Der Webserver hat zwei Adressen, und sie arbeiten zusammen:

AdresseWas sie tut
http://<IP>/Liest die Karte und erstellt eine Seite mit einem kleinen Bild pro Foto
http://<IP>/photo?n=00001Sendet eine Fotodatei von der Karte

Die Galerieseite enthält selbst kein Foto. Sie schreibt nur viele <img>-Zeilen, und jede davon fragt das Board nach einer anderen Datei:

<img src="/photo?n=00001"> <img src="/photo?n=00002"> <img src="/photo?n=00003">

Der Webbrowser fragt also die Fotos nacheinander ab, und der ESP32 S3 muss immer nur eine Datei gleichzeitig lesen. Deshalb kann ein Board mit kleinem Speicher eine Karte voller Bilder anzeigen.

※ Notiz:

Ein Foto mit 180 KB passt nicht am Stück in den Speicher des ESP32 S3. Der Code liest die Datei in Stücken von 1024 Bytes und sendet jedes Stück sofort:

uint8_t buffer[1024]; while (file.available()) { size_t read = file.read(buffer, sizeof(buffer)); client.write(buffer, read); }

Die Liste der Dateien lesen

SD_MMC.open("/") öffnet den obersten Ordner, und openNextFile() geht ihn durch:

File root = SD_MMC.open("/"); File entry = root.openNextFile(); while (entry) { String name = String(entry.name()); // ... use the name ... entry.close(); entry = root.openNextFile(); }

※ Notiz:

Rufen Sie entry.close() immer innerhalb der Schleife auf. Der ESP32 S3 kann nur wenige Dateien gleichzeitig geöffnet halten, und die Liste bricht in der Mitte ab, wenn Sie es vergessen.

Verdrahtungsdiagramm

In diesem Projekt gibt es keine Verdrahtung. Sie stecken nur die microSD-Karte in den Steckplatz.

ESP32 S3 Fotogalerie Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

  1. Ziehen Sie das USB-Kabel ab.
  2. Stellen Sie sicher, dass das Kameramodul mit seinem Flachbandkabel verbunden ist.
  3. Schieben Sie die microSD-Karte in den Steckplatz, bis Sie ein leises Klicken hören.
  4. Stecken Sie das USB-Kabel ein.

Sicherheitshinweise

Nehmen Sie die Karte niemals heraus, während das Board ein Foto schreibt. Das Foto und manchmal die ganze Karte werden beschädigt. Ziehen Sie immer zuerst das USB-Kabel ab, warten Sie zwei Sekunden und nehmen Sie dann die Karte heraus.

Arduino IDE Einstellungen für die ESP32 S3 Kamera

Die Kamera funktioniert nicht mit den Standardeinstellungen der Arduino IDE. Sie müssen einige Punkte im Menü Tools ändern, bevor Sie den Code hochladen.

Menüpunkt in ToolsDiese Auswahl treffen
BoardESP32S3 Dev Module
Flash Size16MB (128Mb)
PSRAMOPI PSRAM
Partition SchemeHuge APP (3MB No OTA/1MB SPIFFS)
CPU Frequency240MHz (WiFi)
USB ModeHardware CDC and JTAG
Upload ModeUART0 / Hardware CDC
Upload Speed921600
USB CDC On BootEnabled

※ Notiz:

PSRAM muss OPI PSRAM sein, und Partition Scheme muss Huge APP sein. Ändern Sie zuerst Flash Size, denn danach ändert sich die Liste der Optionen für Partition Scheme.

DIYables ESP32 WebServer Bibliothek installieren

  1. Öffnen Sie die Arduino IDE.
  2. Klicken Sie auf das Symbol Libraries in der linken Leiste.
  3. Geben Sie DIYables ESP32 WebServer in das Suchfeld ein.
  4. Suchen Sie die Bibliothek von DIYables.io und klicken Sie auf INSTALL.
  • Search for DIYables ESP32 WebServer created by DIYables.io and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Library Manager
Type:
All
Topic:
All
DIYables ESP32 WebServer by DIYables.io
DIYables ESP32 WebServer library designed for ESP32 boards. It includes multi-page web server capabilities and WebSocket support for real-time communication, perfect for IoT projects and DIYables ESP32 boards. More info
1.0.1
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
ESP32S3 Dev Module on COM15
1

SD_MMC und esp_camera sind bereits im ESP32-Boardpaket enthalten.

So programmieren Sie die Fotogalerie

  • Schreiben Sie für jede Adresse eine Funktion und fügen Sie sie in setup() hinzu.
server.addRoute("/", handleGallery); server.addRoute("/photo", handlePhoto); server.begin();
  • Lesen Sie die Nummer aus der Adresse \/photo?n=00001. Die Bibliothek hat die Adresse bereits für Sie in Schlüssel und Werte zerlegt.
String number = ""; for (int i = 0; i < params.count; i++) if (String(params.params[i].key) == "n") number = String(params.params[i].value); String fileName = "/photo_" + number + ".jpg";

※ Notiz:

Wir senden nur die fünf Ziffern, nicht den ganzen Dateinamen. Die Bibliothek speichert einen Wert mit weniger als 16 Zeichen, und 00001 ist kurz und sicher.

  • Nehmen Sie die fünf Ziffern aus einem Dateinamen, um den Link auf der Galerieseite zu erstellen.
String name = String(entry.name()); // photo_00001.jpg String number = name.substring(6, 11); // 00001
  • Senden Sie die Datei mit der korrekten Länge an den Browser, danach die Bytes.
client.print("HTTP/1.1 200 OK\r\n"); client.print("Content-Type: image/jpeg\r\n"); client.printf("Content-Length: %u\r\n", (unsigned)file.size()); client.print("Connection: close\r\n\r\n");
  • Nehmen Sie in loop() weiterhin Fotos auf, neben dem Webserver.
void loop() { server.handleClient(); if (millis() - lastPhotoTime >= PHOTO_INTERVAL) { lastPhotoTime = millis(); takeAndSavePhoto(); } }

※ Notiz:

Der Webserver antwortet jeweils nur einem Webbrowser. Während er ein großes Foto sendet, wartet das nächste Foto der Kamera einen Moment. Das ist bei einem kleinen Board normal.

ESP32 S3 Code

Der Code speichert alle 30 Sekunden ein Foto und zeigt alle Fotos in der Galerie an. Um die Zeit zu ändern, ändern Sie die Zeile #define PHOTO_INTERVAL 30000.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-camera-browse-photos-on-sd-card-from-web-browser */ #include <WiFi.h> #include <DIYables_ESP32_WebServer.h> // DIYables ESP32 WebServer library #include "esp_camera.h" #include "FS.h" #include "SD_MMC.h" const char *WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE IT const char *WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE IT #define PHOTO_INTERVAL 30000 // take one photo every 30 seconds (30000 milliseconds) // Camera pins of the ESP32-S3-N16R8 camera board. // The same pins work for the OV2640, OV3660 and OV5640 versions. #define PWDN_GPIO_NUM -1 #define RESET_GPIO_NUM -1 #define XCLK_GPIO_NUM 15 #define SIOD_GPIO_NUM 4 #define SIOC_GPIO_NUM 5 #define Y9_GPIO_NUM 16 #define Y8_GPIO_NUM 17 #define Y7_GPIO_NUM 18 #define Y6_GPIO_NUM 12 #define Y5_GPIO_NUM 10 #define Y4_GPIO_NUM 8 #define Y3_GPIO_NUM 9 #define Y2_GPIO_NUM 11 #define VSYNC_GPIO_NUM 6 #define HREF_GPIO_NUM 7 #define PCLK_GPIO_NUM 13 // Pins of the microSD card slot on the board #define SD_CLK_GPIO_NUM 39 #define SD_CMD_GPIO_NUM 38 #define SD_D0_GPIO_NUM 40 DIYables_ESP32_WebServer server(80); int photoNumber = 1; unsigned long lastPhotoTime = 0; // Returns the name of the camera sensor that is installed on the board const char *getSensorName(int pid) { switch (pid) { case OV2640_PID: return "OV2640 (2 MP, max UXGA 1600x1200)"; case OV3660_PID: return "OV3660 (3 MP, max QXGA 2048x1536)"; case OV5640_PID: return "OV5640 (5 MP, max QSXGA 2592x1944)"; default: return "Unknown sensor"; } } bool initCamera() { camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = Y2_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM; config.pin_d2 = Y4_GPIO_NUM; config.pin_d3 = Y5_GPIO_NUM; config.pin_d4 = Y6_GPIO_NUM; config.pin_d5 = Y7_GPIO_NUM; config.pin_d6 = Y8_GPIO_NUM; config.pin_d7 = Y9_GPIO_NUM; config.pin_xclk = XCLK_GPIO_NUM; config.pin_pclk = PCLK_GPIO_NUM; config.pin_vsync = VSYNC_GPIO_NUM; config.pin_href = HREF_GPIO_NUM; config.pin_sccb_sda = SIOD_GPIO_NUM; config.pin_sccb_scl = SIOC_GPIO_NUM; config.pin_pwdn = PWDN_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; config.frame_size = FRAMESIZE_SVGA; // 800x600 config.jpeg_quality = 12; // 0 to 63, a lower number means a better image config.fb_count = 1; config.fb_location = CAMERA_FB_IN_DRAM; config.grab_mode = CAMERA_GRAB_WHEN_EMPTY; if (psramFound()) { config.fb_location = CAMERA_FB_IN_PSRAM; config.jpeg_quality = 10; config.fb_count = 2; config.grab_mode = CAMERA_GRAB_LATEST; } else { config.frame_size = FRAMESIZE_QVGA; Serial.println("WARNING: PSRAM not found. Please set PSRAM to OPI PSRAM in the Tools menu."); } esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x\n", err); return false; } sensor_t *s = esp_camera_sensor_get(); Serial.printf("Camera sensor: %s\n", getSensorName(s->id.PID)); // Each sensor needs slightly different settings switch (s->id.PID) { case OV2640_PID: s->set_vflip(s, 0); s->set_hmirror(s, 0); break; case OV3660_PID: s->set_vflip(s, 1); // the OV3660 image is upside down by default s->set_brightness(s, 1); // make the image a little brighter s->set_saturation(s, -2); // make the colors a little softer break; case OV5640_PID: s->set_vflip(s, 0); s->set_hmirror(s, 0); break; default: break; } return true; } bool initSDCard() { SD_MMC.setPins(SD_CLK_GPIO_NUM, SD_CMD_GPIO_NUM, SD_D0_GPIO_NUM); // true means 1-bit mode. The camera uses the other pins, so we cannot use 4-bit mode. if (!SD_MMC.begin("/sdcard", true)) { Serial.println("SD card not found. Please check the card and push it in again."); return false; } if (SD_MMC.cardType() == CARD_NONE) { Serial.println("No SD card inside the slot"); return false; } Serial.printf("SD card size: %llu MB\n", SD_MMC.cardSize() / (1024 * 1024)); return true; } // Makes a file name like /photo_00001.jpg String makeFileName(int number) { char name[32]; sprintf(name, "/photo_%05d.jpg", number); return String(name); } // Looks for the first free file name, so old photos are never lost void findFirstFreeNumber() { while (SD_MMC.exists(makeFileName(photoNumber))) photoNumber++; Serial.printf("The next photo will be photo_%05d.jpg\n", photoNumber); } void takeAndSavePhoto() { camera_fb_t *fb = esp_camera_fb_get(); if (!fb) { Serial.println("Photo capture failed"); return; } String fileName = makeFileName(photoNumber); File file = SD_MMC.open(fileName.c_str(), FILE_WRITE); if (file) { file.write(fb->buf, fb->len); file.close(); Serial.printf("Saved %s (%u bytes)\n", fileName.c_str(), fb->len); photoNumber++; } else { Serial.printf("Cannot write the file %s\n", fileName.c_str()); } esp_camera_fb_return(fb); } // Shows the list of photos that are on the card void handleGallery(WiFiClient &client, const String &method, const String &request, const QueryParams &params, const String &jsonData) { client.print("HTTP/1.1 200 OK\r\n"); client.print("Content-Type: text/html\r\n"); client.print("Connection: close\r\n\r\n"); client.print(F("<!DOCTYPE html><html><head><meta charset=\"utf-8\">")); client.print(F("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">")); client.print(F("<title>ESP32 S3 Photo Gallery</title><style>")); client.print(F("body{background:#111;color:#eee;font-family:sans-serif;text-align:center;margin:0;padding:16px}")); client.print(F("a{color:#4da3ff;text-decoration:none}")); client.print(F(".card{display:inline-block;margin:8px;padding:8px;background:#222;border-radius:8px}")); client.print(F("img{width:240px;border-radius:6px;display:block}")); client.print(F(".note{color:#aaa;font-size:14px;margin-top:-8px}")); client.print(F("</style></head><body><h2>ESP32 S3 Photo Gallery</h2>")); client.print(F("<p class=\"note\">Images saved to Micro SD card</p>")); File root = SD_MMC.open("/"); int count = 0; if (root) { File entry = root.openNextFile(); while (entry) { String name = String(entry.name()); // We only show our own photos if (name.startsWith("photo_") && name.endsWith(".jpg")) { String number = name.substring(6, 11); // the 5 digits inside photo_00001.jpg client.print(F("<div class=\"card\"><a href=\"/photo?n=")); client.print(number); client.print(F("\" target=\"_blank\"><img src=\"/photo?n=")); client.print(number); client.print(F("\"></a><br>")); client.print(name); client.print(F(" - ")); client.print(entry.size() / 1024); client.print(F(" KB</div>")); count++; } entry.close(); entry = root.openNextFile(); } root.close(); } if (count == 0) client.print(F("<p>No photo on the card yet. Please wait.</p>")); client.print(F("<p>")); client.print(count); client.print(F(" photos. <a href=\"/\">Reload</a></p></body></html>")); Serial.printf("The gallery was opened. %d photos on the card.\n", count); } // Sends one photo file from the card to the web browser void handlePhoto(WiFiClient &client, const String &method, const String &request, const QueryParams &params, const String &jsonData) { String number = ""; for (int i = 0; i < params.count; i++) if (String(params.params[i].key) == "n") number = String(params.params[i].value); String fileName = "/photo_" + number + ".jpg"; File file = SD_MMC.open(fileName.c_str(), FILE_READ); if (!file) { Serial.printf("The file %s was not found\n", fileName.c_str()); server.sendResponse(client, "Photo not found", "text/plain"); return; } client.print("HTTP/1.1 200 OK\r\n"); client.print("Content-Type: image/jpeg\r\n"); client.printf("Content-Length: %u\r\n", (unsigned)file.size()); client.print("Connection: close\r\n\r\n"); // Send the file in small pieces, because it does not fit in the memory at once uint8_t buffer[1024]; while (file.available()) { size_t read = file.read(buffer, sizeof(buffer)); client.write(buffer, read); } file.close(); Serial.printf("Sent %s\n", fileName.c_str()); } void setup() { Serial.begin(115200); delay(1000); if (!initCamera()) { Serial.println("Stopped"); while (true) delay(1000); } if (!initSDCard()) { Serial.println("Stopped"); while (true) delay(1000); } findFirstFreeNumber(); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); server.addRoute("/", handleGallery); server.addRoute("/photo", handlePhoto); server.begin(); Serial.print("Gallery is ready. Open this address in your web browser: http://"); Serial.println(WiFi.localIP()); takeAndSavePhoto(); lastPhotoTime = millis(); } void loop() { server.handleClient(); if (millis() - lastPhotoTime >= PHOTO_INTERVAL) { lastPhotoTime = millis(); takeAndSavePhoto(); } }

Schnelle Schritte

  • Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  • Formatieren Sie Ihre microSD-Karte auf Ihrem Computer als FAT32.
  • Ziehen Sie das USB-Kabel ab und stecken Sie dann die Karte in den Steckplatz.
  • Installieren Sie die Bibliothek DIYables ESP32 WebServer.
  • Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
  • Ändern Sie WIFI_SSID und WIFI_PASSWORD auf Ihr eigenes WLAN.
  • Ändern Sie die Einstellungen im Menü Tools. Siehe die Tabelle oben.
  • Kompilieren Sie den Code und laden Sie ihn auf das ESP32 S3 Board hoch, indem Sie in der Arduino IDE auf die Schaltfläche Upload klicken.
Arduino IDE Code hochladen
  • Öffnen Sie den Seriellen Monitor in der Arduino IDE.
So öffnen Sie den Seriellen Monitor in der Arduino IDE
  • Drücken Sie einmal die Taste RESET und lesen Sie die IP-Adresse ab.
  • Warten Sie zwei Minuten, damit das Board einige Fotos speichert.
  • Geben Sie die Adresse in Ihren Webbrowser ein. Die Galerie erscheint.
ESP32 S3 Fotogalerie im Webbrowser

Serieller Monitor

Die folgenden Messwerte wurden im Jahr 2026 aufgezeichnet:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
[2026-09-28 12:00:01] Camera sensor: OV5640 (5 MP, max QSXGA 2592x1944) [2026-09-28 12:00:01] SD card size: 15193 MB [2026-09-28 12:00:01] The next photo will be photo_00001.jpg [2026-09-28 12:00:04] Gallery is ready. Open this address in your web browser: http://192.168.0.2 [2026-09-28 12:00:05] Saved /photo_00001.jpg (51353 bytes) [2026-09-28 12:00:35] Saved /photo_00002.jpg (51259 bytes) [2026-09-28 12:01:05] Saved /photo_00003.jpg (52104 bytes) [2026-09-28 12:01:20] The gallery was opened. 3 photos on the card. [2026-09-28 12:01:21] Sent /photo_00001.jpg [2026-09-28 12:01:21] Sent /photo_00002.jpg [2026-09-28 12:01:22] Sent /photo_00003.jpg
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

Fehlerbehebung

Die Galerieseite öffnet sich, zeigt aber "No photo on the card yet" an.

Warten Sie 30 Sekunden und laden Sie die Seite neu. Die Galerie zeigt nur Dateien an, deren Name mit photo_ beginnt und mit .jpg endet. Fotos aus den anderen Tutorials, wie motion_00001.jpg, werden nicht angezeigt. Ändern Sie die Zeile name.startsWith("photo_"), wenn Sie diese sehen möchten.

Die kleinen Bilder bleiben grau und erscheinen nie.

Das Board zeigt Fotos in voller Größe als kleine Bilder an, daher ist eine Seite mit 50 Fotos sehr langsam. Warten Sie, oder setzen Sie config.frame_size auf FRAMESIZE_VGA herab, damit die Dateien kleiner werden.

Die Seite lädt, aber einige Fotos fehlen.

Der ESP32 S3 kann nur wenige Dateien gleichzeitig geöffnet halten. Stellen Sie sicher, dass entry.close() innerhalb der Schleife steht.

Die Seite ist bei vielen Fotos sehr langsam.

Das ist normal. Das Board sendet ein Foto nach dem anderen. Bei einer Karte mit Hunderten von Fotos ist es schneller, die Karte herauszunehmen und am Computer zu lesen.

Der Serielle Monitor zeigt SD card not found.

Formatieren Sie die Karte als FAT32, verwenden Sie eine Karte mit 32 GB oder weniger und stecken Sie die Karte erneut ein.

Die Seite öffnet sich überhaupt nicht.

Ihr Computer und Ihr ESP32 S3 müssen im selben WLAN-Netzwerk sein. Geben Sie http:// ein, nicht https://.

Der Serielle Monitor zeigt nach den Startmeldungen nichts an.

Wenn Ihr USB-Kabel im Anschluss mit dem Namen UART steckt, stellen Sie USB CDC On Boot auf Disabled. Wenn es im Anschluss mit dem Namen USB steckt, stellen Sie es auf Enabled.

Anwendungen

Eine Kamera, die ihre eigenen Fotos über WLAN anzeigt, erspart Ihnen jedes Mal den Weg zum Board. Hier sind praktische Projekte, die Sie mit diesem Code bauen können:

  1. Zeitraffer-Kamera, die Sie vom Schreibtisch aus prüfen können: Sehen Sie, wie die Bilder aussehen, bevor Sie sie eine Woche lang laufen lassen.
  2. Baustellenkamera: Zeigen Sie einem Kunden die heutigen Fotos auf einem Handy, direkt auf der Baustelle.
  3. Pflanzen- und Gewächshausbeobachter: Beobachten Sie das Wachstum Ihrer Pflanzen, ohne das Gewächshaus zu öffnen.
  4. Aufzeichnung für Laden und Büro: Ein Manager kann sich die Fotos aus einem anderen Raum ansehen.
  5. Klassenzimmerkamera: Jeder Schüler kann die Galerie auf seinem eigenen Handy öffnen.
  6. Protokoll für Maschinen und 3D-Drucker: Prüfen Sie die letzten Fotos, wenn ein Druck fehlgeschlagen ist, ganz ohne Kabel.
  7. Aquariumbeobachter: Beobachten Sie Ihre Fische vom Sofa aus.
  8. Wetter- und Himmelskamera: Zeigen Sie den Himmel des ganzen Tages als Seite mit kleinen Bildern.
  9. Türkamera mit Aufzeichnung: Sehen Sie nach, wer gekommen ist, und speichern Sie nur die Fotos, die Sie behalten möchten.
  10. Ferienhauskamera: Prüfen Sie die Bilder über das lokale WLAN, wenn Sie ankommen.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Sehen Sie sich unten die Schritt-für-Schritt-Videoanleitung für dieses ESP32 S3 Projekt an.

Herausforderungen

  1. Einsteiger: Ändern Sie die Galerie so, dass das neueste Foto zuerst angezeigt wird.
  2. Fortgeschrittene: Fügen Sie eine Adresse /delete?n=00001 hinzu, die mit SD_MMC.remove() ein Foto von der Karte löscht.
  3. Profis: Zeigen Sie nur 20 Fotos auf einer Seite an und fügen Sie die Links Weiter und Zurück hinzu, damit sich auch eine Karte mit tausend Fotos schnell öffnet.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!