Powrót do strony głównej

Integracja vintage'owego wyświetlacza w inteligentnym domu | ESP8266 i MQTT

Artykuł opisuje proces adaptacji vintage'owego kasowego wyświetlacza Wincor Nixdorf BA64-2 do użytku w systemach inteligentnego domu. Szczegółowo omówiono modyfikację sprzętową, implementację programową na ESP8266 i integrację z brokerem MQTT. Rozwiązanie pozwala wyświetlać krytyczne dane bez stałego dostępu do głównego interfejsu.

Vintage'owy kasowy wyświetlacz ożywa w inteligentnym domu: krok po kroku integracja
Advertisement 728x90

# Vintage'owy wyświetlacz kasowy w inteligentnym domu: integracja z ESP8266 i MQTT

Vintage'owe gazowyładowcze wyświetlacze z kasowych terminali to idealny materiał do tworzenia kompaktowych paneli informacyjnych w systemach inteligentnego domu. W tym artykule szczegółowo omówimy adaptację wyświetlacza Wincor Nixdorf BA64-2 do sterowania za pośrednictwem ESP8266 z integracją synchronizacji NTP i interfejsu MQTT. Rozwiązanie pozwala wyświetlać krytycznie ważne dane bez ciągłego dostępu do głównego interfejsu.

Analiza części sprzętowej i pinout

Wyświetlacz Wincor Nixdorf BA64-2 to dwuliniowy gazowyładowczy wskaźnik (20×2 znaki) w kompaktowej obudowie. Kluczowa trudność — brak dokumentacji dla niestandardowego złącza RJ45. Podczas wstępnego badania wykryiono następujące cechy:

  • Złącze fizycznie kompatybilne z Ethernet, ale elektrycznie niezgodne ze standardem
  • Obsługa dwóch interfejsów: USB i RS232 przez jedno złącze
  • Brak oznaczeń styków w datasheet

Po rozbiórce urządzenia i analizie płytki za pomocą woltomierza określono pinout:

Google AdInline article slot
  • Pin 1: +5V (zasilanie)
  • Pin 4: GND
  • Piny 2-3: USB Data±
  • Piny 6-8: sygnały RS232 (TxD/RxD)

Krytycznie ważne jest sprawdzenie napięć multimetrem przed podłączeniem, ponieważ standardowe adaptery mogą uszkodzić urządzenie. Oscyloskop potwierdził poziomy RS232 (-7/+7V) na pinach 6 i 8.

Modyfikacja dla bezpośredniego podłączenia TTL-Serial

Na płytce znaleziono układ ADM3232E — przetwornik TTL-RS232. Jego usunięcie daje dostęp do natywnego interfejsu TTL-Serial, co ułatwia integrację z nowoczesnymi mikrokontrolerami. Kolejność prac:

  • Zdemontuj układ za pomocą hot air przy 350°C
  • Oczyść pola kontaktowe z resztek lutu
  • Zidentyfikuj linie R2out/T2in (główny kanał transmisji)
  • Podłącz przewody do styków: VCC (3.3V), GND, TX, RX
  • Utrwal połączenia termoklejem

Bezpośrednie podłączenie do TTL-Serial eliminuje potrzebę konwerterów poziomów. Uwaga: wyświetlacz działa na 3.3V, więc zasilanie musi być zgodne. Dla stabilnej pracy wymagane jest opóźnienie 4 ms między bajtami — to kompensuje niską prędkość przetwarzania danych po stronie wyświetlacza.

Google AdInline article slot

Przykład obsługi danych:

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;
}

Implementacja programowa i integracja

Firmware oparty na Arduino Framework realizuje trzy kluczowe funkcje: połączenie Wi-Fi, klient MQTT i synchronizację NTP. Architektura obejmuje:

  • Automatyczne przełączanie między trybami (zegar/wiadomość informacyjna)
  • Obsługę sekwencji escape do sterowania kursorem
  • Wsparcie dla znaków UTF-8 (w tym °C)

Główne komponenty kodu:

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);
  }
}

Synchronizacja czasu odbywa się przez lokalny serwer NTP. Przy starcie system czeka 4 sekundy na uzyskanie czasu:

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

Tryb wiadomości informacyjnej kończy się automatycznie po 60 sekundach, wracając do wyświetlania zegara. To zapobiega blokadzie głównego interfejsu.

Praktyczne zastosowanie w systemach inteligentnego domu

Integracja wyświetlacza z istniejącymi ekosystemami rozwiązuje dwa zadania:

  • Bieżący monitoring kluczowych parametrów — temperatura kotła, wilgotność w piwnicy, status paneli słonecznych
  • Powiadomienia bez smartfona — wyświetlanie komunikatów systemowych („Wyciek gazu”, „Brama otwarta”)

Przykład użycia do monitorowania temperatury:

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

System jest skalowalny: kilka wyświetlaczy może pokazywać różne informacje, subskrybując odpowiednie tematy. Aby rozszerzyć funkcjonalność, wystarczy zmodyfikować obsługę wiadomości MQTT, dodając wsparcie dla nowych poleceń.

Co ważne

  • Sprawdzenie napięć obowiązkowe: przed podłączeniem zmierz wszystkie styki — standardowe adaptery mogą uszkodzić wyświetlacz.
  • Opóźnienie transmisji kluczowe: bez delay(4) między bajtami dochodzi do utraty danych z powodu różnicy prędkości przetwarzania.
  • Aktualizacje OTA — niezbędne: zostaw możliwość przeprogramowania bez fizycznego dostępu do urządzenia.
  • Sekwencje escape: używaj kodów sterujących z datasheet do precyzyjnego pozycjonowania kursora.
  • Lokalny serwer NTP: zewnętrzne serwery mogą być niedostępne, co zakłóci pracę zegara.

— Editorial Team

Advertisement 728x90

Czytaj dalej