Нужно больше ламповых табло!!! Запускаем дисплей от пейджера NJE-105

Автор текста: Акасака

Несколько месяцев назад я снова прогуливался по комиссионному магазину, и мое внимание привлекло на полке устройство, чем-то похожее на стереосистему Bose.

Однако, когда я взял его с полки, я обнаружил, что это биржевой тикер!

Я сначала подумал, что это светодиод, но зачем он нужен? И у меня дома уже есть роскошные плазменные часы. Хорошо, я положил его обратно на полку. В этот момент раздался громкий шум, свидетельствующий о том, что внутри находятся струны, а это означало, что это настоящий ВЛИ!

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

❯ Первое включение

Мы взяли его домой, подключили к электрической розетке и убедились, что он работает точно так же, как на испытательном стенде благотворительного магазина. Ну хоть по дороге не сломали, а это значит %)

Открывается, говорит версия 1.12, потом зацикливается, жалуясь на отсутствие сообщений. Значит, нам нужно как-то их туда запихнуть.

❯ Что это за зверь

Заводская табличка на задней панели указывает, что устройство было произведено компанией Nippon Radio Co., Ltd., Нагано. Ltd., номер модели NJE-105. Отдельная наклейка вверху указывает на то, что версия прошивки та же, 1.12.

Сзади есть только переключатель и вход питания, а также отсек, закрытый пластиковой крышкой.

Если заглянуть внутрь отсека, то мы увидим, что интерфейсный разъем там всего один. На одном конце целый набор DB-25:

Но с другой стороны - мне трудно определиться.

Длительные попытки выяснить, что это за устройство и для чего оно использовалось, привели к тому, что японский сайт стал недоступным. Однако на одном из них оно отображалось как "В поле" и оказывается, что это отображение было.. для пейджера!

Пакет продает оператор NTT Docomo. То есть, если вам необходимо, например, постоянно проверять последние новости в офисе, вы можете купить пейджер с таким дисплеем и подключить его к подписке на нужный вам канал. Как только сообщение поступает на пейджер, оно тут же начинает появляться на дисплее.

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

В какой-то момент производитель начал продавать само табло, просто как бегущую строку для компьютеров — но программное обеспечение, видимо, никуда не сохранилось.

Но, к счастью, владелец пейджера в столь суровых условиях записал хотя бы часть протокола :-)

❯ Нужно больше ламповой теплоты!

Давайте снимем переднюю панель и посмотрим, что внутри.

Меня это почти не разочаровало — это действительно огромный светящийся индикатор вакуума. Под ним находится только блок питания и вентилятор, включаемый термовыключателем на 45 градусов.

Сам монитор производит компания Futaba — к сожалению, в конце 2021 года они сократили производство VLI.

Причина использования второго бита DIP-переключателя неясна, но первый бит включает какой-то тестовый режим — скорее всего, используемый для тестирования на заводе:

Трехцветный экран реализован треугольными субпикселями двух цветов: оранжевого и зеленого:

Цвет этого монитора напоминает мне мониторы, установленные в поездах и на вокзалах, поэтому он мне нравится.

Упс, моя остановка закончилась!

❯ Протокол

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

Схема подключения

Очевидно, что распиновка такая же, как и обычная распиновка RS-232 25, за исключением того, что логические уровни являются TTL. В качестве буферов автор использовал два инвертора 7414, но я бы не рискнул использовать MAX232. Хотя переходник с TTL UART на USB продается всего за несколько центов, зачем он еще нужен в наше время :-) - прим машина

Формат пакета

Передача происходит на скорости 9600 бод, 8N1.

Каждый пакет начинается с \r\n. Далее идет текущая дата и время в формате ММДДЧЧмм (ASCII), например, 9 марта в 16:39 будет 03091639 (шестнадцатеричное: 30 33 30 39 31 36 33 39). Непонятно, зачем он используется, кроме синхронизации внутренних часов табло.

После — до 128 байт текста в кодировке Shift-JIS.

Обратите внимание: Нужно ли соблюдать этапы продаж?.

Наконец - снова\r\n.

текстовый атрибут

Свойства текста задаются в виде двух букв, обозначающих цвета и эффекты. Если атрибуты вставлены в середину текста, они разделяются символом тильды, например: ~AW~.

Стоимость имущества:

команда

Большинство команд, распознаваемых табло, сопровождаются сообщениями, отображаемыми на экране.

❯ Вывод сообщений

Первоначально я купил этот монитор, чтобы заменить монитор кассового аппарата клиента, и теперь использую его в своих диджейских стримах: (поверх центра фоновой музыки, основная часть которого начинается примерно с 9:48)

Однако дисплей кассового аппарата все равно слишком мал для этого.

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

Так как мне не хотелось подключать табло к столу с компьютером, я использовал другой ESP32. К сожалению, выход 5 Вольт на DB25 не имеет запаса по току, поэтому мне пришлось взять 24 Вольта от блока питания и преобразовать его самостоятельно.

оказывается, функция iconv() не работает на ESP32, но, к счастью, существует отдельная библиотека Shift-JIS. На основе этого можно написать простую функцию для отправки пакетов на дисплей.

