IMG_20180209_074412

In questo articolo viene presentato l’hardware e il software adoperato per l’interconnessione DMR – XLX riguardante l’articolo precedente.

Alcuni si chiederanno “a che serve?”, ed e’ giusto, BM e DMR+ gia’ da tempo sono in grado di veicolare in tutta autonomia TG o Reflector della propria rete verso gli XLX Transcode.

Lo scopo del progetto e’ quello di interconnettere in tutta autonomia, qualunque porta del XLX verso qualunque TG o Reflector DMR. Si puo’ persino connettere ad esempio, da un lato XLX dall’altro un certo ID di Repeater o Utente.
Non serve? Forse e’ vero, ma per chi come me’ ama la radio e tutte le sue sfaccettature, prova piacere nel realizzare qualcosa di impensato e condividerlo con chi ha le mie stesse passioni, tra l’altro il sistema puo’ essere usato anche per interconnettere YSF con YSF o REF con REF etc etc.
Spiegato il motivo di questa sperimentazione, passiamo alla realizzazione.

Ho iniziato partendo dalla scelta dei componenti per comporre il sistema:

– Raspberry pi 2 B+ si tratta della versione a singolo core con 1Gb di RAM piu’ che sufficiente perche dovra’ al massimo gestire due slot Up-Down simultanei (non servono grandi server)
– 2 x Arduino Due
– Alimentatore 5V 1A quello per cellulare tanto il consumo totale e’ di soli 0,5A circa
– Cavetteria USB

Per il progetto ho usato i seguenti software:

Raspbian Lite download
MMDVMHost download
DMRGateway download
MMDVM Firmware per Arduino Due download

Si inizia dal download del SO Raspbian e ottenuto il file immagine lo si scrive su una microSD di sufficiente capienza.
Per l’operazione di scrittura su microSD io ho usato Win32DiskImager
Poi si passa al download del MMDVM Firmware.
Per quanto riguarda MMDVMHost e DMRGateway, e’ conveniente scaricarli direttamente dal Raspberry, seguite la procedura di installazione.

Inseriamo la microSD debitamente programmata nel suo slot, a questo punto abbiamo il Raspberry che si avvia in modalita’ terminal (dopo aver confermato il resize della microSD), il sistema ci chiede user e password.
Per chi non e’ pratico di file immagine per Raspberry, rendo noto i dati di accesso di default;

User: pi
PWD: raspberry

Iniziamo con la sequenza di installazione dei software necessari;

sudo su
apt-get update
(procedura veloce)
apt-get upgrade
il sistema vi chiedera’ conferma per gli aggiornamenti da installare, premete Y
(poi c’e’ da attendere……..)

Attenti che di default la tastiera e’ impostata con layout ENG e quindi usate il ” ” del tastierino numerico.

Con questi comandi abbiamo eseguito un aggiornamento del software Raspbian all’ultima release, continuiamo….

apt-get install git git-core
git clone https://github.com/g4klx/MMDVMHost.git
git clone https://github.com/g4klx/DMRGateway.git
cd /home/pi/MMDVMHost
make clean
make
……. attendiamo la fine della procedura
cd /home/pi/DMRGateway
make clean
make
……. attendiamo la fine della procedura
Poi con l’editor nano inseriamo all’interno del file di avvio automatico rc.local

nano /etc/rc.local

le seguenti righe prima della voce exit 0

attenzione che si tratta di singole linee tra “sudo” e “&”, quindi sono tre singole righe ma forse la formattazione che vedete ne rappresenta sei invece di tre.

sudo /home/pi/DMRGateway/DMRGateway /home/pi/DMRGateway/DMRGateway.ini &

sudo /home/pi/MMDVMHost/MMDVMHost /home/pi/MMDVMHost/MMDVM.ini &

sudo /home/pi/MMDVMHost/MMDVMHost /home/pi/MMDVMHost/MMDVMBM.ini &

Salviamo il file con CTRL-X e quindi torniamo al terminal.

Passiamo ora alle impostazioni dei file di configurazione dei software.
creiamo prima una copia del file MMDVM.ini al fine di disporre di due diverse configurazioni per il nostro MMDVMHost
attenzione, stessa nota di prima, singola riga

cp /home/pi/MMDVMHost/MMDVM.ini /home/pi/MMDVMHost/MMDVMBM.ini

