Wiki

[ESP32] MMDVM Display

Aktualisiert vor 13 T. von Martin D.

Diese Wiki erklärt die Voraussetzungen, die erste Einrichtung, alle wichtigen Einstellungen der Weboberfläche sowie optionale Funktionen wie SSH-Actions, SVXLink, APRS, Wetter, HAMQSL, OTA und Target-Listen.

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-xxxxxx


Die 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.50


Das 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: 22


Das 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
Disconnect


Wichtig: 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/3


9. 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:

#35C2FF


Flip 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.68417


Wenn 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.php


Die 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:

/lookup


Verwendete Dateien:

/lookup/dmr.txt
/lookup/dstar.txt
/lookup/ysf.txt
/lookup/p25.txt
/lookup/nxdn.txt


Unterstütztes Format:

262|Germany


Akzeptiert 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.php


SVXLink URL/API path

Beispiele:

/index.php
/api/display-json.php


SVXLink 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.json


Empfehlung: 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: DEINCALL


Minimal 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: DEINCALL


Optional Wetter

Enable Weather WATCH + screensaver: aktiv
Refresh time: 10
Latitude: 50.11552
Longitude: 8.68417
OpenWeather API key: dein_api_key


Optional HAMQSL

Enable HAMQSL WATCH: aktiv
Refresh time: 60
HAMQSL XML URL: https://www.hamqsl.com/solarxml.php


25. 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.