Мне не нравится, как произвольные сообщения, записанные в порт, отображаются просто как текст: сначала экран переворачивается и текст прокручивается один раз, затем второй раз прокручивается нормально.

Команда получения сообщений позволяет сохранять их непосредственно в памяти табло. Однако для этого прошивке необходимо знать, какие «слайды» заняты, а какие нет.

Вот мы и написали простой «диспетчер» сообщений :-) Так что каждый «виджет» сможет оставить себе «слайд":

средний.номер = мгр->резерв(средний.вид);

Отпустите его, когда он больше не нужен:

мгр-> удалить (средний);

В остальном о коде сказать особо нечего — в отличие от тех же плазменных часов, где приходилось писать собственную графическую библиотеку, здесь он обрабатывает только текст.

На основании показанного решите сделать вывод:

  • погода

  • «Слово дня» на английском языке

  • Дата и время

  • Сейчас воспроизводится трек в Foobar2000

  • Отправитель и тема входящего сообщения (IMAP)

Мы также добавили возможность пересылки данных с USB-UART ESP32 непосредственно на дисплей, чтобы в будущем его можно было каким-либо образом интегрировать с Traktor-OBS-Relay.

Я также хочу добавить новые твиты в один из списков местных новостей о геях в Твиттере. Однако кто-то сделал бесплатный API только для записи, но его чтение стоило бы 100 долларов в месяц, поэтому идею отложили :-)

Сетчатые намордники тоже были наспех собраны. Для этого я использовал библиотеку GyverPortal:

(Реклама новой версии в файле readme выглядит интересно, в ней говорится, что новая версия работает через Интернет и приложение для телефона — как будто это некоторые из преимуществ)

Дата и время

Ну тут все просто — держим «слайд» и форматируем на нем текущее время. Всего здесь 60 строк кода, и здесь проще показать, чем описывать.

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

Погода

Здесь все очень просто — нужно просто украсть код доступа к OpenWeatherMap из часов, которые я сделал ранее :-)

Так же, как и дату и время, мы просто форматируем их и размещаем на отведенном для этого слайде.

Еще я получил ключ доступа к API от часов — на бесплатном плане прав доступа столько, что одного ключа хватает на все мои устройства, включая два смартфона и умные часы.

Foobar2000

здесь уже придется повозиться — единственный удобный способ извлечь метаданные из fb2k — это плагин foo_controlserver.

Написал простой клиент, который проходит через заданный IP-адрес и порт. Если соединение установлено успешно, оно будет бесконечно прослушивать входящую линию и извлекать из нее события воспроизведения/паузы и названия треков.

Формат аналогичен CSV, за исключением того, что разделителями являются вертикальной чертой. Так что если дело в названии трека или исполнителя, то синтаксический анализ срывается и черт знает что появляется на экране. Не идеально, но и не важно.

Слово дня

Вот странная вещь: каждый день показывается случайное словарное определение. Раньше на моем Mac была такая заставка, но привычка осталась.

Недолгий поиск выявил API Wordnik. Дальше все просто — получаем JSON, парсим его и выводим на экран.

Почта по IMAP

Я не люблю вводить лишние сущности, у меня дома нет сервера, даже разберипая, поэтому решил делегировать получение писем непосредственно микроконтроллеру — без каких-либо MQTT и других посредников.

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

Вот тут-то меня и ждала горячая анальная боль и прочая мозговая боль!

Первое удивление - единственная электронная "микроконтроллерная" библиотека вся кривая, за ней плетутся внешние флешки, карты памяти, с десяток разных типов сетевых контроллеров и еще куча дрянных драйверов. Что происходит? Это просто не работает после добавления в проект!

Поэтому мне пришлось сосредоточиться на удалении 600 строк, которые отваливались при каждой возможности - но сейчас они, кажется, работают.

Затем мы просто используем обратный вызов для захвата нового заголовка и создания нового слайда для каждой буквы, а когда он читается или удаляется, мы также удаляем его.

второй сюрприз заключается в том, что iconv тоже не работает. Я думал, что они вообще не включили поддержку SJIS, но это не так - он полностью сломан, и даже попытка конвертировать из ASCII в ASCII не удалась. Поэтому заголовок сообщения поддерживается только в формате UTF-8, а остальное просто заменяется текстом «Новое сообщение".

❯ Итоговый результат

Остальной исходный код можно посмотреть на Github, а пока давайте полюбуемся конечным результатом:

Я считаю, что получилось очень хорошо! Однако каждый раз выключать его вручную утомительно, поэтому однажды я могу добавить датчик движения.

Узнаю, доберусь ли я до этого, в моем телеграмме - среди тонн фотографий еды, Мику и прочего барахла из комиссионного магазина :-)


Написано специально для читателей Timeweb Cloud и Pikabu. Больше интересных статей и новостей смотрите в нашем блоге на Хабре и телеграм-канале.

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

Облачный сервис Timeweb Cloud — рекомендуемая ссылка, которая может помочь поддержать проект автора.

Электронный дисплей Пейджер Гаджет Технология Время Сеть Сборка Информация Видео YouTube Telegram (Ссылка) Длинный пост 12

Больше интересных статей здесь: Гаджеты.

Источник статьи: Нужно больше ламповых табло!!! Запускаем дисплей от пейджера NJE-105.