Есть такая штука, как "дисплей покупателя" - это тот самый экран на кассе, где пишут сколько денег вы должны заплатить.
И есть такое народное развлечение - делать из этих экранов всякое разное - ну например, "часы или метеостанцию" (с)

Фишка тут в том, что можно приобрести их б/у за копейки, и получить при этом винтажный газоразрядный экран, приятного зеленого или синего цвета.
Пусть алфавитно-цифровой - для часов этого более чем достаточно.

Поскольку сервер времени я себе уже сделал - дай-ка, думаю, и эту штуку попробую освоить, будут часы с синхронизацией по NTP.
А еще можно приспособить их для полезного дела - показывать температуру воды в котле, например - чтобы не бегать смотреть на основные экраны "умного дома", и не хвататься за телефон.

Итак, под руку попался Wincor Nixdorf BA64-2: 2 строки по 20 символов, газоразрядный, аккуратный черный корпус.

По даташиту он может работать с кассой как по USB, так и по RS232, в зависимости от кабеля.
На самом дисплее всего один разьем типа RJ45, но он не сетевой, просто для удобства подключения кабелей.

У моего экземпляра был кабель для RS232, но сразу же возник вопрос: а как конкретно его подключать?
Стандартный RS232 - разьем DB25 или DB9 со штырьками, "папа", соответственно - у кабеля должен быть парный ему, "мама" - но здесь наоборот, штырьки на кабеле.
И RJ45 тоже не то, чем кажется.
Где гарантия, что распиновка разьема хоть как-то соответствует стандартам, и что дисплей не сгорит с дымом, если подключить его как положено, а не к родной кассе?
О распиновке даташит молчал, как партизан. В интернете тоже ничего не нашлось по этой модели.

Конечно, кабель можно прозвонить тестером - но кто его знает, какой провод к чему относится, раз уж тут всё не по стандарту?
Пришлось лезть внутрь - и не зря.

Разбирается он неочевидно: сначала нужно открутить всего один винт сзади, а вот потом с помощью чего-то типа пластиковых карт и стальной линейки аккуратно отжать нижнюю рамку от экрана, и приподнять "стекло".
И только когда зацепы выскочат - можно будет его снять полностью.

Дальше просто - два винта держат плату, сверху на ней стеклянный индикатор, но нам нужна нижняя сторона.

Если внимательно посмотреть - видно, что 1 пин разьема (справа, металлический корпус, сверху вниз ) идет на какой-то элемент зеленого цвета, подозрительно напоминающий предохранитель (fuze), и 4 пин - на “землю”.
Вероятно, это питание: плюс и GND. Остальные - явно сигнальные.
Вспоминаем, что дисплей может работать от USB, то есть от 5В - поэтому подаем именно 5В (хотя вроде он и 12 выдержит, для RS232).

Случилось чудо: дисплей ожил, что-то показал, и погас.
Уже хорошо, питание работает, теперь нужно подключить передачу данных.
Осциллограф показал наличие разных постоянных напряжений на разных пинах:
2 - 0,
3 - +3,
5 - 0,
6 - -5,
7 - 0,
8 - +7.

Там, где -5 и +7 - похоже на сигналы RS232, а 2 и 3 похожи на напряжения USB в состоянии покоя.
Так и оказалось: если подключиться к 2 и 3 пинам к USB - дисплей определяется в системе:

Manufacturer: Wincor Nixdorf
hid-generic 0003:0AA7:0208.002B: hiddev97,hidraw4: USB HID v1.11 Device [Wincor Nixdorf BA64-2 Customer Display] on usb-5101000.usb-1.4.3/input1
...

и тому подобное.
В устройствах появляются несколько /dev/hidrawX, с которыми теоретически уже можно работать (но непонятно как именно).

Сигналы RS232 проверить было нечем, адаптера нет, а TTL serial с таким не работает.
Но вероятно, это всё-таки они, а молчащие 5 и 7 пины - RTS/CTS.

Таким образом, распиновка разьема RJ45:

1 - + 5 VCC
2 - 0 -Data USB (white)
3 - 3 +Data USB(green)
4 - GND
5 - 0 ?
6 - -5 rs232 ?
7 - 0 ?
8 - +7 rs232 ?

Уже лучше, но надо с этим как-то работать, и желательно не через подключение проводами к компьютеру.
Смотрим на плату внимательно, и видим там такую интересную микросхему:

