Как стать автором
Обновить
2681.99
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

PortablePy: компьютер-раскладушка для MicroPython

Время на прочтение 4 мин
Количество просмотров 12K
Автор оригинала: Ramin Assadollahi
Признаю: мне очень нравится та невероятная скорость, с которой загружаются домашние компьютеры 1980-х годов. Я какое-то время пытался оптимизировать время загрузки Raspberry Pi, но особенно далеко в этом деле не продвинулся. Я, кроме того, большой поклонник специализированных устройств, в которых аппаратное обеспечение используется для решения какой-то одной задачи. Такие системы тоже работают очень быстро. MicroPython — это очень интересная разработка, попадающая в сферу моих интересов. Это, с одной стороны — «язык высокого уровня», а с другой — программный комплекс, который без особых сложностей работает на весьма скромных аппаратных ресурсах.



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

  • StickPi: очень маленькое устройство, основанное на Raspberry Pi Zero с e-paper-дисплеем, но без клавиатуры и без батареи, к которому можно подключаться с компьютера по SSH.
  • PocketPi: устройство, основанное на Raspberry Pi Zero, питающееся от батарей, оснащённое 4-дюймовым экраном HyperPixel (800x480 пикселей) и миниатюрной клавиатурой.
  • PsionPi: мой свежий проект, основанный на Raspberry Pi 3a+, работающий от батарей, оснащённый клавиатурой от Psion 5 Series, в состав которого входит Arduino-контроллер клавиатуры и 7-дюймовый дисплей с разрешением 800x480.
  • Ещё один проект, подробностей о котором я пока не публиковал, представляющий собой устройство, в состав которого входит 5-дюймовый дисплей, Raspberry Pi 3 и миниатюрная клавиатура.

Собственно говоря, все эти проекты объединяет то, что в них используются разные варианты платы Raspberry Pi. Когда же вышел Adafruit PyPortal Titano, я тут же влюбился в это устройство, так как оно объединяет в себе много интересного «железа» и 3,5-дюймовый дисплей с разрешением 320x480, который я, кроме того, «примерял» к своему проекту PocketPi.

Я, кроме того, недавно узнал о существовании электронных компонентов производства M5Stack, и об их миниатюрной и недорогой QWERTY-клавиатуре CardKB Mini с поддержкой I2C, которая меня прямо-таки «зацепила». Эта клавиатура использует Arduino для чтения данных с массива клавиш и для перевода информации о нажатии на клавиши в коды, которые можно передать во внешний мир. В результате это — моя третья клавиатура, в которой используется Arduino (первая — это механическая клавиатура, вторая — клавиатура для моего недавнего проекта PsionPi). У Adafruit PyPortal Titano имеется поддержка I2C. Поэтому я решил попробовать «подружить» это устройство и CardKB Mini.


Adafruit PyPortal Titano, CardKB Mini и источник питания

Первым делом мне хотелось соединить устройства и посмотреть на то, как пользоваться клавиатурой для ввода текста без применения компьютера или USB-клавиатуры. Клавиатура видна по адресу 0x5f, для наладки работы с ней нужно просто транслировать коды клавиш в буквы. Конечно, нужно привязать к соответствующим действиям разные специальные клавиши, вроде Delete, Backspace и Return. В результате получится нечто вроде минималистичного текстового редактора.

Вот видеодемонстрация совместной работы Adafruit PyPortal Titano и CardKB Mini.

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


Карманный калькулятор Casio, моё устройство, Nokia E61

Карманный калькулятор Casio с предыдущего рисунка, на самом деле, обладает корпусом-раскладушкой. А вот мой любимый Nokia E61, в плане дизайна, гораздо ближе к тому, что получилось у меня. Размеры чёрного основания устройства составляют 125x100 мм, что хорошо, да и, в любом случае, сильнее уменьшить готовое устройство не получится. В общем-то, монолитный корпус надоел мне сразу же после того, как завершилась его печать…

С другой стороны, логичным развитием идеи разработки корпуса, в плане его форм-фактора, является движение в сторону корпуса-раскладушки. Когда я держал в руках старый Game Boy Advance SP, я чувствовал, что хочу слышать приятный звук закрывания такого корпуса, и что мне хочется, чтобы у меня был бы миниатюрный компьютер, напоминающий этот Game Boy.


Модель корпуса в Tinkercad и Game Boy

Теперь размер основания составлял 100x80 мм, да и шарнир получился хороший. Я, кроме того, добавил магниты по углам корпуса для того чтобы зафиксировать его части, но эти магниты оказались не очень сильными и занимали много ценного пространства.

В этом видео показано сравнение Game Boy и моего корпуса-раскладушки.

Я, из интереса, попробовал разместить в новом корпусе экран из моего проекта PocketPi.


Экран от PocketPi в новом корпусе

Для того чтобы этой конструкцией можно было бы пользоваться, нужно поместить под экран Raspberry Pi Zero, подключить к экрану и к плате питание и соединить их друг с другом (не по WiFi).

Теперь пришло время заняться проектированием источника питания. В этот раз я решил не пользоваться платой Adafruit PowerBoost. Мне кажется, что она слишком дорогая, да и греется она очень сильно. У меня была пара подобных плат — более дешёвых, но и более крупных. Поэтому я решил попробовать воспользоваться ими. Для того чтобы сделать всю конструкцию тоньше и сэкономить место, я убрал USB-порт.


Работа над системой питания

Я, опять же, чтобы устройство было тоньше, убрал разъёмы с PyPortal и подключил питающий кабель напрямую, используя соответствующую схему.


Подключение питания к PyPortal

И, наконец, я убрал разъём с клавиатуры и просто спаял компоненты моего компьютера.


Компоненты компьютера, подключённые друг к другу

Мне пришлось кое-что изменить в корпусе и сделать в нём отверстия для USB-C-разъёма PyPortal, для выключателя питания и Micro-USB-порта, используемого для зарядки устройства. Потом я разместил в корпусе подсистему питания.


Размещение компонентов в корпусе

Клавиатуру я закрепил с помощью двустороннего скотча.


Готовое устройство

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

Я написал на Python небольшую утилиту для работы с файлами и минималистичный редактор. Сейчас проблема заключается в невозможности записи данных во флэш-память платы при подключении её к компьютеру по USB-C. И мне ещё надо разобраться с тем, можно ли писать во флэш-память при работе устройства от батареи. Я продолжаю заниматься этим проектом, и, вполне возможно, ещё что-нибудь о нём расскажу.

Хотите сделать себе миниатюрный узкоспециализированный компьютер?

Теги:
Хабы:
+40
Комментарии 18
Комментарии Комментарии 18

Публикации

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds