Автор текста: Акасака
Несколько месяцев назад я снова прогуливался по комиссионному магазину, и мое внимание привлекло на полке устройство, чем-то похожее на стереосистему 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.