Это - ADM3232E, конвертор уровней TTL-RS232.
Он занимается преобразованием TTL-serial (0-3В) в RS2 32-serial (-7/+7В), причем сам питается от 3.3В, которые умножает в два раза для формирования RS232.
Но важнее тут другое: он напрямую работает с TTL-serial контроллера дисплея! А значит, не нужны ни USB, ни RS232 - можно подключиться напрямую к данным, используя всё ту же ESP8266. То есть, приделать к дисплею Wifi-интерфейс.
Тогда из проводов остается только питание, например от обычной USB-зарядки.

Для этого сначала с помощью фена аккуратно сдуваем эту микросхему.

Освободились контактные площадки: 3.3В питание, GND, RX/TX.
Строго говоря, там два комплекта RX/TX, проверить какой именно отвечает на ввод-вывод - несложно ( не очень понятно зачем второй - ну да ладно).
Рабочие выводы здесь - R2out / T2in: out идет из конвертера на контроллер, и соответственно, in из контроллера на конвертер.

Схема подключения - простейшая, поэтому все делается с помощью проводков и скотча

А, ну не забыть сначала залить прошивку: для этого подключиться к RX/TX ESP8266 через компьютер, закоротить GPIO0 на землю, подать питание и прошить средствами Ардуино.

после прошивки освободить GPIO0.
И всегда оставлять для себя возможность перепрошивки по OTA.

Простейшая тестовая прошивка - принимает по MQTT строку байт и пишет ее в порт.
Единственно что - пришлось добавить небольшую задержку записи, дисплей не успевает за ESP, приходится писать побайтно:

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

...

void msg_callback(char* topic, byte* payload, unsigned int length){

  ...

  if(!strncmp((char *)payload, "test ", 5) && length > 5){
    outString((char*)&payload[6], length - 6);
  }
  
  ...

}

Отправка команд из консоли по MQTT (список команд есть в даташите на дисплей):

printf "\x1B[2J\x1B[1;0HHello world!" | mqtt-simple -h mosqit -p command/ba64

Что ж, всё работает.
Теперь добавляем, наконец, часы. Синхронизация - по NTP, с тем самым сервером точного времени:

#define CLEAR_SCREEN "\x1B[2J"
#define CLEAR_EOL "\x1B[0K"
#define UTF8_MODE "\x1B[1u"

