1. Kurzbeschreibung
Das MMDVM Display ist eine ESP32-basierte Touchscreen-Firmware zur Anzeige von Live- und Heard-Daten eines MMDVM-Hotspots. Unterstützt werden Pi-Star und WPSD als MMDVM-Backend. Zusätzlich können optionale WATCH-Quellen wie SVXLink, APRS.fi, OpenWeather und HAMQSL aktiviert werden.
Die Konfiguration erfolgt über eine integrierte Weboberfläche. Bei fehlender oder ungültiger Konfiguration startet das Gerät automatisch einen Setup-Access-Point.
2. Voraussetzungen
Hardware
Benötigt wird ein unterstütztes ESP32-Touchdisplay. Die Firmware enthält Backend-Unterstützung für:
- ESP32-2432S028R / CYD / Cheap Yellow Display: DISPLAY_BACKEND_2432S028R
- ESP32-S3 JC3248W535C: DISPLAY_BACKEND_JC3248W535C
- Waveshare ESP32-S3-Touch-LCD-4.3C / WS8048S043C: DISPLAY_BACKEND_WS8048S043C
- Waveshare ESP32-S3-Touch-LCD-7 / WS8048S070C: DISPLAY_BACKEND_WS8048S070C
- Elecrow CrowPanel 7.0 Advance: DISPLAY_BACKEND_EC8048S070C
- Elecrow CrowPanel 7.0 Basic: DISPLAY_BACKEND_EC8048S070B
- EC8048S070CT / ESP32-S3-Touch-LCD-7: DISPLAY_BACKEND_EC8048S070CT
- Waveshare ESP32-S3-Touch-LCD-2.8: DISPLAY_BACKEND_WSTOUCHLCD28
Standardmäßig ist in der Firmware das Backend DISPLAY_BACKEND_WSTOUCHLCD28 gesetzt. Wer ein anderes Display nutzt, muss vor dem Kompilieren die passende DISPLAY_BACKEND-Konstante setzen.
Netzwerk
Benötigt wird:
- ein 2,4-GHz-WLAN für das ESP32-Display,
- ein Pi-Star- oder WPSD-Hotspot im selben Netzwerk,
- die IP-Adresse oder der Hostname des Dashboards, zum Beispiel pi-star.local oder 192.168.1.50,
- optional Internetzugriff für RadioID, Target-Listen, OpenWeather, APRS.fi und HAMQSL.
Optional: SSH
SSH wird nur benötigt, wenn über den Touchscreen oder die Weboberfläche Befehle ausgeführt werden sollen, zum Beispiel:
- DigiMode-Umschaltung,
- Talkgroup- oder Reflector-Aktionen,
- Disconnect-Befehle,
- eigene Skripte auf dem Hotspot,
- SVXLink-DTMF- oder Steuerbefehle.
Dafür müssen SSH-Server, Benutzername, Passwort und Port des Zielsystems bekannt sein. Die Passwörter werden lokal auf dem Display gespeichert. Diese Funktion sollte nur in vertrauenswürdigen Netzwerken verwendet werden.
Software / Build-Umgebung
Für das Kompilieren aus der .ino-Datei werden je nach Display folgende Arduino-Bibliotheken verwendet:
- ESP32 Arduino Core,
- WiFi, HTTPClient, WebServer, Update, FS, SD / SD_MMC, SPI,
- ArduinoJson,
- PNGdec,
- je nach Display TFT_eSPI und XPT2046_Touchscreen,
- oder Arduino_GFX_Library, Wire und teilweise lvgl,
- für SSH-Actions: libssh_esp32 / libssh.
Für OTA-Updates muss die erste Firmware per USB mit einer passenden OTA-Partitionstabelle geflasht werden. OTA erwartet später nur die Application .bin, nicht .ino, .zip, Bootloader-, Partition- oder Merged-Flash-Dateien.
3. Erste Einrichtung nach dem Flashen
Schritt 1: Display starten
Nach dem Flashen wird das Display per USB oder über die normale Stromversorgung gestartet. Wenn noch keine gültige Konfiguration vorhanden ist, öffnet das Gerät automatisch einen Setup-Access-Point.
Schritt 2: Mit dem Setup-WLAN verbinden
Mit Handy, Tablet oder PC das WLAN verbinden:
MMDVM-Display-xxxxxxDie genaue Adresse wird auf dem Display angezeigt. In der Regel wird die Weboberfläche über die auf dem Display angezeigte IP geöffnet.
Schritt 3: Grundkonfiguration speichern
In der Weboberfläche mindestens folgende Felder ausfüllen:
- Aktiv backend: Pi-Star oder WPSD auswählen.
- Pi-Star / WPSD Host or IP: Hostname oder IP des Hotspots eintragen.
- WiFi SSID 1 und WiFi Passwort 1: eigenes WLAN eintragen.
- Optional: Device callsign setzen.
Danach auf Speichern configuration klicken.
Schritt 4: Normale Verbindung verwenden
Nach dem Speichern verbindet sich das Display mit dem eingetragenen WLAN. Die neue IP-Adresse wird auf dem Display angezeigt. Danach die Weboberfläche über diese neue Adresse öffnen.
4. Aufbau der Weboberfläche
Die Weboberfläche ist in zwei Hauptbereiche aufgeteilt:
Konfiguration
Hier werden die allgemeinen Geräteeinstellungen vorgenommen:
- System mode
- MMDVM settings
- Quick actions
- Network
- Wifi
- Display
- Weather
- HAMQSL
- Lookup
- Design
Application
Hier liegen Zusatzseiten und Wartungsfunktionen:
- SVXLink
- APRS
- HAMQSL
- Ziel lists
- OTA firmware
- Diagnostics
- Device log
- FAQ
- Changelog
Oben in der Weboberfläche stehen außerdem Import- und Export-Funktionen für die Konfiguration zur Verfügung.
5. System mode
Aktiv backend
Hier wird ausgewählt, welches MMDVM-System für die normalen LIVE- und HEARD-Seiten verwendet wird:
- Pi-Star
- WPSD
Device callsign
Hier kann ein eigenes Rufzeichen für Bootscreen, Statusanzeigen und Weboberfläche eingetragen werden. Bleibt das Feld leer, wird der Standardwert verwendet.
Start Seite after boot
Wenn zusätzliche WATCH-Quellen aktiviert sind, kann die Startseite nach dem Booten ausgewählt werden, zum Beispiel MMDVM LIVE, SVXLink, APRS, Wetter oder HAMQSL.
6. MMDVM settings
Dieser Bereich verbindet das Display mit Pi-Star oder WPSD.
Pi-Star / WPSD Host or IP
Hier wird die Adresse des Dashboards eingetragen, zum Beispiel:
pi-star.local
192.168.1.50Das Display liest darüber die Live- und Last-Heard-Daten.
Enable SSH remote control
Diese Option aktiviert SSH-Steuerung für Touch-Bedienung und Quick Aktionen.
Nur aktivieren, wenn wirklich Befehle vom Display auf dem Hotspot ausgeführt werden sollen.
SSH user / Passwort / port
Standardwerte:
User: pi-star
Port: 22Das Passwort muss zum Zielsystem passen. Bei WPSD oder angepassten Installationen können andere Zugangsdaten nötig sein.
7. Quick actions
Quick Aktionen sind bis zu vier frei definierbare SSH-Befehle. Sie erscheinen im Touchscreen-Popup ACTIONS auf der Live-Seite und können auch direkt aus der Weboberfläche gestartet werden.
Pro Preset gibt es:
- Enable preset: Schaltet den Slot ein.
- Prefix command with sudo: Führt den Befehl mit sudo aus.
- Button label: Beschriftung des Buttons auf dem Display.
- Remote shell command: Der auszuführende Shell-Befehl.
Beispiele für sinnvolle Aktionen:
DMR TG91
DMR TG263
REF001C
DisconnectWichtig: Das Display führt exakt den Befehl aus, der eingetragen wird. Befehle sollten vorher manuell per SSH getestet werden.
8. Network
Refresh interval
Legt fest, wie oft das Display neue Daten vom MMDVM-Backend abfragt. Standard ist etwa 1500 ms.
Ein kleiner Wert aktualisiert schneller, erzeugt aber mehr Netzwerk- und CPU-Last. Ein größerer Wert ist ruhiger und stabiler bei schwachen Netzwerken.
Callsign hold
Legt fest, wie lange ein empfangenes Rufzeichen auf dem Display gehalten wird, bevor der normale Idle-Zustand wieder erscheint.
Convert API UTC time to local device time
Wenn aktiv, werden UTC-Zeitangaben aus der API in lokale Zeit umgerechnet.
Zeit zone rule
Für Deutschland kann diese POSIX-Zeitzonenregel verwendet werden:
CET-1CEST,M3.5.0/2,M10.5.0/39. Wifi
Die Firmware unterstützt bis zu 5 gespeicherte WLAN-Profile.
Für jedes Profil gibt es:
- WiFi SSID
- WiFi Passwort
Nicht genutzte Zeilen bleiben leer.
Retries per WiFi Profil
Legt fest, wie oft ein sichtbares WLAN erneut versucht wird, bevor das nächste Profil verwendet wird.
Beispiele:
- 0: nur ein Versuch,
- 2: erster Versuch plus zwei Wiederholungen.
Wenn kein gespeichertes WLAN funktioniert, bleibt der Setup-Access-Point aktiv, damit die Konfiguration erneut geändert werden kann.
10. Display
Brightness
Helligkeit von 0 bis 255.
Design base color
Basisfarbe der Weboberfläche und Display-Akzentfarbe, zum Beispiel:
#35C2FFFlip screen 180°
Dreht die Anzeige um 180 Grad.
Enable scrolling Text
Lange Texte scrollen automatisch, statt abgeschnitten zu werden.
Enable screensaver
Aktiviert den Bildschirmschoner. Nach Inaktivität wird die Hintergrundbeleuchtung gedimmt.
Screensaver timeout
Zeit bis zum Start des Screensavers in Millisekunden.
Screensaver brightness
Helligkeit im Screensaver-Modus von 0 bis 255.
Eine Berührung des Displays beendet den Screensaver.
11. Weather / OpenWeather
Die Wetterfunktion ist optional und erscheint als WATCH-Quelle sowie im Screensaver.
Benötigt werden:
- Enable Weather WATCH + screensaver
- Refresh time
- Latitude
- Longitude
- OpenWeather API key
Beispielkoordinaten:
Latitude: 50.11552
Longitude: 8.68417Wenn SVXLink GPS-Koordinaten verfügbar sind, kann die Firmware diese für Wetterinformationen verwenden.
12. HAMQSL
HAMQSL zeigt Solar- und Ausbreitungsdaten als WATCH-Seite.
Einstellungen:
- Enable HAMQSL WATCH
- Refresh time
- HAMQSL XML URL
Standard-URL:
https://www.hamqsl.com/solarxml.phpDie minimale Aktualisierungszeit beträgt 60 Minuten.
13. Lookup / RadioID
RadioID fallback
Wenn aktiviert, kann das Display fehlende Rufzeicheninformationen online über RadioID oder eine kompatible API nachladen.
Standard-URL:
https://radioid.net/api/users?callsign=Bei eigenen APIs kann %CALLSIGN% im URL-Template verwendet werden. Die Firmware ersetzt diesen Platzhalter automatisch durch das Rufzeichen.
Unterstützte Antwortformate:
- RadioID-ähnliches JSON
- JSON-Objekt oder JSON-Array mit Namensfeld
- Plain-Text mit Operatornamen
14. Ziel lists
Target-Listen lösen Talkgroups, Reflectoren und Räume in lesbare Namen auf. Die Dateien liegen im Ordner:
/lookupVerwendete Dateien:
/lookup/dmr.txt
/lookup/dstar.txt
/lookup/ysf.txt
/lookup/p25.txt
/lookup/nxdn.txtUnterstütztes Format:
262|GermanyAkzeptiert werden auch Semikolon, Komma, Tab oder einfache Leerzeichen als Trennzeichen.
Source URLs
Standard-Basis-URL:
https://w0chp.radio/digital-radio-lists/Es können eigene URLs pro Mode eingetragen werden. Bleibt ein Feld leer, verwendet das Display die Standardpfade.
Update
Über Ziel lists -> Update können Listen für folgende Modi heruntergeladen werden:
- DMR
- D-STAR / XLX
- YSF
- P25
- NXDN
Internetverbindung wird nur für das Aktualisieren benötigt. Die Anzeige selbst nutzt danach die lokalen Dateien.
15. SVXLink
SVXLink ist optional und wird getrennt von Pi-Star/WPSD konfiguriert.
Enable SVXLink
Aktiviert SVXLink als zusätzliche WATCH-Quelle. Danach kann auf dem Display zwischen MMDVM und SVXLink gewechselt werden.
SVXLink source
Es gibt zwei Varianten:
- URL / dashboard HTML: liest eine bestehende SVXLink-Dashboardseite
- API / JSON bridge: nutzt einen JSON-Endpunkt wie display-json.php
SVXLink Host/IP or full URL
Beispiele:
192.168.1.60
https://svxlink-host/index.phpSVXLink URL/API path
Beispiele:
/index.php
/api/display-json.phpSVXLink SSH actions
Für SVXLink gibt es separate SSH-Daten und separate Action-Slots. Diese erscheinen nur, wenn SVXLink als aktive WATCH-Quelle ausgewählt ist.
Einstellungen:
- Enable SVXLink SSH actions
- SVXLink SSH user
- SVXLink SSH Passwort
- SVXLink SSH port
- vier eigene SVXLink Action-Slots
16. APRS.fi
APRS kann als WATCH-Quelle aktiviert werden. Das Display verwendet den aktuellen LIVE- oder Last-Heard-Callsign als Suchrufzeichen.
Einstellungen:
- Enable APRS
- APRS.fi API key
- Refresh interval minutes
Die Firmware begrenzt APRS-Abfragen, um Rate-Limits zu vermeiden:
- Mindest-Refresh: 10 Minuten
- Requests werden mindestens 5 Minuten auseinandergezogen
- bei Rate-Limit-Antworten wird eine längere Pause eingelegt
17. OTA Firmware Update
Über Application -> OTA firmware kann eine neue Firmware per Browser hochgeladen werden.
Wichtig:
- Nur die passende Application .bin hochladen.
- Keine .ino, .zip, .bin.gz, Bootloader-, Partition- oder Merged-Flash-Datei verwenden.
- Board, Display-Backend und Partition-Layout müssen zur installierten Firmware passen.
- Vor dem Update am besten die Konfiguration exportieren.
- Während des Uploads Browser und Stromversorgung nicht trennen.
Nach einem erfolgreichen OTA-Update startet das Display neu.
18. Diagnostics und Device log
Diagnostics
Zeigt Laufzeitdaten wie:
- Uptime
- WLAN-Status
- freier Heap
- API-Latenz
- API-Statuscodes
- Weather-Status
- Hotspot-Status
- RX/TX-Frequenzen
- QSO-Zähler
- Modus-Zähler
Device log
Zeigt ein internes Laufzeit-Log mit Meldungen zu:
- WLAN-Verbindung
- API-Fehlern
- Wetter/HAMQSL
- OTA
- Konfiguration
- SSH-Actions
Das Log ist ein RAM-Ringpuffer. Es bleibt beim Neuladen der Webseite erhalten, aber nicht nach einem Neustart.
19. Import und Export der Konfiguration
Export config
Lädt die aktuelle Konfiguration als JSON-Datei herunter:
mmdvm-display-config.jsonEmpfehlung: Nach erfolgreicher Einrichtung immer exportieren und sichern.
Import config
Importiert eine vorher exportierte JSON-Konfiguration. Das ist nützlich nach:
- Neu-Flashen
- OTA-Testversionen
- SD-Kartenwechsel
- Wiederherstellung nach falschen Einstellungen
Die Konfiguration wird intern als /config.json gespeichert.
20. Bedienung am Touchscreen
Die normale Bedienung erfolgt über die angezeigten Tabs und Buttons.
Typische Ansichten:
- LIVE / WATCH
- HEARD
- INFO
- Actions-Popup
- Source-Auswahl bei aktivierten WATCH-Quellen
- Helligkeits- und Bildschirmschonerfunktionen
Wenn Quick Aktionen konfiguriert sind, erscheint auf der Live-Seite der Button ACTIONS. Dort können gespeicherte SSH-Presets direkt gestartet werden.
Bei mehreren WATCH-Quellen kann zwischen MMDVM, SVXLink, APRS, Weather und HAMQSL gewechselt werden.
21. Sicherheitshinweise
- Die Weboberfläche läuft lokal im Netzwerk per HTTP.
- SSH-Passwörter werden lokal auf dem Display gespeichert.
- Quick Aktionen führen echte Shell-Befehle auf dem Zielsystem aus.
- Nur in vertrauenswürdigen Netzwerken verwenden.
- Keine unnötig privilegierten Benutzer verwenden.
- sudo nur aktivieren, wenn der Befehl es wirklich benötigt.
- Vor OTA-Updates immer die Konfiguration sichern.
22. Fehlerbehebung
Setup-AP bleibt aktiv
Mögliche Ursachen:
- WLAN-SSID oder Passwort falsch
- WLAN nicht sichtbar
- 5-GHz-only-Netz verwendet
- keine gültige Konfiguration gespeichert
- Hotspot-Host fehlt
Lösung: Mit MMDVM-Display-xxxxxx verbinden, Weboberfläche öffnen und WLAN-Daten korrigieren.
Keine Daten auf LIVE
Prüfen:
- Ist Aktiv backend korrekt auf Pi-Star oder WPSD gesetzt?
- Ist Pi-Star / WPSD Host or IP korrekt?
- Öffnet sich das Übersicht vom Browser aus im selben Netzwerk?
- Sind Display und Hotspot im gleichen Netzwerk?
Quick Aktionen funktionieren nicht
Prüfen:
- Enable SSH remote control ist aktiviert.
- SSH-User, Passwort und Port stimmen.
- Der Befehl funktioniert manuell per SSH.
- Der Action-Slot hat Label und Command.
- sudo ist nur aktiv, wenn nötig.
SVXLink wird nicht angezeigt
Prüfen:
- Enable SVXLink ist aktiv.
- Host und Pfad stimmen.
- Richtige Quelle ausgewählt: URL oder API.
- Bei API: JSON-Bridge-Endpunkt ist erreichbar.
Wetter bleibt leer
Prüfen:
- Weather ist aktiviert.
- Latitude und Longitude sind gesetzt.
- OpenWeather API-Key ist korrekt.
- Internetzugriff funktioniert.
APRS zeigt nichts an
Prüfen:
- APRS ist aktiviert.
- APRS.fi API-Key ist eingetragen.
- Es gibt einen aktuellen Callsign aus LIVE oder Last-Heard.
- Rate-Limit-Pause abwarten.
Target-Listen aktualisieren nicht
Prüfen:
- WLAN ist verbunden.
- SD-Karte ist vorhanden und beschreibbar.
- Source-URL ist erreichbar.
- Mindestens ein Modus ist beim Update ausgewählt.
OTA schlägt fehl
Prüfen:
- Es wurde eine Application .bin hochgeladen.
- Keine .ino, .zip, .bin.gz, Bootloader-, Partition- oder Merged-Datei verwenden.
- Firmware wurde für exakt dieses Board und Display-Backend kompiliert.
- OTA-Partitionstabelle ist vorhanden.
23. Empfohlener Ablauf für Nutzer
1. Firmware passend zum Display flashen.
2. Setup-AP MMDVM-Display-xxxxxx verbinden.
3. WLAN, Backend und Hotspot-IP eintragen.
4. Speichern und neue IP-Adresse öffnen.
5. Optional SSH-Actions einrichten.
6. Optional SVXLink, APRS, Wetter und HAMQSL aktivieren.
7. Target-Listen aktualisieren.
8. Design und Screensaver einstellen.
9. Konfiguration exportieren und sichern.
24. Kurze Beispielkonfiguration
Minimal für Pi-Star
Active backend: Pi-Star
Pi-Star / WPSD Host or IP: pi-star.local
WiFi SSID 1: MeinWLAN
WiFi Password 1: ********
Device callsign: DEINCALLMinimal für WPSD
Active backend: WPSD
Pi-Star / WPSD Host or IP: 192.168.1.50
WiFi SSID 1: MeinWLAN
WiFi Password 1: ********
Device callsign: DEINCALLOptional Wetter
Enable Weather WATCH + screensaver: aktiv
Refresh time: 10
Latitude: 50.11552
Longitude: 8.68417
OpenWeather API key: dein_api_keyOptional HAMQSL
Enable HAMQSL WATCH: aktiv
Refresh time: 60
HAMQSL XML URL: https://www.hamqsl.com/solarxml.php25. Hinweise für Downloads
Beim Download sollten Nutzer darauf achten, die richtige Datei zu verwenden:
- .ino: Quellcode für Arduino IDE / PlatformIO
- .bin: fertige Firmware für OTA oder Flash-Tool
- .json: exportierte Konfiguration
- keine fremde .bin für ein anderes Display-Backend flashen
Für OTA immer nur die passende Application-Firmware für das verwendete Display nutzen.