返回首页

将复古显示器集成到智能家居 | ESP8266 和 MQTT

这篇文章描述了将复古收银机显示器 Wincor Nixdorf BA64-2 改造成智能家居系统的过程。详细讨论了硬件修改、在 ESP8266 上的软件实现以及与 MQTT broker 的集成。该解决方案允许在不持续访问主界面的情况下显示关键数据。

复古收银机显示器在智能家居中复活:一步步集成
Advertisement 728x90

# 智能家居中的复古收银机显示屏:ESP8266 与 MQTT 集成

复古收银机气体放电显示屏非常适合制作智能家居系统中紧凑的信息面板。本文详细介绍了如何将 Wincor Nixdorf BA64-2 显示屏适配到 ESP8266 上,实现 NTP 同步和 MQTT 接口集成。该方案允许在无需持续访问主界面时显示关键重要数据。

硬件分析与引脚定义

Wincor Nixdorf BA64-2 显示屏是一种紧凑外壳的双行气体放电指示器(20×2 字符)。主要难点是非标准 RJ45 连接器缺少文档。初步检查发现以下特性:

  • 连接器物理上与以太网兼容,但电气上不兼容
  • 通过单个连接器支持两种接口:USB 和 RS232
  • 数据表中无引脚标记

拆卸设备并用万用表分析主板后,确定了以下引脚定义:

Google AdInline article slot
  • 引脚 1:+5V(电源)
  • 引脚 4:GND
  • 引脚 2-3:USB Data±
  • 引脚 6-8:RS232 信号(TxD/RxD)

连接前务必用万用表检查电压,因为标准适配器可能损坏设备。示波器确认引脚 6 和 8 上为 RS232 电平(-7/+7V)。

直接 TTL 串口连接改装

主板上发现了 ADM3232E 芯片——TTL-RS232 转换器。移除它即可访问原生 TTL 串口接口,简化与现代控制器的集成。步骤如下:

  • 使用热风枪在 350°C 下拆焊芯片
  • 清理接触焊盘上的焊锡残留
  • 识别 R2out/T2in 线路(主传输通道)
  • 将导线连接到焊盘:VCC (3.3V)、GND、TX、RX
  • 用热熔胶固定连接

直接 TTL 串口连接无需电平转换器。请注意:显示屏工作电压为 3.3V,电源必须匹配。为确保稳定运行,发送字节间需间隔 4 ms 延迟——这补偿了显示屏较低的数据处理速度。

Google AdInline article slot

示例数据处理:

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

软件实现与集成

基于 Arduino Framework 的固件实现了三个关键功能:Wi-Fi 连接、MQTT 客户端和 NTP 同步。架构包括:

  • 模式自动切换(时钟/信息消息)
  • 处理光标控制的转义序列
  • 支持 UTF-8 字符(包括 °C)

主要代码组件:

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

时间同步通过本地 NTP 服务器处理。启动时,系统最多等待 4 秒获取时间:

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

信息消息模式 60 秒后自动结束,返回时钟显示。这样避免阻塞主界面。

智能家居系统中的实际应用

将显示屏集成到现有生态系统中,能满足两个关键需求:

  • 关键参数实时监控 —— 锅炉温度、地下室湿度、太阳能板状态
  • 无需智能手机的通知 —— 系统消息(“燃气泄漏”、“大门打开”)

温度跟踪示例:

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

系统可扩展:多个显示屏可订阅特定主题显示不同信息。要扩展功能,只需修改 MQTT 消息处理器支持新命令。

关键要点

  • 电压检查必不可少:连接前测量所有引脚——标准适配器可能损坏显示屏。
  • 传输延迟至关重要:字节间无 delay(4),因处理速度差异会导致数据丢失。
  • OTA 更新必备:保留无需物理访问设备即可重刷固件的能力。
  • 转义序列:使用数据表中的控制码实现精确光标定位。
  • 本地 NTP 服务器:外部服务器可能不可用,影响时钟运行。

— Editorial Team

Advertisement 728x90

继续阅读