HowTo: Nextion 2.8″ Display an ZUM Radio-MMDVM for PI v0.9 (MMDVM-Pi Hat)

Vor einigen Wochen habe ich für DO0RM ein ZUM Radio-MMDVM for PI v0.9 (nachfolgend auch MMDVM-Pi Hat oder Modem genannt) geordert um das Relais für digitale Betriebsarten (DMR, D-Star, P25 etc.) fit zu machen. Ziemlich schnell stellt man dann fest, dass ein kleines Display, welches die wichtigsten Infos direkt am Relais anzeigt doch von Vorteil wäre. Insbesondere, wenn das Relais an einem Standort ohne Monitor etc. installiert ist und man die Logs nur mit größerem Aufwand auswerten kann.
Ich habe mich für das Nextion 2.8″ in der Erweiterten ( Enhanced) Ausführung (Modelnummer NX3224K028) entschieden und dieses bei komputer.de bestellt.

Diese Version hat gegenüber der Normalausführung einen höheren CPU Takt, eine eingebaute Uhr (RealTimeClock), einen beschreibbaren Flashspeicherbereich, GPIO Ports und grösseren Flashspeicher. Da ich auf dem Raspberry PI3 aktuell noch kein GPS-Hat installiert habe, könnte zumindest die RTC hilfreich sein. Ob ich den größeren Speicher wirklich benötige wage ich zu bezweifeln.

Grundsätzlich arbeitet das Display in der Form, dass Grafiken direkt im Speicher abgelegt und lediglich Inhalte (Texte oder Werte) sowie die Angabe, an welcher Position und mit welchem Hintergrundbild, per seriellem Bus übermittelt werden.
Die Datenmenge die seriell übertragen wird ist also minimal und entsprechend schnell reagiert das Display.
Ganz einfach ausgedrückt erhält das Display also z.B. die Information
“zeige Hintergrund-Grafik 1.jpg und blende an Punkt A,B.. die Information xyz ein” wobei die Grafik sich bereits im Speicher befinden und die Punkte “A,B etc.” im Layout definiert sein müssen.
Durch einen kostenlosen Editor (Nextion Editor) kann man nach dem wysiwyg-Prinzip eigene Layouts erstellen.
Selbstverständlich zeigt sich auch hier wieder der HamSpirit und so haben diverse Funkamateure bereits eigene Layouts erstellt, die sie kostenlos zur Verfügung stellen. Eine interessante Quelle ist die Facebook Gruppe “NEXTION – HAM-Radio screens
Auch der MMDVMHost (also die Steuerungssoftware) ist von Haus aus bereits seit langem für die Nutzung von Displays vorbereitet und bietet mehrere vorinstallierte Layouts (z.B. von ON7LDS), die man lediglich in der MMDVM.ini auswählen muss.

Um also das NEXTION korrekt nutzen zu können muss man als erstes das gewünschte Layout (.TFT-Datei) auf dem Flash-Speicher des Displays ablegen.
Hierfür gibt es mehrere Varianten die hier im PDF bei hamdigitaal.nl von ON4TOP in englisch beschrieben werden.

Variante 1 – flashen/upload per serieller Schnittstelle oder GPIOs des Raspberry

Dies setzt voraus, dass man das Display bereits per serieller Schnittstelle (z.B. mit einem USB/Seriell-Adapter) ansprechen kann.

Ich habe mich aber für die zweite Variante entschieden, weil ich zunächst nur das reine Display testen wollte und den hardwareseitigen Anschluss noch nicht vorbereitet hatte.

Variante 2 – Upload der notwendigen .TFT-Datei (Layout) per Micro-SD Card

Die Firmware im Nextion ist so konfiguriert, dass sie Dateien die auf einer eingesteckten Micro-SD Karte liegen automatisch in den Flash-Speicher kopiert, wenn man die Karte eingelegt hat und lediglich die 5V Versorgungsspannung und GND anschließt.
Eine FAT32 formatierte Micro-SD Karte hatte ich zu liegen und musste nur noch das Layout meiner Wahl drauf kopieren. Nach dem einlegen der Micro-SD Karte und dem Anschluss der 5V-Leitung erscheint eine Statusanzeige, die über den Kopiervorgang informiert. Anschließend habe ich die micro-SD entfernt und die Versorgungsspannung getrennt. Beim nächsten Anlegen der Spannung sollte das MMDVM-Logo im Display erscheinen.

