SSTV, APRS und CW vom Ballon: Die „SSTV and Beyond“-Firmware auf dem ESP32-CAM

Ein kleiner Praxisbericht von Thomas, DL8LTD

Für das unser Stratosphären-Ballonprojekt IZUpInTheAir kommt als Bildsender ein ESP32-CAM zum Einsatz, der Fotos per SSTV (Slow Scan Television) im PD120-Format überträgt – ergänzt um APRS-Telemetrie und eine CW-Kennung. Die dafür verwendete Open-Source-Firmware SSTV-and-Beyond von Tysonpower liefert genau dieses Paket fertig mit. Ganz lieben Dank an dieser Stelle an Manuel, DO5TY.

Thomas (DL8LTD) hat die Software für das Projekt aufgesetzt und dokumentiert hier Schritt für Schritt, wie das Flashen auf dem Mac gelingt – inklusive der Stolpersteine, über die man dabei aktuell noch stolpert.

Was wird gebraucht?

  • Ein ESP32-CAM-Modul (AI Thinker-Variante)
  • Ein externer USB-TTL-Adapter (z. B. FTDI oder CP2102), da das ESP32-CAM keinen eigenen USB-Anschluss besitzt
  • Ein Mac mit der Arduino IDE
  • Etwas Geduld beim ersten Flash-Versuch 😉

Schritt 1: Arduino IDE einrichten

Zunächst die aktuelle Arduino IDE (Version 2.3.7) installieren. Anschließend unter Einstellungen → Zusätzliche Boardverwalter-URLs folgende Adresse eintragen:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Wichtiger Hinweis: Aktuell (Stand Sommer 2026) sollte gezielt Version 3.1.1 installiert werden. Neuere Versionen (ab 3.3.0) haben in der Kamera-Bibliothek einen internen Typ umbenannt (jpg_scale_tesp_jpeg_image_scale_t), worauf der Sketch noch nicht angepasst ist. Mit einer zu neuen Boardpaket-Version bricht die Kompilierung mit einem Fehler wie 'jpg_scale_t' was not declared in this scope ab.

Schritt 2: Bibliotheken installieren

Über den Bibliotheksverwalter werden benötigt:

  • Adafruit GFX Library
  • TinyGPSPlus (Mikal Hart)
  • DHT sensor library (Adafruit)

Schritt 3: Sketch öffnen

Nach dem Klonen des Repositorys liegt im Unterordner SSTV-and-Beyond/ eine ganze Reihe von Dateien: aprs.ino, camera.ino, cw.ino, sstv.ino, shared.h und SSTV-and-Beyond.ino.

Man muss hier nicht jede Datei einzeln öffnen – ein Klick auf SSTV-and-Beyond.ino genügt. Die Arduino IDE lädt automatisch alle Dateien im selben Ordner als Tabs mit, da Arduino-Sketches üblicherweise aus mehreren .ino-Dateien (je Funktionsblock) plus einer gemeinsamen Header-Datei bestehen.

Schritt 4: Board- und Port-Einstellungen

  • Board: ESP32 Arduino → AI Thinker ESP32-CAM
  • PSRAM: unbedingt auf „OPI PSRAM“ bzw. „Enabled“ stellen – ohne aktiviertes PSRAM schlägt später die Bildkonvertierung fehl (Error converting image into buffer!)
  • Port: der jeweilige USB-seriell-Port des Adapters (z. B. /dev/cu.usbserial-XXXX)

Schritt 5: Verkabelung für den Flash-Modus

Da das ESP32-CAM keinen eigenen USB-Anschluss hat, braucht es einen externen Adapter:

  • Adapter-TX → ESP32-RX, Adapter-RX → ESP32-TX (über Kreuz!)
  • GPIO0 auf GND legen, um den Bootloader-Modus zu aktivieren
  • Reset-Taste drücken bzw. Board kurz neu starten, unmittelbar bevor der Upload beginnt

Falls beim Upload die Fehlermeldung Failed to connect to ESP32: No serial data received erscheint: meist hilft es, GPIO0 sicher auf GND zu legen und den Reset genau in dem Moment zu drücken, in dem „Connecting…“ im Log erscheint. Auch eine stabile, ausreichend belastbare 5V-Stromversorgung (statt nur über den USB-Adapter) schafft hier oft Abhilfe, da die Kamera beim Booten kurzzeitig mehr Strom zieht.

Schritt 6: Hochladen und Testen

Nach erfolgreichem Upload (Wrote ... bytes ... Hash of data verified) GPIO0 wieder von GND trennen und das Board neu starten.

Im Seriellen Monitor (Baudrate meist 115200) lässt sich der Ablauf live mitverfolgen. Bei unserem ersten erfolgreichen Testlauf durchlief die Firmware sauber alle drei Modi:

Sending Morse: DK0IZ-11
Sending APRS NOW!
Real SSTV
PSRAM-Allokation OK!
Canvas created in PSRAM and prepared
Got image from camera...
Image was converted...
Starting SSTV transmission... Pic: 001
Sending SSTV header...
Sending SSTV image data...

Das Ergebnis

Mit dem passenden Boardpaket (Version 3.1.1) und aktiviertem PSRAM läuft die SSTV-and-Beyond-Firmware zuverlässig auf dem ESP32-CAM. Damit steht ein wichtiger Baustein für die Bildübertragung von IZUpInTheAir – unserem Stratosphärenballon-Projekt – zur Verfügung.

Als Nächstes steht der echte Sende- und Empfangstest auf 144,500 MHz an, um zu prüfen, ob die Bilder auch über die SA818-Sendeeinheit sauber ankommen. Wer mithören möchte: Ein SSTV-Decoder wie Robot36 (Android/iOS) reicht für das verwendete PD120-Format völlig aus.