Z21 Arduino Zentrale (ESP32): Unterschied zwischen den Versionen

Aus Digital Modellbahn
(35 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
 
{{Vorlage:Navigationsleiste_Zentrale_Versionen}}
 
{{Vorlage:Navigationsleiste_Zentrale_Versionen}}
 
[[Datei:Z21_logo.png|120px|right|link=Z21_mobile]]
 
[[Datei:Z21_logo.png|120px|right|link=Z21_mobile]]
 +
 +
<big><big>'''IN DER ENTWICKLUNG - STILL UNDER DEVELOPMENT!'''</big></big>
 +
<big><big>First Version with Central Station v4.91 available for testing!</big></big>
  
 
== Beschreibung ==
 
== Beschreibung ==
 
[[Datei:ESP32_Pinout.jpg|thumb|200px|ESP32 Anschlussbelegung]]
 
[[Datei:ESP32_Pinout.jpg|thumb|200px|ESP32 Anschlussbelegung]]
[[Datei:Z21pg_ESP_Aufbau.jpg|thumb|200px|Schematischer Aufbau ESP32 Zentrale]]
+
[[Datei:Z21pg_ESP32_LocoNet-Client.jpg|thumb|200px|ESP32 Zentrale als LocoNet Client für Intellibox]]
Um die Zentrale zukunftssicher zu gestalten wurde ein neuer Aufbau mit einem ESP32 Modul, welches einen DualCore Prozessor mit 240 MHz besitzt gewählt. Da die Funktionen für Xpressnet, aufgrund von Hardware Inkompatibilität und LocoNet aufgrund der Hardwarezusammenhänge in der Bibliothek nicht auf dem ESP32 umgesetzt werden können, wurde für diese der Arduino UNO/NANO also Co-Prozessor eingesetzt. Die Kommunikation zwischen den beiden Prozessoren erfolgt über das I2C Protokoll. Bei der Koppelung wurde ein Level-Shifter eingesetzt um die unterschiedlichen Spannungen des ESP32(3,3 Volt) und UNO/NANO (5,0 Volt) auszugleichen.
+
Um die Zentrale zukunftssicher zu gestalten wird an einem neuen Aufbau mit einem ESP32 Modul gearbeitet!
 +
Der ESP32 besitzt auch für zukünftige Anwendungen einen leistungsfähigen DualCore Prozessor mit 240 MHz und hat auch wie sein Vorgänger, das ESP8266, eine WiFi-Schnittstelle integriert. Dies ermöglich den Aufbau der DCC Zentrale mit nur einem Microcontroller der alle Funktionen beinhaltet. Damit bietet der ESP32 eine gute und leistungsfähig alternative zu der Realisierung mittels des [[Z21_Arduino_Zentrale_(Atmega2560) | Arduino MEGA]] und dabei muss nur auf die LAN Schnittstelle (Ethernet) verzichtet werden.
  
 
'''Funktionsumfang:'''
 
'''Funktionsumfang:'''
 +
:* DCC Ausgang mit RailCom nach NMRA
 
:* WLAN-Interface (integriert)
 
:* WLAN-Interface (integriert)
:* LAN-Interface (W5100)
+
:* [[S88N]] ''(noch nicht getestet)''
:* [[S88N]]
+
:* interner Booster (TLE5206 oder L6203)
:* interner Booster
 
 
:* externer Booster (ROCO oder CDE)
 
:* externer Booster (ROCO oder CDE)
:* global RailCom Detector
+
:* <s>global RailCom Detector</s> ''(derzeit noch kein Support)''
:* [[XpressNet]] (Co-Prozessor)
+
:* <s>[[XpressNet]]</s> ''(derzeit noch kein Support)''
:* [[Loconet|LocoNet]] (Co-Prozessor)
+
:* [[Loconet|LocoNet]] für ESP32 (LocoNet2 Bibliothek)
 +
:* <s>Temperatursensor Dallas DS18B20</s> ''(derzeit noch kein Support)''
 +
 
 +
Erste lauffähige Umsetzung ist ab der v4.91 integriert. Leider sind immer noch kleinere Probleme gerade mit den Schreiben von Werten im EEPROM vorhanden, aber die Grundfunktion sind bereits Lauffähig. Erste Test wurden als unter dem Einsatz als abgespekte Zentrale vollzogen. Zusätzlich wurde ein erfolgreicher Client Test am LocoNet durchgeführt. So kann mit nur einem simplen LocoNet Interface am ESP32 ein Adapter für zum Beispiel eine IntelliBox zur Verwendung der Z21 App aufgebaut werden.
  
 
== Pinbelegung ESP32 ==
 
== Pinbelegung ESP32 ==
Zeile 24: Zeile 31:
 
! Arduino Pin !! Funktion !! aktiv Pegel (HIGH/LOW)
 
! Arduino Pin !! Funktion !! aktiv Pegel (HIGH/LOW)
 
|-
 
|-
| GPIO1 (TX) || Debugging || Serial
+
| GPIO1 (TX1) || Debugging || Serial1
|-
 
| GPIO3 (RX) || Debugging || Serial
 
|-
 
| GPIO21 (SDA) || Co-Prozessor || I2C
 
|-
 
| GPIO22 (SCL) || Co-Prozessor || I2C
 
 
|-
 
|-
| GPIO36 || Enable Co-Prozessor || LOW = Data to Send
+
| GPIO3 (RX1) || Debugging || Serial1
 
|-
 
|-
| GPIO16 (RX) || RailCom Detector RX || Serial
+
| GPIO19  || LocoNet RX || input
 
|-
 
|-
| GPIO19 (MISO) || Ethernet-Shield || W5100/W5500
+
| GPIO21  || LocoNet TX || output
 
|-
 
|-
| GPIO23 (MOSI) || Ethernet-Shield || W5100/W5500
+
| GPIO18 || XpressNet RX || Software Serial
 
|-
 
|-
| GPIO33 (CS) || Ethernet-Shield || W5100/W5500
+
| GPIO5 || XpressNet TX || Software Serial
 
|-
 
|-
| GPIO18 (CLK) || Ethernet-Shield || W5100/W5500
+
| GPIO17 || XpressNet S+R || output
 
|-
 
|-
| GPIO5 (RST) || Ethernet-Shield || W5100/W5500
+
| ?? (RX2) || RailCom Detector RX || Serial2
 
|-
 
|-
| ?? || DCC || HIGH/LOW
+
| GPIO2 || DCC || HIGH/LOW
 
|-
 
|-
| ?? || DCC S88/LocoNet || output
+
| GPIO33 || NDCC (Booster intern) || output
 
|-
 
|-
| ?? || NDCC (Booster intern) || output
+
| GPIO16 || DCC S88/LocoNet || output
 
|-
 
|-
| ?? || SHORT (Booster extern) || LOW
+
| GPIO4 || SHORT (Booster extern) || LOW
 
|-
 
|-
| ?? || GO/STOP (Booster extern) || HIGH
+
| GPIO15 || GO/STOP (Booster extern) || HIGH
 
|-
 
|-
| ?? || Taster/Reset || LOW
+
| GPIO36 || Taster/Reset || LOW
 
|-
 
|-
| ?? || DCC status LED || HIGH
+
| GPIO32 || DCC status LED || HIGH
 
|-
 
|-
| ?? || S88 Data in || input
+
| GPIO13 || S88 Data in || input
 
|-
 
|-
| ?? || S88 Clock || output
+
| GPIO12 || S88 Clock || output
 
|-
 
|-
| ?? || S88 PS/Load || output
+
| GPIO14 || S88 PS/Load || output
 
|-
 
|-
| ?? || S88 Reset || output
+
| GPIO27 || S88 Reset || output
 
|-
 
|-
| ?? || Relais Programmiergleis (PROG) || HIGH/LOW
+
| GPIO25 || Relais Programmiergleis (PROG) || HIGH/LOW
 
|-
 
|-
| ?? || Current Sensor || Programmiergleis (ACK)
+
| GPIO39 || Current Sensor || Programmiergleis (ACK)
 
|-
 
|-
 
| ?? || Eingangsspannung || Main VCC <-> [100k]<-> Sence (A10) <-> [4,7k] <-> GND
 
| ?? || Eingangsspannung || Main VCC <-> [100k]<-> Sence (A10) <-> [4,7k] <-> GND
 
|-
 
|-
| ?? || interner Temperatur Sensor || +5V <-> [46k] <-> Sence (A11) <-> [15k NTC-Widerstand] <-> GND
+
| ?? || interner Temperatur Sensor || Dallas DS18B20
 
|}
 
