Перевод статьи Review: Beepy, A Palm-sized Linux Hacking PlaygroundTom Nardi, Hackaday.

В давние времена, когда телефоны ещё раскладывались, а модемы гордо пели песни своего народа, я заказал по почте комплект CD со Slackware и отправился в самое что ни на есть замечательное путешествие. Тогда запуск Linux (особенно на десктопе) был делом, к которому не стоило относиться легкомысленно. Само ядро всё ещё было в изрядном движении — вместо изменения какой-нибудь малоизвестной подсистемы или добавления поддержки нишевого гаджета, которого у тебя даже нет, новые релизы открывали критически важные возможности и целые категории периферии. Я до сих пор помню, как решал: сыграть ли наверняка и остаться на текущем ядре или рискнуть и скомпилировать свежайшую версию, чтобы попробовать эту новую штуку «USB Mass Storage», о которой все говорили на форумах…

Но современный десктопный Linux достиг невероятной зрелости и теперь является жизнеспособным выбором для огромного числа пользователей компьютеров. По сути, если добавить в этот котёл Android и Chrome OS, то миллионы и миллионы людей ежедневно используют Linux и даже не подозревают об этом. В наши дни единственный способ испытать то чувство приключения и удивления, которое когда-то шло в предустановленном комплекте с Linux-машиной, — это выйти и отправиться на его поиски.

Именно так и ощущается работа с Beepy от SQFMI. Наладонное устройство, прежде известное как Beepberry — до того, как его создатели получили вполне предсказуемую формальную претензию, — беззастенчиво спроектировано для линукс-задротов. За пару недель возни с этим железом первого выпуска я компилировал драйверы ядра, писал собственные скрипты и пытался (хоть и не всегда успешно) установить на него новое ПО. Если вам нравится ковыряться в Linux, это абсолютный кайф.

Есть большая вероятность, что вы уже знаете, для вас Beepy или нет, но если вы всё ещё колеблетесь, надеюсь, этот подробный взгляд на железо и текущее состояние проекта в целом поможет вам определиться до того, как SQFMI официально начнёт принимать новые заказы на гаджет за 79 долларов.

Железо#

Сразу проясню: сам Beepy — это не компьютер. Это просто плата, объединяющая клавиатуру от BlackBerry, дисплей Sharp Memory LCD 400×200 и аккумулятор. Чтобы завершить устройство, вам всё равно понадобится принести свою Raspberry Pi Zero, хотя SQFMI планируют предлагать Beepy с предустановленной Pi Zero 2 как опцию. Его дизайн покрыт лицензией CERN Open Hardware Licence v1.2, а схемы и файлы KiCad уже опубликованы SQFMI.

Задняя сторона Beepy

Raspberry Pi подключается к Beepy через хитроумную конструкцию из гибких контактов, которые удерживаются на месте при прикручивании платы к металлическим стойкам. Это значит, что паять ничего не нужно, и, в теории, Pi легко вставлять и вынимать. Но на практике я нашёл этот интерфейс немного капризным. Понадобилось несколько попыток, прежде чем все контакты встали на место, и как только всё наконец выровнялось, я не смел его трогать.

К счастью, этого и не требуется. SQFMI вывели GPIO-контакты Pi на стандартные гребёнки по обеим сторонам дисплея. Это упрощает подключение собственного железа и избавляет от необходимости касаться гребёнки на самой Pi. Благодаря физическому расположению Pi при стыковке с Beepy у вас также будет доступ к её порту micro USB (помните, для данных можно использовать только один из двух портов Zero) и к порту HDMI — но к последнему мы ещё вернёмся через минуту.

Клавиатура#

Как уже упоминалось, клавиатура — это настоящая плата от BlackBerry. Если вы когда-либо пользовались одним из этих устройств в те годы, мне не нужно объяснять вам, как приятно она ощущается. Да, она маленькая, но тактильный отклик отличный, и её создатели прекрасно позаботились о том, чтобы все необходимые символы и знаки препинания были в одном нажатии клавиши ALT.

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

Электроника, соединяющая клавиатуру BlackBerry с Raspberry Pi, основана на BBQ20KBD от Solder Party. Сюда входит использование RP2040, который в Beepy также управляет RGB-светодиодом в левом верхнем углу устройства. Исходный код прошивки RP2040 предоставлен под лицензией MIT, и его можно обновлять даже без установленной Pi, удерживая клавишу «End Call» при подключении кабеля USB-C — прямо как с оригинальным BBQ20KBD.

Дисплей#

Пожалуй, самая уникальная особенность Beepy — его Sharp Memory LCD, который, как сообщается, той же модели, что используется в Playdate. Эту технологию иногда сравнивают с электронными чернилами: она потребляет очень мало энергии, при этом обеспечивая высокую контрастность и исключительную читаемость при дневном свете. Как и eink, она также не излучает свет, так что в темноте вы, к сожалению, Beepy пользоваться не сможете. Зато частота её обновления ближе к традиционному ЖК, так что даже при быстрой прокрутке текста явного «призрачного» шлейфа нет.

Beepy на улице