Hardwareseitiger Anschluss

Das ZUM Radio-MMDVM fo PI – Board belegt die komplette 40-polige Stiftleiste (GPIOs) des Raspberry PI3, weshalb man einen USB-TTL Adapter nutzen müsste, um das NEXTION Display anzusprechen. Zusätzlich bietet das Board aber die Möglichkeit ein I²C oder Serielles LCD Display direkt auf dem Board anzuschließen. Nach meinem Kenntnisstand wird I²C nicht vom Pi durcheschliffen, sondern in einem eigenen Prozessor auf dem Modem erzeugt. Die serielle Schnittstelle wird hingegen einfach durchgeschliffen. Bitte korrigiert mich, wenn ihr andere Informationen habt.

Ich habe also kurzerhand eine 5-polige Stiftleiste um einen Pin gekürzt und direkt auf das Board gelötet um das Nextion Display dann mit Verbindungskabeln an die serielle Schnittstelle anzuschließen. Fest verlöten wollte ich es nicht, da noch nicht feststeht wie weit entfernt das Display am Relais-Standort untergebracht wird. Mit den Verbindungskabeln ist man flexibel und kann schneller reagieren, was bei Tests hilfreich sein kann.

Das MMDVM-Pi Hat wird bereits mit der aktuellsten Firmware (MMDVM) ausgeliefert. Weshalb “Einstellungen in der Config.h” (siehe unten) und das erneute Flashen nur notwendig sind, wenn entweder eine neue MMDVM-Version erschienen ist oder das Display nicht arbeitet, weil der Parameter “#define SERIAL_REPEATER” vielleicht nicht aktiv war, als das Modem vor dem Versand geflasht und geprüft wurde.

Softwareseitige Konfiguration auf dem Raspberry PI3

  • Einstellungen am PI (raspi-config)

Nun muss man die serielle Schnittstelle korrekt konfigurieren: sie muss aktiviert sein, gleichzeit darf jedoch die “serielle Console” NICHT auf /dev/ttyAMA0 eingerichtet sein!

Sehr praktisch lässt sich dies über “raspi-config” erledigen. Falls dieses kleine Tool noch nicht auf dem Raspberry installiert ist, kann man es mit
sudo apt-get update
sudo apt-get install raspi-config

schnell und einfach installieren. Nun öffnet man raspi-config durch die Eingabe von sudo raspi-config auf der Console des PI.

Dann einmal ins Menü 5 Interfacing Options >> P6 Serial >>

Die Frage “Would you like a login shell to be accessible over serial?” beantwortet man mit <NEIN> um die serielle Console zu deaktivieren.
Die zweite Frage “Would you like the serial port hardware to be enabled?” wird mit <JA> beantwortet um trotzdem die serielle Schnittstelle zu aktivieren.

  • Einstellungen in der Config.h

Das Modem benötigt eine Firmware – diese heißt MMDVM. Im Falle des MMDVM-Pi Hat benötigen wir aber eine spezielle Version.

Englische Infos zum Update des MMDVM-Pi Hats findet man hier

Diese wird per GIT auf den PI kopiert und mit “make” vorbereitet. Hierzu gibt es bereits dutzende Anleitungen, weshalb ich darauf nicht weiter eingehe.
Anschließend müssen in der Datei “Config.h” die Parameter passend zum MMDVM-Pi Hat gesetzt werden.

In einem YAHOO Groups Eintrag werden folgende Parameter empfohlen, wobei ich keine Garantie geben kann, dass diese auch korrekt sind:

Hi,

For MMDVM-Pi with stm32f446:
the TCXO is internal, then comment:
// #define EXTERNAL_OSC 12000000
Not Arduino board:
// #define ARDUINO_DUE_ZUM_V10
If you want, you can enable LEDs:
#define ARDUINO_MODE_PINS
serial port repeater to connect a Nextion display:
#define SERIAL_REPEATER
and RSSI support:
#define SEND_RSSI_DATA

Der wichtigste Parameter ist jedoch

// Use the modem as a serial repeater for Nextion displays
#define SERIAL_REPEATER

