Volver al inicio

Integración de una pantalla vintage en un hogar inteligente | ESP8266 y MQTT

El artículo describe el proceso de adaptación de una pantalla de caja registradora vintage Wincor Nixdorf BA64-2 para su uso en sistemas de hogar inteligente. Se discuten en detalle la modificación de hardware, la implementación de software en ESP8266 e integración con un broker MQTT. La solución permite mostrar datos críticos sin acceso constante a la interfaz principal.

Pantalla de caja registradora vintage cobra vida en un hogar inteligente: integración paso a paso
Advertisement 728x90

# Pantalla de caja registradora vintage en un hogar inteligente: Integración con ESP8266 y MQTT

Las pantallas de descarga de gas vintage de las cajas registradoras son material perfecto para crear paneles de información compactos en sistemas de hogar inteligente. Este artículo detalla la adaptación del display Wincor Nixdorf BA64-2 para su control mediante ESP8266 con sincronización NTP e integración de interfaz MQTT. La solución permite mostrar datos de importancia crítica sin necesidad de acceso constante a la interfaz principal.

Análisis de hardware y pinout

El display Wincor Nixdorf BA64-2 es un indicador de descarga de gas de dos líneas (20×2 caracteres) en una carcasa compacta. El principal desafío es la falta de documentación para el conector RJ45 no estándar. La inspección inicial reveló las siguientes características:

  • El conector es físicamente compatible con Ethernet, pero eléctricamente no conforme
  • Soporta dos interfaces: USB y RS232 a través de un solo conector
  • No hay marcas de pines en la hoja de datos

Tras desmontar el dispositivo y analizar la placa con un voltímetro, se determinó el siguiente pinout:

Google AdInline article slot
  • Pin 1: +5V (alimentación)
  • Pin 4: GND
  • Pines 2-3: USB Data±
  • Pines 6-8: Señales RS232 (TxD/RxD)

Es fundamental comprobar los voltajes con un multímetro antes de conectar, ya que los adaptadores estándar pueden dañar el dispositivo. Un osciloscopio confirmó los niveles RS232 (-7/+7V) en los pines 6 y 8.

Modificación para conexión serie TTL directa

En la placa se encontró el chip ADM3232E, un convertidor TTL-RS232. Al retirarlo, se accede a la interfaz serie TTL nativa, simplificando la integración con controladores modernos. Los pasos son:

  • Desoldar el chip con una pistola de aire caliente a 350°C
  • Limpiar las pastillas de contacto de residuos de soldadura
  • Identificar las líneas R2out/T2in (canal principal de transmisión)
  • Conectar cables a las pastillas: VCC (3.3V), GND, TX, RX
  • Fijar las conexiones con pegamento caliente

La conexión serie TTL directa elimina la necesidad de convertidores de nivel. Nota: el display funciona a 3.3V, por lo que la alimentación debe coincidir. Para un funcionamiento estable, se requiere un retraso de 4 ms entre bytes transmitidos; esto compensa la baja velocidad de procesamiento del display.

Google AdInline article slot

Ejemplo de manejo de datos:

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

Implementación de software e integración

El firmware, basado en el Framework de Arduino, implementa tres funciones clave: conexión Wi-Fi, cliente MQTT y sincronización NTP. La arquitectura incluye:

  • Conmutación automática entre modos (reloj/mensaje de información)
  • Manejo de secuencias de escape para control del cursor
  • Soporte para caracteres UTF-8 (incluido °C)

Componentes principales del código:

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

La sincronización de hora se realiza mediante un servidor NTP local. Al inicio, el sistema espera hasta 4 segundos para obtener la hora:

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

El modo de mensaje de información finaliza automáticamente tras 60 segundos, volviendo al display de reloj. Esto evita bloquear la interfaz principal.

Aplicación práctica en sistemas de hogar inteligente

Integrar el display en ecosistemas existentes cubre dos necesidades clave:

  • Monitoreo en tiempo real de parámetros críticos — temperatura de la caldera, humedad del sótano, estado del panel solar
  • Notificaciones sin smartphone — mensajes del sistema ("Fuga de gas", "Puerta abierta")

Ejemplo para seguimiento de temperatura:

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

El sistema es escalable: varios displays pueden mostrar información diferente suscribiéndose a temas específicos. Para ampliar la funcionalidad, basta con modificar el manejador de mensajes MQTT para soportar nuevos comandos.

Puntos clave

  • Comprobaciones de voltaje obligatorias: mide todos los pines antes de conectar; los adaptadores estándar pueden dañar el display.
  • Retraso en transmisión crítico: sin delay(4) entre bytes, se produce pérdida de datos por diferencias en velocidad de procesamiento.
  • Actualizaciones OTA imprescindibles: conserva la capacidad de reflashear sin acceso físico al dispositivo.
  • Secuencias de escape: usa códigos de control de la hoja de datos para posicionamiento preciso del cursor.
  • Servidor NTP local: los servidores externos pueden estar no disponibles, interrumpiendo el reloj.

— Editorial Team

Advertisement 728x90

Leer después