Всегда хотел себе собрать этот футуристический компьютер из вселенной Fallout, но осознавал, что это может потребовать много времени. С появлением 3д принтера, понемногу печатал множество деталей, входящих в архив. На основную деталь корпуса ушло аж 17 часов! Когда, по итогу все было распечатано, пришлось еще подгонять детали. Где-то от перегрева платформы самые большие детали немного выгнулись. Наращивал их содой с суперклеем, потом подгонял напильником и наждачной бумагой.
Потом покрасил обычной темной краской, но понимал, что далее придется кисточкой придавать “ржавые” оттенки. Кстати, есть несколько моделей для 3д печати, я остановился на моделях на сайте Adafruit. Инструкция, правда, как оказалась, не особо актуальна в наше время.
И вот почему. Готовый скачанный образ для raspberry pi b+ не стартанул на моей первой обычной raspberry b, как я понял зависание произошло где-то на инициализации экрана, видимо разные частоты SPI, так-что на этом я тогда и забросил этот проект. Но недавно, спустя почти год от первой попытки, решил попробовать собрать этот образ сам. Конечно, плата 2011 года не внушала доверия, и я принялся подбирать образ raspbian посвежее, который без проблем заведется. По итогу остановился на 2020-02-13-raspbian-buster, который скачал с ftp архивов raspbian. Форматируем через SD-formatter нашу карточку, а потом с помощью BalenaEtcher записываем образ.
Настройка Raspbian для запуска экрана 3.5 TFT на Raspberry Pi.
Первой задачей было запустить экран, потому что сразу он конечно не заработал. Экран выбрал самый популярный с тачем XPT2046 и разрешением 480х320.
После установки образа, первым делом нужно включить SSH. Я соединяю raspberry по hdmi, и подсоединяю клавиатуру. Вводим sudo raspi-config в терминале. Далее в меню interfacing options – далее в SSH. Выбираем, что хотим включить – yes. После этого, от телевизора можно отключиться и перейти в терминал на домашнем компьютере.
Теперь надо скачать драйвера дисплея и установить их. Авторизуемся по SSH (у меня стандартный адрес малины 192.168.1.3, но всегда можно найти через advanced IP scanner). Скачиваем драйвера, собираем их. Интернет обязательно должен быть на raspberry в этот момент.
git clone https://github.com/waveshare/LCD-show.git
cd LCD-show/
chmod +x LCD35-show
./LCD35-show
Далее компьютер перезагрузится сам, но если этого не произошло, вводим sudo reboot и смотрим, что получилось. Дисплей и тач должны заработать.
Подключаем и проверяем звук на Raspberry PI.
Далее перейдем к звуку, ведь наш Pipboy должен более реалистичным. Я порезал джек 3.5 от старой гарнитуры, и усилитель тоже купил другой (УНЧ 2x3W PAM8403,Uпит=2,5-5V DC), не такой как в инструкции adafruit. Так как, звук скорее всего моно, а контакт микрофона мне и вовсе не нужен, я его объединил с землей. Каналы левый-правый тоже объединил. Динамик выбрал такой – Динамик FR-0004 (DXP4ON-A) 8ohm 0,25W d40mm. В итоге схема выглядит так:
Все посадил на термоклей, потому-что на этом усилителе нет отверстий под саморезы.
Проверить звук на Raspbian очень просто. Скачаем любой пример аудиозаписи и запустим на воспроизведение
wget https://download.samplelib.com/wav/sample-6s.wav
aplay sample-6s.wav
Настраиваем игру Pipboy с репозитория
Оригинальная игра-оболочка лежит в репозитории, который к сожалению не обновлялся очень давно. Но начал я с него, чтобы посмотреть, что там. Написан он на pygame, еще на питон 2.7. Образ Raspbian я неспроста выбрал, потому-что в нем по умолчанию именно версия 2.7. Давайте скачаем этот репозиторий, и установим зависимости. Я не стал делать виртуальное окружение, потому-что кроме этой игры мы ничего запускать не будем.
git clone https://github.com/sabas1080/pypboy.git
cd pypboy
pip install -r requirements.txt
Запускать скрипт пока не будем. Настроим графику. Редактируем файл конфига через sudo nano config.py и меняем параметры разрешения
import pygame
WIDTH = 480
HEIGHT = 320
Также настроим запуск во весь экран. Перейдем в папку game и откроем файл core.py на редактирование
cd game
sudo nano core.py
Теперь делаем замену строчки:
self.window = pygame.display.set_mode((width, height))
на
self.window = pygame.display.set_mode((width, height), pygame.FULLSCREEN)
Есть интересный момент, если вы сейчас попробуете запустить главный файл скрипта main.py через ssh, то ничего не выйдет. Получите ошибку – pygame.error: Unable to open a console terminal. Чтобы этого избежать и запустить приложение с графикой удаленно через SSH, нужно настроить запуск на удаленном дисплее. Сначала выполнить export DISPLAY=:0 (где 0 – номер дисплея). А затем запустить скрипт из родительской директории репозитория
export DISPLAY=:0
python main.py
На данном этапе, все должно запуститься, с изображением и звуком
Можно закомментить GPIO в config.py, и посмотреть меню с клавиатуры. Уже здесь я испытал восторг от этого теплого меню детства. Но радость быстро прошла – карта странно работает, да и функций не так то много. В следующей статье мы настроим юнит systemd для автоматического запуска приложения при старте компьютера, подключим периферию для управления и попробуем пару форков проекта pipboy, которые обновляли под современные реалии.