time_t  olddtm = 0;
bool clock_mode = true;
char * wdays[] = { "Воскресение", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббот
а", "Воскресение"};

#include <RTClib.h>
....

void drawClock(){

  time_t dtm = time(nullptr);
  dtm += (3 * 3600);
  if(dtm != olddtm){

    DateTime now = DateTime(dtm);

    olddtm = dtm;

    char buf[21];

    int year = now.year();
    int month = now.month();
    int day = now.day();
    int wday = now.dayOfTheWeek();

    uint8_t h = now.hour();
    uint8_t m = now.minute();
    uint8_t s = now.second();

    sprintf(buf,"\x1B[1;%dH%02d.%02d.%04d  %02d:%02d:%02d", 0 ,day,month,year,h,m,s);
    outString(buf,strlen(buf));
    sprintf(buf,"\x1B[2;%dH%s\x1B[0K", 0 ,wdays[wday]);
    outString(buf,strlen(buf));

  }

}
...
#include <time.h>

void TimeSetup(){

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

}


void setup(){

  Serial.begin(9600);

  WifiSetup();

  MqttSetup();

  TimeSetup();
  ...



  pinMode(IND,OUTPUT);
  digitalWrite(IND,HIGH);

  outString(CLEAR_SCREEN,strlen(CLEAR_SCREEN));
  outString(CLEAR_SCREEN,strlen(CLEAR_SCREEN));
  outString(UTF8_MODE,strlen(UTF8_MODE));

  olddtm = 0;

}

void loop() {

  WifiLoop();

  MqttLoop();

  ...

  drawClock();

  ...

  delay(100);

}

Но просто часы - это не особо интересно. Добавим возможность показа принятого по MQTT текста (уже почти есть) и автоматическое возвращение к показу часов через 60 секунд.

...
#define UTF8_MODE "\x1B[1u"
#define LINE1_0 "\x1B[1;0H"
#define LINE2_0 "\x1B[2;0H"

bool clock_mode = true;
#define INFO_PERIOD 60000
unsigned long info_timer = 0;

...

void msg_callback(char* topic, byte* payload, unsigned int length){

  if(!strncmp((char *)payload, "reset", length)){
    ESP.reset();
  }
  if(!strncmp((char *)payload, "clock", length)){
    clock_mode = true;
    olddtm = 0;
    outString(CLEAR_SCREEN,strlen(CLEAR_SCREEN));
  }
  if(!strncmp((char *)payload, "line1 ", 5) && length > 5){
    clock_mode = false;
    info_timer = millis();
    outString(LINE1_0,strlen(LINE1_0));
    outString((char*)&payload[6], length - 6);
    outString(CLEAR_EOL,strlen(CLEAR_EOL));
  }
  if(!strncmp((char *)payload, "line2 ", 5) && length > 5){
    clock_mode = false;
    info_timer = millis();
    outString(LINE2_0,strlen(LINE2_0));
    outString((char*)&payload[6], length - 6);
    outString(CLEAR_EOL,strlen(CLEAR_EOL));
  }
  
} 

void setup(){
  ...

  olddtm = 0;
  clock_mode = true;
  info_timer = 0;

}


void loop(){
  ...


  if(clock_mode){
    drawClock();
  }else{
    if(( millis() - info_timer ) > INFO_PERIOD){
      clock_mode = true;
      olddtm = 0;
      outString(CLEAR_SCREEN,strlen(CLEAR_SCREEN));
    }
  }
  
  ...
}

Например, как и планировалось, можно отправлять данные о температуре котла - они будут появляться на экране, потом снова часы, снова температура и т.д.

‘line1 котел 63.28/55.43\xC2\xB0C’ -> “котел 63.28/55.43°C”
'line2 ’ -> " "

Можно конечно было бы просто подписать сам дисплей на сообщения от датчика температуры - но по принятой у меня системе рассылкой информации занимаются скрипты на сервере. Вдруг потребуется выводить что-то еще и по-другому? Дисплей получается универсальный, и их может быть несколько.

А вот дальше я подумаю, что именно туда выводить, и где еще можно это использовать…
Да, это как раз было сделано из чисто академического интереса.

Комментарии (22)


  1. Zachelovek
    19.04.2026 05:18

    Хабр, пока утро и "здесь пока нет ни одного комментария", но вероятно, позже заглянут специалисты по маленьким дисплеям с прямыми руками, хочу спросить:

    Сейчас продаётся (и отдаётся / выбрасывается) немало модных раньше цифровых фоторамок. Для тех, кто не застал, это реально небольшой LCD-дисплей в формате рамки для фотографий, поддерживающей карты памяти, пульты, и т.п.

    Если у вас есть свободные условно 500 руб., их выбор близок к огромному. Наверняка есть и дешевле.

    Скрытый текст

    Так вот, пробовал ли кто-то использовать такие фоторамки для DIY?
    Что там внутри и что можно сделать? Взять только дисплей, или можно как-то перепрошить, или вообще подключить вторым монитором к компьютеру или устройству навроде Распберри Пи?

    Быстро нашёл только давнишнюю статью про подключение по ЮСБ: https://habr.com/ru/articles/384177/


    1. riky
      19.04.2026 05:18

      Там дисплей с параллельным 16бит rgb протоколом. Посмотрите как дисплей от авто навигаторов переиспользуют. Прошить вряд ли. На навигаторах часто wince os разве что под неё программу писать. На али есть подобные дисплей за 300 р , но с рамкой в получаете ещё корпус и бп. Можно так же с esp отрисовывать


      1. strvv
        19.04.2026 05:18

        Есп тебе без сложной обвязки паралленые 38/36 + синхро не будет давать. Иногда действительно, проще написать прогу на эту рамку.


        1. riky
          19.04.2026 05:18

          тем не менее работает. баловался как то. вроде бы через эту библиотеку. https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA также для DIY если не делать из фоторамки фоторамку, а простой показометр с датчиков то зачасутю 3/6/8 бит хватит всем. даже 3 бита это уже целых 8 цветов. для сложных проектов есть и готовые более удобные дисплеи


          1. strvv
            19.04.2026 05:18

            Однако, я как раз 3 битами как-то не хотел бы. Rp2040 можно было бы заставить, но хотя бы 256 цветов без палитр 640х480 уже больше ОЗУ этого процика.


            1. riky
              19.04.2026 05:18

              указанная библиотека поддерживает и все 16 бит этих дисплеев. 8 бит также поддерживаю. но во всяких показометрах/графиках и меньше хватит. опять же от вашего применения зависит, если делать панель умного дома то хочется красоты, а если какой нибудь мультиметр в гараж с огромным дисплеем 4,3" то и 3 бита хватит… особенно с учетом того что это выйдет почти бесплатно. в то время как заводские подобюные дисплеи выйдут уже под 2тыс…


              1. strvv
                19.04.2026 05:18

                Спасибо, гляну.


              1. strvv
                19.04.2026 05:18

                Другое дело, я говорю о оперативке, она не бесконечна.


                1. riky
                  19.04.2026 05:18

                  согласен, если не использовать ESP32-S3 то памяти под полный буфер маловато. библиотеки типа lvgl выдяляют буфер (или два) под 1/8 1/10 или 1/16 экрана и ренедрят/отправляют по частям. либо вообще не буферизировать а сразу рисовать на дисплее, если мерцание при обновлении не сильно парит. либо чтобы минимизировать мерцание не очищать экран, а рисовать поверх. правда наверное “рисовать на дисплее” для таких дисплеев не подойдет, это больше для SPI. но и зачасутю там не 640х480, а 480*272 например, буфер на 1/8 экрана это 16кБ при 8бит цвете. т.к. это не серийное изделие, то тут важнее комфорт, мне кажется лучше уж “разорится” на лишний доллар да взять S3. но опять же от задачи зависит, где то можно пойти на компромис, а где то нет.


      1. Zachelovek
        19.04.2026 05:18

        Посмотрите как дисплей от авто навигаторов переиспользуют. Прошить вряд ли. На навигаторах часто wince os

        Спасибо за наводку, почитаю.
        У меня и навигатор старомодный в родительском доме лежал, но его каким-то образом умудрились разбить. Ну и аккумулятор, скорее всего, помер за давностью.

        А так - да, там точно сзади была наклейка про windows ce.


    1. strvv
      19.04.2026 05:18

      В разном формате, где это 40 пин лсд (DPI, если память за измену не села), и к нему имеющийся контроллер и есть ценность, так как стекло только показывает то что идёт постоянным потоком, построчно…


    1. p0isk
      19.04.2026 05:18

      Внутренности могут самые разные. В одной обнаружил двуплатник: dvd-плеер без привода, подключенный через vga к дисплею. В другом usb-lvds мост, который применялся в дешёвых проекторах.


      1. Zachelovek
        19.04.2026 05:18

        В одной обнаружил двуплатник: dvd-плеер без привода, подключенный через vga к дисплею

        А правильно я понимаю, что ВГА - это как раз то, что нужно, и его можно использовать как монитор, главное правильно подключить (хотя и не знаю как именно)?

        USB-lvds для меня, увы, просто две аббревиатуры.


        1. riky
          19.04.2026 05:18

          в общем в старом навигаторе/рамке часто вы встретите дисплей типа такого https://aliexpress.ru/item/1005007783690715.html?sku_id=12000042189888785 то есть новый он 300р (доставка не мала, но если брать оптом то поделится). можете поискать даташит на него и примерно приценится как его подключить или проекты подключения поискать. тоже присматривался к таким дисплеям и мониторю иногда тему. дороже 300р как то смысл в них теряется, а по-нормальному надо искать их бесплатно, чтобы был смысл. также результат будет зависеть от вашего опыта и кол-ва свободного времени. чуть больше смысла искать популярные рамки иискать/делать прошивки под них, чтобы проект был повторяемый, а не в стол.


  1. kolganoff
    19.04.2026 05:18

    Этот дисплей не газоразрядный, а VFD (Vacuum Fluorescent Display, Вакуумно-люминесцентный индикатор).

    Лежат два таких. Никак руки не дойдут(


    1. DerTosser
      19.04.2026 05:18

      А разве люминесценция люминофора не происходит от ультрафиолета, возникающего при газовом разряде в парах ртути? Или там применяется электронно-лучевая трубка для бомбардировки люминофора электронами?


      1. MaFrance351
        19.04.2026 05:18

        Именно что поток электронов. Паров ртути там никаких нет, внутри индикатора вакуум.


  1. shiru8bit
    19.04.2026 05:18

    Астрологи объявили сезон кассовых табло! Количество статей увеличилось вдвое (я тоже писал недавно).


  1. VikTOR-777
    19.04.2026 05:18

    Уже лет 8 у меня вместо выключателей света стоят сенсорные ёмкостные led экраны dwin. Что за фигню вы делаете в 2026???


    1. sergyk2
      19.04.2026 05:18

      это что-то на богатом


  1. Arhammon
    19.04.2026 05:18

    газоразрядный

    Газоразрядные сегментники, они же панаплекс, уже супермегаэкзотика - выглядит так:

    Скрытый текст

    А есть еще более курутые штуки - именно дисплеи, но это совсем коллекционная техника:

    https://habr.com/ru/articles/588588/


    1. MaFrance351
      19.04.2026 05:18

      Был ещё монитор МС6205 на базе этой панели.

      Кстати, штука очень ненадёжная, даже на некоторых новых с хранения панелях часть пикселей уже не горела.