Z21 mobile

Aus Digital Modellbahn

Wechseln zu: Navigation, Suche
Diese Seite enthält Bearbeitungen, die nicht zum Übersetzen freigegeben sind.

Sprachen:
Deutsch • ‎English


Eigenbau | Zentrale | Z21 mobile | XpressNet | LocoNet | Booster

Z21 logo.png

Beschreibung

Implementierung des UDP Protokoll von ROCO/Fleischmann Z21 LAN für den Arduino mit Ethernet Shield (Chipsatz W5100). Es ist damit möglich die Modelleisenbahn mit einem Smartphone, Tablet oder Computer über WLAN/Netzwerk zu steuern.
Anders als bei der Z21 von ROCO ist es möglich mehr als zehn Smartphones, Computer und Tablets zu nutzen!

 Die Software würde auch mit einem Arduino ENC28J60 Ethernet Shield und der 
UIPLibrary getestet, aber diese Library kann nicht mit mehreren IP's kommunizieren,
wodurch keine Z21 mobile Steuerung möglich ist!
Bitte verwenden sie nur das Ethernet Shield
mit dem W5100 Chipsatz, welches für 4,80€ bei zum Beispiel:
AliExpress bestellt werden kann (Lieferzeit: ca. 5 Wochen).

Z21 LAN Protokoll:

Arduino Z21 mobile Anschlussmöglichkeiten

Arduino Z21 DCC Zentrale (Multitalent)

Anschlüsse der Z21 DCC Zentrale

Die Arduino Z21 DCC Zentrale mit LAN, WLAN, Booster, S88N, XpressNet und LocoNet kann sehr flexibel auf den jeweiligen Einsatzbereich angepasst werden. Mit dieser ist es möglich zum Beispiel einen Adapter herzustellen um XpressNet Geräte am LocoNet anzuschließen (LocoNet to XpressNet Adapter).
Die Software, Hardware und Beschreibung zur Zentrale finden sie --> hier


Z21 - LocoNet-Adapter

Anschluss am LocoNet über Intellibox

"Z21 mobile" als LocoNet-Slave wie ein FRED oder DAISY Handregler nutzen:
Die App kann auch für den Betrieb an einer Intellibox genutzt werden. Aufgabe des Loconet Adapters ist es, die vom WLAN-Router empfangenen Signale, auf die Loconet-Schnittstelle der Intellibox zu übertragen. Nachdem die Zentrale der Lok einen Slot zugeordnet hat, kann über die App die Lok angefragt werden. Der Adapter schreibt dann direkt in diesen Slot die Steuerdaten der APP. Der im Adapter eingesetzte Arduino UNO (ATmega328p) hat ausreichend Speicher für 120 LocoNet Slots und zusätzlich 30 IP-Adressspeicher.

In der Softwareversion 2 wurde zusätzlich ein XpressNet Master Interface integriert. Es können so auch XpressNet-Geräte Steuerbefehle auf dem LocoNet erzeugen (z.B. für den Anschluss von LokMaus2/MultiMaus an eine Intellibox).

Hardware: Zur Verbindung mit dem LocoNet-Protokoll, wird die auch dort beschriebene Hardware benötigt.

Schaltplan:

Software:

 Hinweis: Bitte die neuere Software der Arduino Z21 DCC Zentrale,
mit deaktiviertem LocoNet Slotserver (Client-Modus) verwendet werden.

Die Software ist mit der Arduino IDE geschrieben.

Library:



Z21 - Slave am XpressNet

Anschluss am XpressNet über Roco Booster 10671, 10764 oder 10810

Mit einer LokMaus2 oder Multimaus als Master. Vergleichbare Steuerungen gibt es bereits von Lenz, diese nutzt aber eine kostenpflichtige iOS APP.

Hardware: Zur Verbindung mit dem XpressNet-Protokoll, wird die auch dort beschriebene Hardware benötigt. Die Netzwerkverbindung wird über ein W5100 Ethernet Shield hergestellt.

Software: Die Software ist mit der Arduino IDE geschrieben.