|}
  
== Pinbelegung Co-Prozessor (UNO/NANO) ==
+
== Patch für den ESP-Core ==
Hier eine Auflistung der Pinbelegung für den ATmega328p im Sketch "Arduino Z21 Zentrale-CO"
+
Im ESP32 Core gibt es ein Problem mit dem "timerAlarmWrite()" der aus Platzgründen zur Laufzeit aus dem Code-Cache entfernt wird! Dann stürzt der ESP beim Nächsten Interrupt ab. Zur Behebung ist dieser Patch notwendig:
{| class="wikitable sortable" border="1" cellspacing="0" cellpadding="7"
+
[https://github.com/espressif/arduino-esp32/commit/be77bd4e27228e10cf7132668f0f1fd2172f4a37 Resolve crash with timer interrupt functions called from ISR (#4684)]
|-
 
! Arduino Pin !! MCU Pin !! Funktion !! aktiv Pegel (HIGH/LOW)
 
|-
 
| 0 || 2 PD0(RXD) || XpressNet_RX [oder WLAN_RX] || Serial
 
|-
 
| 1 || 3 PD1(TXD) || XpressNet_TX [oder WLAN_TX] || Serial
 
|-
 
| 7 || 13 PD7(AIN1) || LocoNet_TX (out) || HIGH
 
|-
 
| 8 || 14 PB0(ICP) || LocoNet_RX (in) || HIGH/LOW
 
|-
 
| 9 || 15 PB1(OC1A) || XpressNet_S/R || HIGH/LOW
 
|-
 
| A3 || 26 PC3(ADC3) || EN - DataReadyToSend || LOW
 
|-
 
| A4 || 27 PC4(ADC4/SDA) || Master-Prozessor || I2C
 
|-
 
| A5 || 28 PC5(ADC5/SCL) || Master-Prozessor || I2C
 
|}
 

Version vom 7. Juli 2021, 17:19 Uhr

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

Arduino UNO Version | Arduino MEGA Version | ESP8266 (WeMos D1 mini) Version | ESP32 Version | Sanguino Version

Z21 logo.png
IN DER ENTWICKLUNG - STILL UNDER DEVELOPMENT!
First Version with Central Station v4.91 available for testing!

Beschreibung

ESP32 Anschlussbelegung
ESP32 Zentrale als LocoNet Client für Intellibox

Um die Zentrale zukunftssicher zu gestalten wird an einem neuen Aufbau mit einem ESP32 Modul gearbeitet! Der ESP32 besitzt auch für zukünftige Anwendungen einen leistungsfähigen DualCore Prozessor mit 240 MHz und hat auch wie sein Vorgänger, das ESP8266, eine WiFi-Schnittstelle integriert. Dies ermöglich den Aufbau der DCC Zentrale mit nur einem Microcontroller der alle Funktionen beinhaltet. Damit bietet der ESP32 eine gute und leistungsfähig alternative zu der Realisierung mittels des Arduino MEGA und dabei muss nur auf die LAN Schnittstelle (Ethernet) verzichtet werden.

Funktionsumfang:

  • DCC Ausgang mit RailCom nach NMRA
  • WLAN-Interface (integriert)
  • S88N (noch nicht getestet)
  • interner Booster (TLE5206 oder L6203)
  • externer Booster (ROCO oder CDE)
  • global RailCom Detector (derzeit noch kein Support)
  • XpressNet (derzeit noch kein Support)
  • LocoNet für ESP32 (LocoNet2 Bibliothek)
  • Temperatursensor Dallas DS18B20 (derzeit noch kein Support)

Erste lauffähige Umsetzung ist ab der v4.91 integriert. Leider sind immer noch kleinere Probleme gerade mit den Schreiben von Werten im EEPROM vorhanden, aber die Grundfunktion sind bereits Lauffähig. Erste Test wurden als unter dem Einsatz als abgespekte Zentrale vollzogen. Zusätzlich wurde ein erfolgreicher Client Test am LocoNet durchgeführt. So kann mit nur einem simplen LocoNet Interface am ESP32 ein Adapter für zum Beispiel eine IntelliBox zur Verwendung der Z21 App aufgebaut werden.

Pinbelegung ESP32

Hier eine Auflistung der Pinbelegung für den ESP32 im Sketch "Arduino Z21 Zentrale"

Arduino Pin Funktion aktiv Pegel (HIGH/LOW)
GPIO1 (TX1) Debugging Serial1
GPIO3 (RX1) Debugging Serial1
GPIO19 LocoNet RX input
GPIO21 LocoNet TX output
GPIO18 XpressNet RX Software Serial
GPIO5 XpressNet TX Software Serial
GPIO17 XpressNet S+R output
?? (RX2) RailCom Detector RX Serial2
GPIO2 DCC HIGH/LOW
GPIO33 NDCC (Booster intern) output
GPIO16 DCC S88/LocoNet output
GPIO4 SHORT (Booster extern) LOW
GPIO15 GO/STOP (Booster extern) HIGH
GPIO36 Taster/Reset LOW
GPIO32 DCC status LED HIGH
GPIO13 S88 Data in input
GPIO12 S88 Clock output
GPIO14 S88 PS/Load output
GPIO27 S88 Reset output
GPIO25 Relais Programmiergleis (PROG) HIGH/LOW
GPIO39 Current Sensor Programmiergleis (ACK)
?? Eingangsspannung Main VCC <-> [100k]<-> Sence (A10) <-> [4,7k] <-> GND
?? interner Temperatur Sensor Dallas DS18B20

Patch für den ESP-Core

Im ESP32 Core gibt es ein Problem mit dem "timerAlarmWrite()" der aus Platzgründen zur Laufzeit aus dem Code-Cache entfernt wird! Dann stürzt der ESP beim Nächsten Interrupt ab. Zur Behebung ist dieser Patch notwendig: Resolve crash with timer interrupt functions called from ISR (#4684)