welcher dafür sorgt, dass die USART2 Schnittstelle vom PI an die PINouts “LCD serial” des MMDVM-Pi Hats durchgereicht werden.

Hier die Parameter die ich in der Config.h von DO0RM gesetzt habe, wobei ich davon ausgehe, dass sie korrekt sind, da das Modem bei mir läuft:

#define ARDUINO_MODE_PINS     #soll die onboard LEDs auf dem MMDVM-Pi Hat aktivieren, diese zeigen z.B. an ob gerade PTT, DMR oder anderes aktiv sind

#define SERIAL_REPEATER     #leitet die seriellen Befehle per USART2 vom Pi an die “Serial LCD”-Pins vom MMDVM-Pi Hat weiter.

  • Einstellungen in der MMDVM.ini

Nun muss noch die MMDVM.ini des MMDVMHost angepasst werden.
Da das Modem selbst auch über die serielle Schnittstelle arbeitet und diese in der Config nur ein Mal angesprochen werden darf, haben die Entwickler hier einen speziellen Parameter vorgesehen: Port=modem
Port=modem dient also zur Angabe, dass der USART2 des MMDVM-PI Hat genutzt werden soll.

Hier die wichtigsten Parameter mit einer kurzen Erklärung:

[General]
Display=Nextion     #Damit wird der Host auf die Benutzung eines NEXTION-Displays eingestellt

[Modem]
Port=/dev/serial0     #Der PI3 bietet /dev/serial0 als Symlink zur seriellen Schnittstelle an und deshalb nutze ich diesen um das MMDVM-Pi Hat Modem anzusprechen

[Nextion]
Port=modem     #leitet den Port/alle Anfragen über die USART2 des MMDVM-Pi Hat an die serielle Schnittstelle des Modem (/dev/serial0) weiter
Brightness=50     #setzt die Helligkeit auf 50%
DisplayClock=1     #zeigt Datum/Uhrzeit im NEXTION Display an (Hilfreich um zu sehen ob das Display korrekt angesprochen wird)
UTC=0     #legt fest ob die Zeit als UTC oder mit einem Offset (Sommerzeit) angezeigt werden soll
#Screen Layout: 0=G4KLX 2=ON7LDS     #
ScreenLayout=2     #wählt das Layout von ON7LDS - hierzu muss die passende .TFT-Datei auf das Nextion geladen sein!
IdleBrightness=7     #dimmt das Display auf 7% wenn keine Aktivität/Änderung an Displayinhalten stattfindet

Im folgenden mal die komplette MMDVM.ini von DO0RM die soweit fehlerfrei zu laufen scheint:

[MMDVM.ini]

[General]
Callsign=DO0RM
Id=262070
Timeout=120
Duplex=1
# ModeHang=10
RFModeHang=10
NetModeHang=3
Display=Nextion
Daemon=0

[Info]
TXFrequency=438825000
RXFrequency=431225000
Power=10
Latitude=53.3878115
Longitude=12.6125915
Height=10
Location=Roebel/Mueritz JO63hj
Description=Mueritz-Multi-Mode Repeater
URL=www.do0rm.de

[Log]
# Logging levels, 0=No logging
DisplayLevel=2
FileLevel=1
FilePath=/opt/mmdvm
FileRoot=MMDVM

[CW Id]
Enable=1
Time=10
Callsign=DO0RM

[DMR Id Lookup]
File=DMRIds.dat
Time=24

[Modem]
# Port=/dev/ttyACM0
# Port=\\.\COM3
Port=/dev/serial0
TXInvert=1
RXInvert=1
PTTInvert=0
TXDelay=150
RXOffset=0
TXOffset=0
DMRDelay=0
RXLevel=100
TXLevel=74.575
RXDCOffset=0
TXDCOffset=0
RFLevel=100
# CWIdTXLevel=50
# D-StarTXLevel=50
# DMRTXLevel=50
# YSFTXLevel=50
# P25TXLevel=50
RSSIMappingFile=RSSI.dat
Trace=0
Debug=1

[UMP]
Enable=0
# Port=\\.\COM4
Port=/dev/ttyACM1

[D-Star]
Enable=1
Module=B
SelfOnly=0
AckReply=1
AckTime=750
ErrorReply=1
RemoteGateway=0
# ModeHang=10