Nella directory MMDVMHost risulteranno presenti appunto i due file con estensione .ini Editiamo il primo file .ini al fine di gestire il primo Modem DSP Arduino Due ovvero quello che sara’ usato per la connessione verso il nostro XLX transcode.

nano /home/pi/MMDVMHost/MMDVM.ini

Partendo dal file adatto alla nostra rete e impostato a mio nome, potrete cambiare i parametri di configurazione per adattarli alla vostra rete.
Questi sono i miei parametri;

[General]
Callsign=IW8ELN
Id=2228050
Timeout=180
Duplex=0
# ModeHang=10
RFModeHang=1
NetModeHang=1
Display=None
Daemon=0

[Info]
RXFrequency=435000000
TXFrequency=435000000
Power=0
Latitude=0.0
Longitude=0.0
Height=0
Location=Digiland Italia
Description=Crosslink DMR – DMR
URL=digilanditalia.wordpress.com

[Log]
# Logging levels, 0=No logging
DisplayLevel=1
FileLevel=2
FilePath=/home/pi/MMDVMHost
FileRoot=MMDVM

[CW Id]
Enable=0
Time=10
# Callsign=

[DMR Id Lookup]
File=/home/pi/MMDVMHost/DMRIds.dat
Time=24

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

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

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

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

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

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

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

[DMR Network]
Enable=1
Address=127.0.0.1
Port=62033
Jitter=300
Local=62032
Password=PASSWORD
# Options=
Slot1=0
Slot2=1
# ModeHang=3
Debug=0

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

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

[TFT Serial]
# Port=modem
Port=/dev/ttyAMA0
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=20

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

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

Fatto cio’ editeremo il secondo file .ini dedicato alla connessione verso BM2223

nano /home/pi/MMDVMHost/MMDVMBM.ini

Sempre partendo dal file adatto alla nostra rete e impostato a mio nome, potrete cambiare i parametri di configurazione per configurare la vostra rete.
Questi sono i miei parametri;

[General]
Callsign=IW8ELN
Id=2228050
Timeout=180
Duplex=0
# ModeHang=10
RFModeHang=1
NetModeHang=1
Display=None
Daemon=0

[Info]
RXFrequency=435000000
TXFrequency=435000000
Power=0
Latitude=0.0
Longitude=0.0
Height=0
Location=Digiland Italia
Description=CrossLink DMR – DMR
URL=digilanditalia.wordpress.com

[Log]
# Logging levels, 0=No logging
DisplayLevel=1
FileLevel=2
FilePath=/home/pi/MMDVMHost
FileRoot=MMDVMBM

[CW Id]
Enable=0
Time=10
# Callsign=

[DMR Id Lookup]
File=/home/pi/MMDVMHost/DMRIds.dat
Time=24

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

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

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

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

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

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

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

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

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

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

[TFT Serial]
# Port=modem
Port=/dev/ttyAMA0
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=20

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

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

Terminate le configurazioni dei file necessari all’avvio dei software MMDVMHost, passiamo alla configurazione di DMRGateway.

nano /home/pi/DMRGateway/DMRGateway.ini

Le impostazioni presenti nel mio file .ini, al fine di connettere la porta A 4001 del XLX113 Transcode, sono le seguenti;

[General]
Timeout=10
# RFTimeout=10
# NetTimeout=7
RptAddress=127.0.0.1
RptPort=62032
LocalAddress=127.0.0.1
LocalPort=62033
RuleTrace=0
Daemon=0
Debug=0

[Log]
# Logging levels, 0=No logging
DisplayLevel=1
FileLevel=2
FilePath=.
FileRoot=DMRGateway

[Voice]
Enabled=0
Language=en_GB
Directory=./Audio

[Info]
Enabled=0
RXFrequency=435000000
TXFrequency=435000000
Power=0
Latitude=0.0
Longitude=0.0
Height=0
Location=Digiland
Description=CrossLink DMR – DMR
URL=digilanditalia.wordpress.com

[XLX Network]
Enabled=1
File=/home/pi/DMRGateway/XLXHosts.txt
Port=62030
Password=passw0rd
# ReloadTime=60
# Local=3351
Slot=2
TG=22280
Base=4001
Startup=113
# Relink=10
Debug=2

