Одна из самых популярных самоделок на Raspberry PI - это всевозможные эмуляторы игровых приставок. Их множество - аркадные автоматы с большим экраном и панелью, как на старых игровых автоматах, карманные приставки и даже полностью готовые печатные платы, в которые нужно только Raspberry PI вставить и добавить корпус. Я выбрал модель PiGRRL Zero от компании Ardafruit. Это известный в мире поставщик всевозможных самоделок и компонентов для них. К сожалению, в Россию они ничего не отправляют и даже услугами служб вроде “Бандерольки” воспользоваться не дают. Я купил комплект когда был в Америке. Остальным можно попытаться купить его через ebay. Существенный плюс комплекта - вменяемая цена, 60$ за комплект вместе с Raspberry Zero, но без корпуса. Схемы для 3D печати корпуса доступны для свободного скачивания и его печать можно заказать в любом крупном городе за довольно небольшие деньги. Большинство поделок, которые продаются комплектами для сборки стоят дороже.
Минус заключается в маленьком экранчике, 2.2 дюйма диагональю. Такое решение имеет причину, экран выбран подключаемый через GPIO порты. Это удобно, но такие экраны не поддерживают работу с видеоускорением. В PiGRRL Zero используется специальная утилита для обхода этого ограничения, но это затрачивает дополнительные ресурсы и для плавной работы эмуляторов нужен экран с разрешением 240x320. Отсюда и его маленькие размеры.
Сама сборка довольно несложная. Руководство опубликовано на сайте Adafruit. В целом сборка несложная, если есть навыки пайки. Расскажу с какими сложностями столкнулся я. Во-первых провода для подключения геймпада к Raspberry нужно тщательно вымерять. Я оставил некоторый запас по длине и потом эти торчащие провода мешаются, когда защёлкивается корпус. Лучше, чтобы провода были почти внатяг, будет сложнее сборка, но потом проще отлаживать готовое изделие. Лучше, если каждый провод идёт строго к тому пину GPIO, который указан на схеме.
Я ошибся при разводке проводов и потом вынужден был исправлять ошибки программно. Про это ниже, руководство по исправлению проблем даёт следующие советы. Там написано, что должен быть файл /boot/retrogame.cfg в котором указано, каким действиям какой вывод GPIO соответствует. К сожалению, образ Retro Pie выложенный на странице проекта содержит старую версию утилиты Retrogame, который этого самого файла retrogame.cfg не содержит. Так что нужно апгрейдить retrogame до новой версии. Ну или перепаять выводы правильно. Я возится с перепаиванием проводов не стал и решил проблему программно. Для этого потребуется USB хаб. С USB 3.0 могут быть проблемы, поэтому нужен USB 2.0. Лучше, если это будет активный хаб с внешним питанием, но у меня всё получилось и с пассивным. К хабу нужно подключить клавиатуру и WiFi адаптер из комплекта. Перейти в настройки RetroPie и там подключиться к WiFi сети. Приёмник маломощный, так что лучше находится поближе к роутеру в этот момент. Когда PiGRRL Zero подключился к сети внешняя клавиатура и хаб уже не нужны. Можно включать WiFi адаптер напрямую к USB порту и подключаться к устройству через SSH. Если всё это звучит для вас как хитрое колдунство - возможно, проще всё же будет перепаять проводки. Однако, лучше научиться подключаться через SSH. Иначе чтобы залить ромы игр на приставку придётся записывать их на флешку, подключать хаб с внешней клавиатурой и копировать их файловым менеджером с флешки в нужные каталоги. Учитывая мелкий экранчик это очень-очень неудобно.
Если подключение удалось - делаем следующее:
cd // Переходим в домашний каталог
curl -k -O https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/retrogame.sh
// Скачиваем скрипт для обновления retrogame. Обратите внимание на ключ -k, в руководстве его нет, но мне пришлось добавить,
// т.к. была какая-то проблема с сертификатом безопасности, этот ключ позволяет скачивать без проверки сертификата безопасности
sudo bash retrogame.sh
</code>
У меня скрипт не сработал как надо, пришлось редактировать его и добавить ключи -k ко всем командам на скачивание в скрипте. Если он работает нормально - выбрираем в диалоге использование файла конфигурации для PIGRRL Zero. Теперь файл /boot/retrogame.cfg появляется. Редактируем его и указываем верные номера GPIO для каждого действия. В моём случае я просто нажимал на кнопки PIGRRL Zero в терминале, записывал символы, привязанные к каждой кнопке и потом в файле конфигурации я просто поменял местами номера портов GPIO. Есть альтернативное решение - можно прозвонить выводы GPIO мультиметром. Вот схема нумерации выводов GPIO.
!(https://pinout.xyz/resources/raspberry-pi-pinout.png)
Помимо проблем, описанных выше, я решил, что вместо того, чтобы паять USB переходник для Raspberry Zero лучше купить готовый USB OTG кабель и срезать пластик вокруг его разъёмов. Подсказка, кабель должен быть короткий. Я взял довольно длинный и его не получилось хорошо уложить в корпусе устройства. В итоге пришлось всё равно отрезать кусок и перепаивать провода.
В конце концов моё устройство работает. Я где-то ошибся с конфигурацией для ZX Spectrum отчего эмулятор ZX сейчас не работает и придётся где-то это исправлять. Где, я пока не разобрался.
Эта статья - краткое описание моего собственного опыта, а не руководство по решению проблем при сборке эмулятора игровых приставок на Rasperry PI. Если у вас остались вопросы - а они наверняка остались, если вы столкнулись с теми же проблемами, что и я - пишите в комментарии, связывайтесь со мной по электронной почте или через социальные сети. Я попробую помочь вам решить возникающие проблемы.