[DMR]
Enable=1
Beacons=1
ColorCode=1
SelfOnly=0
EmbeddedLCOnly=0
DumpTAData=1
# Prefixes=234,235
# Slot1TGWhiteList=
# Slot2TGWhiteList=
CallHang=3
TXHang=4
# ModeHang=10

[System Fusion]
Enable=1
LowDeviation=0
SelfOnly=0
#DSQ=1
RemoteGateway=0
# ModeHang=10

[P25]
Enable=1
NAC=293
SelfOnly=0
OverrideUIDCheck=0
RemoteGateway=0
# ModeHang=10

[D-Star Network]
Enable=1
GatewayAddress=127.0.0.1
GatewayPort=20010
LocalPort=20011
# ModeHang=3
Debug=0

[DMR Network]
Enable=1
Address=master.up4dar.de
Port=62031
Jitter=300
# Local=62032
Password=passw0rd
# Options=
RSSI=0
Slot1=0
Slot2=1
# ModeHang=3
Debug=1

[System Fusion Network]
Enable=1
LocalAddress=127.0.0.1
LocalPort=3200
GatewayAddress=127.0.0.1
GatewayPort=4200
# ModeHang=3
Debug=0

[P25 Network]
Enable=1
GatewayAddress=127.0.0.1
GatewayPort=42020
LocalPort=32010
# ModeHang=3
Debug=0

[TFT Serial]
Port=modem
# Port=/dev/ttyAMA0
# Port=/dev/serial0
Brightness=50

[HD44780]
Rows=2
Columns=16

# For basic HD44780 displays (4-bit connection)
# rs, strb, d0, d1, d2, d3
Pins=11,10,0,1,2,3

# Device address for I2C
I2CAddress=0x20

# PWM backlight
PWM=0
PWMPin=21
PWMBright=100
PWMDim=16

DisplayClock=1
UTC=0

[Nextion]
Port=modem
# Port=/dev/ttyAMA0
Brightness=50
DisplayClock=1
UTC=0
#Screen Layout: 0=G4KLX 2=ON7LDS
ScreenLayout=2
IdleBrightness=7

[OLED]
Type=3
Brightness=0
Invert=0
Scroll=1

[LCDproc]
Address=localhost
Port=13666
#LocalPort=13667
DimOnIdle=0
DisplayClock=1
UTC=0

Wenn nun das Display an den “LCD-Serial”-Pins angeschlossen ist und der MMDVMHost gestartet wird, sollte das Display sofort Informationen anzeigen.
Werden keine Informationen angezeigt gilt es zunächst zu überprüfen, ob evtl. die RXd und TXd-Anschlüsse auf dem MMDVM-Pi Hat vertauscht wurden.
Ein Wechsel der genannten beiden Drähte kann im laufenden Betrieb erfolgen, da die Daten ja seriell übertragen werden, wird bei korrektem Anschluss sofort eine Aktualisierung des Displays stattfinden.
Wird auch nach dem Tausch der RX und TX-Leitung nichts auf dem Display angezeigt, muss wie oben unter “Einstellungen in der Config.h” beschrieben die Firmware (MMDVM_HS) mit dem korrigierten Parameter “#define SERIAL_REPEATER” nochmals auf das MMDVM-Pi Hat übertragen werden.
Auch das Auswerten der MMDVMHosts-Logdateien könnte hinweise bringen.
Sollte die Anzeige nun noch immer nicht arbeiten und lediglich das Hintergrundild anzeigen, ist es ratsam das Display an einem Windows-Rechner mit einem USB-Seriell-Adapter unter der Nutzung des Nextion-Editors zu prüfen.
Wenn die Verkabelung stimmt kann es nur noch an den Einstellungen in der Config.h der Firmware oder der MMDVM.ini des MMDVMHosts liegen.

Da ich mir selbst die Informationen über diverse Quellen zusammensuchen musste, hoffe ich mit dieser Übersicht dem ein oder anderen helfen zu können.
Ein ganz großes Dankeschön geht an dieser Stelle an die User in den Telegram-Gruppen BM-MMDVM & BM User BrandMeister sowie Markus (DL1GFM) und Mario(DC7JZB)!

||||| Like It 2 I Like It! |||||
2 Comments
  1. me@oe1jxs.at'

Schreibe einen Kommentar zu Jan Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.