Hinweis: Bitte die Software der Arduino Z21 DCC Zentrale,
verwenden. Das XpressNet Interface erkennt ab v4.78 automatisch den Slave Mode.
Bug Fix: Anpassungen für Weichenbefehle der ROCO WLANMaus.

Library:


ROCO Wartungstool

Für die Z21 gibt es eine Wartungssoftware (Z21 Maintenance). Mit dieser können Loks vom PC gesteuert werden oder die IP-Adresse der Z21 geändert werden.
Beachte: Dieses Tool wird derzeit noch nicht von der Arduino Z21 Implementierung unterstützt!

Z21 Anwendungen

Z21 mobile - APP für Android und iOS (Gratis)

Z21 PC - kompatible Steuersoftware


Arduino Z21 Library

Die Software ist für die Arduino IDE geschrieben. Die Arduino Z21 Library ist in C++ geschrieben und kann mit verschiedenen Arduino's verwendet werden. Zur vereinfachten Kommunikation wurde eine Library erstellt, welche die Kommunikation mit dem Z21 LAN Protokoll realisiert. Die Library selbst stellt dabei keine Netzwerkkommunikation (LAN oder WLAN) her, sie dient lediglich dazu um die Empfangenen oder zu sendenden Daten zu Dekodieren bzw. zu Kodieren.


Download

Dokumentation

Änderungen: Version 1.5

  • CV Rückmeldung bei der Programmierung
  • Befehl für Ack Erkennung ergänzt

Version 1.3

  • Anpassung LAN_LOCONET_DETECTOR
  • Fehlerbeseitigung bei der LAN Prüfsumme
  • Anpassung LAN_LOCONET_DISPATCH
  • Anpassung POM Nachrichten (POM read byte)


Konfiguration

z21.h
Anzahl der Clients die gleichzeitig aktiv sind #define z21clientMAX 30
Anzahl (in 2 Sekunden Schritten) bis Deaktivierung eines Clients #define z21ActTimeIP 20
2s * 20 = 40 Sekunden



Anwendung und Funktionen

#include <z21.h> Einbinden der Library
z21Class z21; Erzeugen der Klasse
void setup()
z21.setPower(csNormal); Setzten des Gleisspannungszustand
void loop()


other public functions
void receive(uint8_t client, uint8_t *packet);
void setPower(byte state);
byte getPower();
unsigned long getz21BcFlag (byte flag);
LocoNet
void setLNDetector(byte *data, byte DataLen);
void setLNMessage(byte *data, byte DataLen, byte bcType, bool TX);
Basic Accessory (Zubehör Befehle)
void setTrntInfo(uint16_t Adr, bool State);
Lokomotiven
void setLocoStateFull (int Adr, byte steps, byte speed, byte F0, byte F1, byte F2, byte F3, bool bc);
S88
void setS88Data(byte *data);


C++ call back functions
void notifyz21EthSend(uint8_t client, uint8_t *data)
void notifyz21RailPower(uint8_t State)
LocoNet
void notifyz21LNdetector(uint8_t typ, uint16_t Adr)
uint8_t notifyz21LNdispatch(uint8_t Adr2, uint8_t Adr)
void notifyz21LNSendPacket(uint8_t *data, uint8_t length)
CV Programmierung
void notifyz21CVREAD(uint8_t cvAdrMSB, uint8_t cvAdrLSB)
uint8_t notifyz21CVWRITE(uint8_t cvAdrMSB, uint8_t cvAdrLSB, uint8_t value)
void notifyz21CVPOMWRITEBYTE(uint16_t Adr, uint16_t cvAdr, uint8_t value)
void notifyz21CVPOMREADBYTE(uint16_t Adr, uint16_t cvAdr)
Basic Accessory (Zubehör Befehle)
uint8_t notifyz21AccessoryInfo(uint16_t Adr)
void notifyz21Accessory(uint16_t Adr, bool state, bool active)
Lokomotiven
void notifyz21getLocoState(uint16_t Adr, bool bc)
void notifyz21LocoFkt(uint16_t Adr, uint8_t type, uint8_t fkt)
void notifyz21LocoSpeed(uint16_t Adr, uint8_t speed, uint8_t steps)
S88
void notifyz21S88Data()