스마트 홈의 빈티지 현금 등록기 디스플레이: ESP8266과 MQTT 통합
계산대에서 사용되던 빈티지 가스 방전 디스플레이는 스마트 홈 시스템에서 컴팩트한 정보 패널을 만드는 데 완벽한 소재입니다. 이 글에서는 Wincor Nixdorf BA64-2 디스플레이를 ESP8266으로 제어하도록 적응시키고 NTP 동기화와 MQTT 인터페이스 통합을 자세히 설명합니다. 이 솔루션은 메인 인터페이스에 지속적으로 접근하지 않고도 중요한 데이터를 표시할 수 있게 해줍니다.
하드웨어 분석 및 핀아웃
Wincor Nixdorf BA64-2 디스플레이는 컴팩트한 하우징에 들어있는 2줄 가스 방전 표시기(20×2 문자)입니다. 주요 도전 과제는 비표준 RJ45 커넥터에 대한 문서가 없다는 점입니다. 초기 검사에서 다음 특징이 확인되었습니다:
- 커넥터는 물리적으로 이더넷과 호환되지만 전기적으로는 맞지 않음
- 단일 커넥터를 통해 USB와 RS232 두 인터페이스 지원
- 데이터시트에 핀 표시 없음
장치를 분해하고 멀티미터로 보드를 분석한 결과 핀아웃이 확인되었습니다:
- Pin 1: +5V (전원)
- Pin 4: GND
- Pins 2-3: USB Data±
- Pins 6-8: RS232 신호 (TxD/RxD)
연결 전에 멀티미터로 전압을 반드시 확인해야 합니다. 표준 어댑터는 장치를 손상시킬 수 있습니다. 오실로스코프로 핀 6과 8에서 RS232 레벨(-7/+7V)을 확인했습니다.
직접 TTL-직렬 연결을 위한 수정
보드에서 TTL-RS232 변환기인 ADM3232E 칩을 발견했습니다. 이 칩을 제거하면 기본 TTL-직렬 인터페이스에 접근할 수 있어 현대 컨트롤러와의 통합이 간단해집니다. 단계는 다음과 같습니다:
- 핫에어 건으로 350°C에서 칩 탈솔더링
- 접점 패드의 솔더 잔여물 청소
- R2out/T2in 라인 식별 (주 전송 채널)
- 패드에 와이어 연결: VCC (3.3V), GND, TX, RX
- 핫글루로 연결 고정
직접 TTL-직렬 연결로 레벨 시프터가 필요 없어집니다. 주의: 디스플레이는 3.3V로 작동하므로 전원이 맞아야 합니다. 안정적인 작동을 위해 전송 바이트 간 4ms 지연이 필요합니다—이는 디스플레이의 낮은 데이터 처리 속도를 보상합니다.
데이터 처리 예시:
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 문자 지원 (℃ 포함)
주요 코드 구성 요소:
#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
아직 댓글이 없습니다.