Zurück zur Startseite

Integration eines Vintage-Displays in ein Smart Home | ESP8266 und MQTT

Der Artikel beschreibt den Prozess der Anpassung eines Vintage-Kassendisplays Wincor Nixdorf BA64-2 für den Einsatz in Smart-Home-Systemen. Hardware-Modifikation, Software-Implementierung auf ESP8266 und Integration mit einem MQTT-Broker werden detailliert besprochen. Die Lösung ermöglicht die Anzeige kritischer Daten ohne ständigen Zugriff auf die Hauptoberfläche.

Vintage-Kassendisplay erwacht in einem Smart Home zum Leben: schrittweise Integration
Advertisement 728x90

# Vintage-Kassendisplay im Smart Home: Integration mit ESP8266 und MQTT

Vintage-Gasentladungsanzeigen aus Kassen eignen sich hervorragend als Material für kompakte Informationspaneele in Smart-Home-Systemen. Dieser Artikel beschreibt die Anpassung des Wincor Nixdorf BA64-2 Displays für die Steuerung über ESP8266 mit NTP-Synchronisation und Integration einer MQTT-Schnittstelle. Die Lösung ermöglicht die Anzeige kritischer wichtiger Daten ohne ständigen Zugriff auf die Hauptoberfläche.

Hardware-Analyse und Pinbelegung

Das Wincor Nixdorf BA64-2 Display ist ein zweizeiliger Gasentladungsindikator (20×2 Zeichen) in einem kompakten Gehäuse. Die größte Herausforderung ist das Fehlen von Dokumentationen für den nicht standardmäßigen RJ45-Stecker. Die erste Inspektion ergab folgende Merkmale:

  • Der Stecker ist physisch mit Ethernet kompatibel, aber elektrisch nicht konform
  • Unterstützt zwei Schnittstellen: USB und RS232 über einen einzigen Stecker
  • Keine Pin-Markierungen im Datenblatt

Nach Demontage des Geräts und Analyse der Platine mit einem Multimeter wurde die Pinbelegung ermittelt:

Google AdInline article slot
  • Pin 1: +5V (Stromversorgung)
  • Pin 4: GND
  • Pins 2-3: USB Data±
  • Pins 6-8: RS232-Signale (TxD/RxD)

Es ist absolut entscheidend, vor dem Anschluss die Spannungen mit einem Multimeter zu prüfen, da Standardadapter das Gerät beschädigen können. Ein Oszilloskop bestätigte RS232-Pegel (-7/+7V) an den Pins 6 und 8.

Modifikation für direkte TTL-Seriell-Verbindung

Auf der Platine wurde der ADM3232E-Chip – ein TTL-RS232-Wandler – gefunden. Das Entfernen ermöglicht den Zugriff auf die native TTL-Seriell-Schnittstelle und vereinfacht die Integration mit modernen Controllern. Die Schritte sind:

  • Chip mit einer Heißluftpistole bei 350°C desolderen
  • Kontaktflächen von Lötresten reinigen
  • Die Leitungen R2out/T2in identifizieren (Hauptübertragungskanal)
  • Drähte an die Pads löten: VCC (3,3V), GND, TX, RX
  • Verbindungen mit Heißkleber sichern

Die direkte TTL-Seriell-Verbindung macht Pegelwandler überflüssig. Hinweis: Das Display arbeitet mit 3,3V, daher muss die Versorgung passen. Für stabilen Betrieb ist eine Verzögerung von 4 ms zwischen den übertragenen Bytes erforderlich – das gleicht die niedrige Datenverarbeitungsgeschwindigkeit des Displays aus.

Google AdInline article slot

Beispiel für Datenverarbeitung:

bool outs = false;
void outString(char * buf, int length){
  if(outs) return;
  outs = true;
  for(int i=0; i< length; i++){
    Serial.write(buf[i]);
    delay(4);
  }
  outs = false;
}

Software-Implementierung und Integration

Die Firmware basiert auf dem Arduino Framework und implementiert drei Schlüsselfunktionen: Wi-Fi-Verbindung, MQTT-Client und NTP-Synchronisation. Die Architektur umfasst:

  • Automatischen Wechsel zwischen Modi (Uhr/Infomeldung)
  • Behandlung von Escape-Sequenzen für Cursorsteuerung
  • UTF-8-Zeichenunterstützung (einschließlich °C)

Wichtige Code-Komponenten:

Google AdInline article slot
#define CLEAR_SCREEN "\x1B[2J"
#define LINE1_0 "\x1B[1;0H"
#define INFO_PERIOD 60000

void drawClock(){
  time_t dtm = time(nullptr) + 10800; // UTC+3
  DateTime now = DateTime(dtm);
  char buf[21];
  sprintf(buf, "\x1B[1;0H%02d.%02d.%04d %02d:%02d:%02d",
    now.day(), now.month(), now.year(),
    now.hour(), now.minute(), now.second());
  outString(buf, strlen(buf));
}

void msg_callback(char* topic, byte* payload, unsigned int length){
  if(!strncmp((char *)payload, "line1 ", 6)){
    clock_mode = false;
    info_timer = millis();
    outString(LINE1_0, strlen(LINE1_0));
    outString((char*)&payload[6], length - 6);
  }
}

Die Zeitsynchronisation erfolgt über einen lokalen NTP-Server. Beim Start wartet das System bis zu 4 Sekunden auf die Zeiterfassung:

void TimeSetup(){
  configTime(0, 0, "ntpserver.home");
  int cnt = 4;
  while (!time(nullptr) && cnt > 0) {
    delay(1000);
    cnt--;
  }
}

Der Infomeldungsmodus endet automatisch nach 60 Sekunden und kehrt zur Uhranzeige zurück. Das verhindert eine Blockade der Hauptoberfläche.

Praktische Anwendung in Smart-Home-Systemen

Die Integration des Displays in bestehende Ökosysteme deckt zwei zentrale Bedürfnisse ab:

  • Echtzeit-Überwachung kritischer Parameter — Kesseltemperatur, Kellerfeuchtigkeit, Solaranlagenstatus
  • Benachrichtigungen ohne Smartphone — Systemmeldungen ("Gasleck", "Tor offen")

Beispiel für Temperaturüberwachung:

mosquitto_pub -h localhost -t "ba64/line1" -m "kotel 63.28/55.43\xC2\xB0C"

Das System ist skalierbar: Mehrere Displays können unterschiedliche Informationen anzeigen, indem sie sich an spezifische Topics abonnieren. Um die Funktionalität zu erweitern, muss lediglich der MQTT-Nachrichten-Handler für neue Befehle angepasst werden.

Wichtige Hinweise

  • Spannungsprüfungen sind obligatorisch: Alle Pins vor dem Anschluss messen – Standardadapter können das Display beschädigen.
  • Übertragungsverzögerung ist entscheidend: Ohne delay(4) zwischen Bytes kommt es zu Datenverlusten aufgrund unterschiedlicher Verarbeitungsgeschwindigkeiten.
  • OTA-Updates sind essenziell: Die Möglichkeit zum Reflashen ohne physischen Zugriff beibehalten.
  • Escape-Sequenzen: Steuercodes aus dem Datenblatt für präzise Cursorpositionierung verwenden.
  • Lokaler NTP-Server: Externe Server können ausfallen und die Uhrfunktion stören.

— Editorial Team

Advertisement 728x90

Weiterlesen