Если вы вдруг случайно окажетесь на улице, вы без труда разглядите Sharp Memory LCD у Beepy.

Дисплей имеет разрешение 400×240, и документация рекомендует использовать терминальный шрифт 8×8 пикселей, чтобы уместить как можно больше информации за раз. Благодаря отличной контрастности Memory LCD крохотный текст читается лучше, чем я боялся, но идеальным это всё же не назвать. В дальнейшем жизнеспособность Beepy, вероятно, будет зависеть от того, сколько программ удастся адаптировать под это ограниченное разрешение.

Текст на экране Beepy

Текст на Beepy мелкий, но очень чёткий.

Сейчас официальной поддержки графики на дисплее Beepy нет, но есть очень многообещающий порт DirectFB2, который можно установить автоматическим скриптом. Но будьте осторожны — скрипт не только добавляет в систему пакеты на несколько сотен мегабайт, но и вынужден компилировать из исходников несколько библиотек. На Pi Zero 2 это, вероятно, не такая уж проблема, но на оригинальной Zero процесс занял довольно много времени.

Время работы от батареи#

Beepy поставляется с плоским LiPo-аккумулятором на 2000 мА·ч, который занимает почти всё доступное место на задней стороне платы. Подключив мультиметр между батареей и Beepy, я измерил ток в простое примерно в 250 мА с Raspberry Pi Zero (ожидайте, что с Zero 2 он будет выше), что дало бы солидное время работы около восьми часов.

Разумеется, вам, вероятно, захочется заняться на Beepy чем-то поинтереснее, чем наблюдать за миганием курсора терминала. Так что я подключил USB-аудиоадаптер (у Beepy нет встроенного аудиожелеза) и начал стримить SomaFM. Добавленное железо и рост загрузки процессора увеличили потребление тока до 280 мА, что соответствует примерно семи часам работы.

Затем я подключился к Libera Chat и потрепался в #linux. Теперь Beepy потреблял около 310 мА, снижая расчётную автономность до всё ещё очень разумных шести часов. Ох, чего бы я только не отдал в юности за наладонник, который позволял бы сидеть в IRC большую часть ночи без подзарядки…

По-настоящему всё начинает портиться, только когда подключаешь устройства помощнее. Запуск Kismet с WiFi-адаптером Alfa AWUS036H поднял суммарное потребление до 700 мА, сократив время работы примерно до трёх часов. Приём с RTL-SDR (Nooelec NESDR Nano 2) заставил Beepy проглатывать от 770 до 800 мА·ч, чего хватило бы, чтобы разрядить батарею менее чем за два с половиной часа.

Управление питанием#

По моей оценке, это примерно самое короткое время работы, какое вы, вероятно, увидите на полностью заряженном Beepy (по крайней мере с Pi Zero), поскольку любое устройство, потреблявшее больше энергии, чем SDR, приводило к тому, что железо теряло питание сразу после подключения. Из любопытства, где же слабое звено, я вытащил даташит на повышающий преобразователь TPS61090, указанный в схемах, и с удивлением обнаружил, что он рассчитан всего на 500 мА. Внимательно осмотрев плату, я заметил, что реальный компонент — это TPS61030, рассчитанный на более подходящий 1 А. Неясно, действительно ли SQFMI изначально собирались использовать преобразователь с более низкими характеристиками, а потом были вынуждены его заменить, или это просто случай использования удобного футпринта в KiCad — на момент написания публичного перечня компонентов для сверки, похоже, нет.

Кстати, батарею Beepy стоит по возможности не разряжать слишком глубоко — согласно схемам (и подтверждено на моём реальном железе), SQFMI поставили резистор на 10 кОм на «программирующий» вывод зарядной микросхемы TP4054. Это задаёт ток заряда микросхемы в жалкие 100 мА, а значит, полная зарядка батареи заняла бы где-то около 20 часов. Трудно поверить, что это было сделано намеренно, и, возможно, будет исправлено в более поздней ревизии железа.

Примечание. Хотя лично я не столкнулся с проблемами, стоит упомянуть, что среди уже получивших свои Beepy есть несколько сообщений о том, что TPS61030 может выйти из строя без предупреждения. Микросхема, по-видимому, замыкается внутри, что, в свою очередь, приводит к сильному нагреву расположенного рядом дросселя. Функционально результат — полностью мёртвое устройство, поскольку питание и от USB-порта, и от батареи проходит через одну и ту же микросхему.

На самом деле есть сообщение об этой самой проблеме на форуме поддержки Texas Instruments, которое датируется аж 2011 годом. Официальный совет от TI уже тогда состоял в переходе на более новый и надёжный компонент, так что, если частота отказов и вправду так высока, как подозревают некоторые пользователи, вполне возможно, что этот компонент заменят в новой ревизии платы.

Программное обеспечение#

С Beepy SQFMI по сути просто продаёт вам железо. Хотя они и предоставляют скрипт, автоматизирующий установку необходимых драйверов ядра на стоковую установку Raspberry Pi OS, в остальном официального ПО почти нет. Даже базовые функции вроде мигания светодиодом уведомлений или проверки уровня заряда на деле не реализованы. Документация просто сообщает, какие адреса I2C надо «потыкать», и оставляет сообществу разбираться, что с этой информацией делать.