# BrandMeister
[DMR Network 1]
Enabled=0
Name=BM
Address=44.131.4.1
Port=62031
# Local=3352
# Local cluster
TGRewrite=1,9,1,9,1
# Reflector TG on to slot 2 TG9
TGRewrite=2,9,2,9,1
# Reflector control command slot 2 94000->4000 to 95000->5000
PCRewrite=2,94000,2,4000,1001
# Echo on RF slot 1 TG9990 to network slot 1 9990
TypeRewrite=1,9990,1,9990
SrcRewrite=1,9990,1,9990,1
# Reflector status returns
SrcRewrite=2,4000,2,9,1001
# Pass all of the other private traffic on slot 1 and slot 2
PassAllPC=1
PassAllPC=2
Password=PASSWORD
Location=1
Debug=0

# DMR+
[DMR Network 2]
Enabled=0
Name=DMR+
Address=44.131.4.1
Port=55555
# Local=3352
# Reflector TG on to slot 2 TG8
TGRewrite=2,8,2,9,1
# Echo on slot 2 TG9990
TGRewrite=2,9990,2,9990,1
# Reflector control command slot 2 84000->4000 to 85000->5000
PCRewrite=2,84000,2,4000,1001
# Pass all of the other talk group traffic on slot 1 and slot 2
PassAllTG=1
PassAllTG=2
Password=PASSWORD
Location=0
Debug=0

# Local HBLink network
[DMR Network 3]
Enabled=0
Name=HBLink
Address=44.131.4.2
Port=55555
# Local=3352
# Local area TG on to slot 2 TG11
TGRewrite=2,11,2,11,1
Password=PASSWORD
Location=0
Debug=0

Alcune note a riguardo del file /home/pi/DMRGateway/XLXHosts.txt

Non tutti i reflector sono censiti, nel nostro caso XLX113 non e’ presente in lista e quindi e’ necessario aggiungerlo manualmente all’interno del file.
Se non risulta presente, il programma che e’ indirizzato alla connessione verso XLX, generera’ un errore che indica appunto la mancanza del corrispondente numero di reflector.

A questo punto abbiamo terminato l’installazione e la configurazione dei software necessari al sistema.
Spegniamo il raspberry;

sync
(chiudiamo eventuali file aperti)

shutdown -h now

Attendiamo che il led verde del raspy lampeggi tre volte per poi restare spento a conferma che il sistema e’ realmente chiuso.

Passiamo alla programmazione dei due moduli Arduino Due.
Per maggiore semplicita’ nella fase di programmazione, io ho usato un file immagine per Raspberry che ha gia’ tutto il necessario per programmare in modo corretto i vostri due Arduino due.
Si tratta del file preparato dal gruppo UTAH download
Scaricato il file e poi inserito in una NUOVA microSD usando la procedura gia descritta in precedenza (attenti a non usare la stessa microSD adoperata per realizzare il progetto).
Accertatevi di aver correttamente spento il Raspberry, togliete l’alimentazione e sostituite la microSD con quella appena creata avente il software UTAH.
Collegate mouse, tastiera, monitor e una delle due schede Arduino Due al Raspberry.
Date alimentazione e attendete la procedura di resize della microSD per poi vedere avviato il desktop UTAH.

A questo punto sul vostro PC Windows aprite il file MMDVM-master.zip ed estraete il contenuto.
Vi ritroverete una cartella che si chiama MMDVM-master che all’interno contiene i file necessari alla programmazione dei vostri Arduino Due.
Importante : Rinominate la cartella MMDVM-master in MMDVM (senza il -master)
Copiate la cartella MMDVM su una chiavetta USB e poi inseritela nel Raspberry.
Nella lista programmi del software UTAH, troverete “Arduino IDE”, lanciatelo.

IMG_20180209_101142
Nelle impostazioni del programma troverete i settaggi per il tipo di scheda Arduino da programmare, selezionate “/dev/ttyACM0 (Arduino Due (Programming Port))” state attenti che Arduino Due ha due porte USB, quella da utilizzare e la porta piu’ vicina al connettore di alimentazione ausiliaria.

IMG_20180209_101455Verificate se tutto e’ corretto e sempre da Arduino IDE, aprite l’unico file .ino presente all’interno della directory MMDVM posto nella chiavetta USB.

