Linux-КПК на базе NanoPi Neo Air: необычный DIY-проект, разработанный с нуля

Наладонные компьютеры в своё время были очень популярны. Честно говоря, мне до сих пор их не хватает. Возможно, не столько самого гаджета, сколько ощущения, которое он давал, ведь в руках у тебя hi-tech-девайс небольшого размера, который может столь многое!  

Того же ощущения, видимо, не хватает и любителям DIY-проектов. Один из них построил с нуля Linux-КПК, в основе которого NanoPi Neo Air. Подробности создания и возможности устройства — под катом. 

2224072d1f40262424aafda905400b38.png

Характеристики устройства

73fd8d1041bbecaa5f81b3426a913838.jpg

Понятно, что этот девайс не для игр, он не может выполнять слишком уж производительные задачи. Всё остальное он в состоянии делать, также у наладонника есть и беспроводной модуль связи с Wi-Fi. Работать он может в качестве обычного Linux-компьютера или UART-терминала.

Вот что он из себя представляет:

  • NanoPi Neo Air и терминал могут быть отключены или включены независимо друг от друга

  • NanoPi Neo Air реализован в качестве съёмного элемента

  • 800 × 480 TFT-дисплей, 100 × 30 символов

  • Wi-Fi

  • 71 клавиша

  • можно использовать сразу, без настройки

  • 10 000 mAh LiPo-батарея, 15 часов автономной работы

  • зарядка через Micro-USB

  • встроенный RTC

  • ASCII и Unicode, 256 цветов

  • 2 USB 2.0-порта

  • 16 GPIO NanoPi Neo Air, SWD и UART Pi Pico доступны для подключения аксессуаров

fe6121bf7c7de4bc6b0ac868e1ffdb5e.jpg

Из недостатков можно отметить то, что USB-порты расположены слишком близко друг к другу, места для их одновременного использования недостаточно. Кроме того, терминал вполне удобен в использовании, но он не особенно быстр. Собственно, удивляться здесь не приходится при текущих характеристиках. Главное, что можно использовать.

Кстати, что касается процессора и ОЗУ, то эти характеристики обусловлены базой, т. е. одноплатным ПК NanoPi Neo Air. Соответственно, это четырёхъядерный 1.2 GHz ARM Cortex-A7 процессор и 512 Мб ОЗУ.

Вот характеристики одноплатника, чтобы понимать, на что он способен:

  • размер: 25,6 × 25,6 × 3,0 мм

  • CPU: MT7628, 580 МГц, ядро MIPS 24K

  • RAM: 128 Мб, DDR2, 166 МГц

  • хранилище: 16M NOR на плате, поддержка SDXC до 2 Тб

  • Wi-Fi: 802.11n, 2T2R, до 300 Мбит/с

  • антенна: встроенная на плате и внешняя U.FL

  • Ethernet: 1 порт/5 портов, до 100 Мбит/с

  • USB: USB 2.0 (только хост), до 480 Мбит/с

  • GPIO: около 40 (pinmux)

  • UART: x3 (UART2 для отладочной консоли)

  • PWM: x4

  • PCIe (опция): x1 (опция)

  • температура: от 0 °C ~ 40 °C (полная нагрузка) или от −10 °C до 70 °C

  • питание: 3,6 V ~ 5,5 V, 500 mA

  • энергопотребление: 74 mA Wi-Fi режим ожидания, 230 mA Wi-Fi полная скорость, 5 V

  • логический уровень: все логические контакты 3,3 V, ток 4 mA/8 mA

cb1f685634d96af61ac30741296f7060.png

Как появился этот проект?

Его автор начал разработку после того, как решил изучить возможности Raspberry Pi и одновременно Python. У него уже были знания по разработке, но одноплатник пришлось немало исследовать, поскольку возможностей у девайса много, и хотелось создать нечто интересное. Ну, а поскольку автор давно уже скучал по наладонникам, то и выбор был предопределён. Правда, Raspberry Pi 4, с которым изначально работал автор, он решил заменить на NanoPi Neo Air.

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

de0d24c45b30f3c4b9dda0adac2d6f67.png

Самой трудоёмкой частью оказалось программирование, поскольку автору пришлось изучать всё с самого начала. Он начал с одного из маленьких экранов SPI TFT 320 × 240 и программирования на Python. Девайс, который получился в итоге, был медленным, но зато дал бесценный опыт. Позже автор узнал о плате Adafruit RA8875, которая обменивается данными через SPI, может использоваться до разрешения 800 × 480, имеет встроенный шрифт ASCII, курсор, перенос строк и прокрутку. Он может даже рисовать символы намного быстрее, чем их отправляет UART.

Сложности возникли с выводом символов на экран. В какой-то момент автору даже пришла в голову мысль отказаться от проекта, поскольку он не мог понять, как реализовать изменение размера области прокрутки (спойлер — \x1B[#;#r). Но затем всё получилось сделать путём механизма блочной передачи, а после — оптимизировать этот метод с буферизацией и многопоточностью.

Также порядочно времени занял процесс разработки кастомной платы для своего проекта. Так, автору пришлось научиться работать ещё и с KiCad. Рассчитана плата (прототип) была на обычные, а не SMD-компоненты, которые автор просто не знал, как паять.

346954cd6d6c41effc3860838efcaa98.jpg

Ещё одной сложностью стал вывод на экран символов, отличных от ASCII. К счастью, в RA8875 есть CGRAM для хранения пользовательских растровых изображений, поэтому автор решил создать растровые изображения для небольшого дополнительного охвата Unicode. Брайль был прямолинейным, я мог генерировать растровые изображения с помощью скрипта Python. В итоге я нарисовал остальные в текстовом документе и преобразовал их в массив C с помощью Python. После этого в течение пары месяцев автор оптимизировал код, чтобы сделать его лаконичнее и понятнее.

Но в итоге всё получилось, так что нареканий у разработчика ни на что нет. Ну, а вот так девайс работает:

Выглядит неплохо. В ближайшем будущем планируется оптимизировать устройство, изменить кастомную плату и добавить несколько новых возможностей. Что касается платы, это единственный кастомный элемент. Всё остальное собрано из элементов, которые можно приобрести, хотя некоторые и немного дорабатывались.

Файлы и ПО автор выложил в сеть — для желающих разработать нечто подобное. Доступны эти ресурсы вот здесь.

© Habrahabr.ru