Для хардварных хакеров и линукс-бородачей это вообще не проблема. Более того, это даже увлекательно и в некотором смысле и есть смысл покупки такого устройства. Но любого, кто думает, что можно просто купить Beepy и начать пользоваться им как обычным потребительским гаджетом, ждёт грубое пробуждение. Уточню: SQFMI абсолютно откровенны насчёт этого факта, хотя я уверен, что это всё равно не помешает людям на это жаловаться.

Beepy с SDR

Beepy запустит всё, что вы в него закинете… при условии, что это можно запустить в терминале.

Что касается того, что предоставляет установочный скрипт — а именно драйверы для клавиатуры и дисплея, — они, похоже, работают вполне нормально. Как я уже упоминал, среда по умолчанию не поддерживает графику на Sharp Memory LCD, так что вы по сути ограничены программами, которые можно запустить в терминале. К счастью, в них нет недостатка. Некоторым нужны небольшие правки, чтобы работать на маленьком дисплее Beepy, но если вы дошли до этого места, это не должно быть проблемой.

Чего вы, однако, можете не ожидать, так это того, что порт HDMI, по крайней мере при текущем ПО, на самом деле не работает. Точнее, когда загружен драйвер Memory LCD, консоль переносится в другой фреймбуфер. Так что, хотя вы можете подумать, что можно просто подключить Beepy к телевизору, когда устанете смотреть на его крошечный экран, на деле вы обнаружите, что он ничего не выводит. Есть разговоры о попытке настроить порт HDMI как вторичный, чисто графический выход, но я пока не видел, чтобы кто-то реально прислал для этого патч. В крайнем случае можно, конечно, перенастроить ядро и перезагрузиться, чтобы заработал HDMI, но это отключит Memory LCD.

И всё же в вашем распоряжении здесь полноценная система ARM Linux. Хотя ей не помешала бы более тесная интеграция с железом, трудно жаловаться, когда на столе столько невероятных возможностей. Возможность стянуть Git-репозиторий и скомпилировать какой-нибудь новый инструмент прямо на Beepy — освобождающий опыт по сравнению с тем, что традиционно было возможно в подобном форм-факторе.

Документация#

Если и есть что-то негативное, что я могу сказать о Beepy прямо сейчас, — это состояние документации. Кроме единственной страницы «Getting Started», большая часть документации либо неполная, либо попросту отсутствует. Дело ещё больше осложняется беспорядочной сменой названия. Некоторые документы и репозитории всё ещё используют имя Beepberry, тогда как другие уже переименованы, и нередко наткнёшься на ссылку, которая теперь из-за этого возвращает 404. Обычно разобраться не так уж сложно, но это может стать досадным опытом, если вы не в курсе ситуации.

ToDo в документации Beepy

В документации Beepy полно пунктов ToDo.

Но проблема побольше в том, что так много критически важной информации о Beepy заперто в серверах проекта в Discord и Matrix. Хотя явно важно иметь централизованное место, где пользователи могут общаться и обсуждать проблемы, в какой-то момент эту информацию нужно упаковать и представить в менее эфемерном виде. Например, вы бы никогда не узнали о порте DirectFB2, если бы не зашли на сервер Discord и не прокрутили обсуждение на несколько недель назад.

Справедливости ради, Beepy далеко не первый проект, страдающий от этой проблемы. На самом деле это большая проблема прямо сейчас, затрагивающая многие open-source-начинания… но это история для другого раза. Плюс нельзя игнорировать, что проект в зачаточном состоянии и что писать подробную документацию не очень-то осмысленно, пока столько деталей ещё в состоянии движения.

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

Заключительные мысли#

За 79 долларов железо Beepy — это просто грабёж (в хорошем смысле). Один только BBQ20KBD обошёлся бы вам в 30 долларов, а Adafruit просит 45 долларов за сопоставимый Sharp Memory LCD. Плюс, если заказать Pi Zero 2 через SQFMI при покупке Beepy, её реально можно получить по неспекулятивным ценам. Хотя это очень даже хакерская игрушка, а не законченный продукт, я уверен, что ситуация улучшится по мере того, как больше людей заполучат железо и начнут вносить вклад в улучшение ПО и документации.

Если честно, часть меня всё же задаётся вопросом: не был бы весь пакет чуть доступнее, используй он более традиционный сенсорный ЖК-экран. Наличие доступа к графической среде, пусть и сколь угодно ограниченной, учитывая скромные возможности Pi Zero и крохотную площадь дисплея, открыло бы некоторые захватывающие возможности, которые просто нельзя реализовать с Sharp Memory LCD.

Но, с другой стороны, говорили бы мы вообще о Beepy, не выбери SQFMI менее протоптанную дорогу? В конечном счёте Beepy определяется тем, насколько он уникален, и в мире, где наши мобильные устройства кажутся всё более монолитными, есть нечто неоспоримо притягательное в том, чтобы попробовать что-то иное.