IMG_20180209_101511
Dopo aver aperto il file di programmazione, e’ necessario impostare alcune opzioni nella sezione “Config.h”,

IMG_20180209_101630

IMG_20180209_101644

IMG_20180209_101659

IMG_20180209_101707per semplicita’ vi allego i settaggi usati per i miei Arduino Due, vi basta copiarli.

/*
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#if !defined(CONFIG_H)
#define CONFIG_H
// Allow for the use of high quality external clock oscillators
// The number is the frequency of the oscillator in Hertz.
//
// The frequency of the TCXO must be an integer multiple of 48000.
// Frequencies such as 12.0 Mhz (48000 * 250) and 14.4 Mhz (48000 * 300) are suitable.
// Frequencies such as 10.0 Mhz (48000 * 208.333) or 20 Mhz (48000 * 416.666) are not suitable.
//
// For 12 MHz
// #define EXTERNAL_OSC 12000000
// For 12.288 MHz
// #define EXTERNAL_OSC 12288000
// For 14.4 MHz
// #define EXTERNAL_OSC 14400000
// For 19.2 MHz
// #define EXTERNAL_OSC 19200000
// Allow the use of the COS line to lockout the modem
// #define USE_COS_AS_LOCKOUT
// Use pins to output the current mode
// #define ARDUINO_MODE_PINS
// For the original Arduino Due pin layout
// #define ARDUINO_DUE_PAPA
// For the ZUM V1.0 and V1.0.1 boards pin layout
// #define ARDUINO_DUE_ZUM_V10
// For the SQ6POG board
// #define STM32F1_POG
// For the SP8NTH board
#define ARDUINO_DUE_NTH
// For ST Nucleo-64 STM32F446RE board
// #define STM32F4_NUCLEO_MORPHO_HEADER
// #define STM32F4_NUCLEO_ARDUINO_HEADER
// Use separate mode pins to switch external filters/bandwidth for example
// #define STM32F4_NUCLEO_MODE_PINS
// Pass RSSI information to the host
// #define SEND_RSSI_DATA
// Use the modem as a serial repeater for Nextion displays
// #define SERIAL_REPEATER
#endif

Si tratta tutto sommato di disattivare tutte le opzioni e impostare il Modem come “ARDUINO_DUE_NTH”

Ora vi basta cliccare sul tasto “Upload” e attendere che la programmazione termini.
Ripetete la procedura per il secondo Arduino Due, vi bastera’ sostituire quello appena programmato con l’altro a vostra disposizione e cliccare semplicemente su “Upload”.

Se tutto e’ andato bene, potrete chiudere UTAH facendo Shutdown dal software e quindi togliete l’alimentazione e sostituite la scheda microSD UTAH con quella precedentemente programmata.

Collegate i due Arduino Due, la tastiera, il monitor e la rete LAN al Raspberry, e avviate.
Se tutto e’ andato bene, dopo qualche minuto, vedrete scorrere delle scritte sul monitor che segnalano che i programmi sono avviati. A conferma della funzionalita’, vedrete i LED RX e TX dei due Arduino Due lampeggiare velocemente.
Ora vi resta solo da connettere tra di loro i due Modem DSP Arduino.

IMG_20180209_074432IMG_20180209_074442IMG_20180209_074451

Ecco le connessioni:

Arduino n° 1 PIN A0 > Arduino n° 2 PIN DAC0
Arduino n° 1 PIN DAC0 > Arduino n° 2 PIN A0
Arduino n° 1 PIN A8 > Arduino n° 2 PIN A11
Arduino n° 1 PIN A11 > Arduino n° 2 PIN A8

Si tratta di una configurazione classica in uso su tutti i ripetitori Crossband
RX > TX
TX > RX
SQL > PTT
PTT > SQL

ma qui non ci sono le radio.

Il sistema si presta a innumerevoli modifiche, le mie impostazioni sono fatte in base ai miei test funzionali e necessita’ personali, se vi fara’ piacere condividete le vostre, sara’ mia cura aggiungerle all’articolo e pubblicarle a vostro nome.

P.S. Ho testato la procedura di installazione anche su Raspberry pi 3 e vi confermo che funziona senza alcun problema.

Buon divertimento!

73 de IW8ELN Roberto.