Ретро-игровой центр на Raspberry Pi

    Ну вот и наступили майские праздники, в которые можно расслабиться и отвлечься от дел.
    Кто-то поехал на природу, жарить шашлыки, кто-то — копать картошку, а кто-то, как я, решил остаться дома и релаксировать. Но как сделать это с пользой? Не прибегая к загрузке мозга очередными мануалами? И тут мне на глаза попалась моя неприкаянная Raspberry Pi. А вкупе с ностальгическим и тёплым ламповым настроением у меня родилась идея: а можно ли из RPI сделать игровую систему? Вбив в Google, нашлось простое и очень доступное решение, с которым я и хочу с вами поделиться. Кому интересно – прошу под кат.



    Как оказалось, это тема не новая, и уже промелькивала на Хабре. Тем не менее за время её публикации прогресс шагнул вперёд, и следует чуть поподробнее рассказать об этом.

    Вся система базируется на порте RetroArch, основанной на библиотеке libretro, позволяющей использовать эмуляторы различных приставок (NES, SNES, Sega Genesis, PlayStation, а так же SCUMMVM, zxspectrum) через общий API. За интерфейс и удобство пользования отвечает GUI — EmulationStation. Сегодня, чтобы получить полностью работающую систему достаточно использовать готовый образ RetroPie.

    1. Скачиваем RetroPie Project SD card Image
    2. Записываем на SD-карту с помощью dd для Linux, Wind32DiskImager для Windows или RPi SD card builder для MacOS.
    3. Подключаем видео, аудио кабели, сетевой кабель, клавиатуру и контроллеры (геймпады), вставляем SD-карту и включаем (вставляем mini-usb штекер питания).



      Обратите внимание на совместимость джойстиков – некоторые из них требуют дополнительного питания, и тогда необходимо будет использовать USB-хаб с питанием. Так же, вполне вероятно, что-то придётся допиливать ручками. В моём случае я использовал фирменные джойстики от Microsoft Xbox 360, которые завелись без проблем.


    4. Дожидаемся загрузки системы, и после того, как она загрузится, выходим в консоль (F4)
    5. Заходим в утилиту конфигурации:
      sudo raspi-config
    6. Выбираем “Expand Filesystem”, нажимаем OK



    7. Идём в Advanced -> memory split, выставляем для модели “B” 256
    8. Возвращаемся, идём в Internationalization Options, там выбираем локаль, раскладку клавиатуры и временную зону (в моём случае это пара US и RU в UTF8).



    9. После настройки нажимаем "Finish", перезагружаемся.
    10. После загрузки системы снова идём в консоль (F4) настраивать джойстики.
    11. Устанавливаем драйверы:
      sudo apt-get install xboxdrv
    12. Правим настройки:
      sudo nano /etc/rc.local
    13. Добавляем в конце (перед fi) строчку:
      xboxdrv --trigger-as-button --id 0 --led 2 --deadzone 4000 --silent & sleep 1
      В случае, если у нас джойстиков больше одного, то увеличиваем на единицу id и led (для второго – 1 и 3 соответственно). Если джойстик беспроводной, то вместо id будет wid.
      Не забываем сохранить (нас спросят о сохранении при выходе: ctrl+x, отвечаем Y).
    14. Перегружаем систему:
      sudo reboot




    15. После загрузки соглашаемся настроить джойстики, нажимая, что просит система. После завершения настройки опять идём в консоль (F4).
    16. Переходим:
      cd RetroPie/emulators/RetroArch/installdir/bin
    17. Настраиваем джойстики:
      ./retroarch-joyconfig -o p1.cfg -p 1 -j 0
      Убеждаемся, что под j 0 у нас действительно xbox джойстик, в противном случае обрываем (ctrl+c) и увеличиваем цифру на единицу. Если это наш джойстик, то нажимаем те кнопки, что спрашивает конфигуратор. Для второго и последующих джойстиков увеличиваем цифры в вызове на 1 до того момента, пока всё не будет введено.
    18. Копируем наши настройки в систему:
      	sudo cat p*.cfg >> ~/RetroPie/configs/all/retroarch.cfg
      В том случае, если где-то накосячили при настройке джойстиков, то удалите конфиги:
      rm /home/pi/.emulationstation/es_input.cfg
      rm ~/RetroPie/configs/all/retroarch.cfg




    19. Чтобы не поломать SD-карту при перезагрузке из-за зависания эмулятора, и чтобы это сделать с джойстика нужно сделать следующее:
      sudo nano ~/RetroPie/configs/all/retroarch.cfg
      Добавить строки:
      input_enable_hotkey_btn = «X»
      input_exit_emulator_btn = «Y»
      Где X и Y – соответствующие кнопки (это обычно кнопки в центре геймпада).
    20. Теперь, чтобы скопировать ROMы на Raspberry лучше использовать передачу через сетку.
      Cмотрим ifconfig’ом IP-адрес нашей RPI. Подключаемся через сетку с компьютера (например через winscp для Windows) используя логин pi и пароль raspberry.Копируем файлы на Raspberry в соответствующие папки /home/pi/RetroPie/roms.
    21. Чтобы всё работало и выглядело красиво, доставляем и запускаем:
      cd RetroPie/supplementary
      git clone https://github.com/elpendor/ES-scraper

      cd
      cd RetroPie-Setup
      sudo ./retropie_setup.sh
      Выбираем: SETUP -> Run ‘ES-scraper ->(Re-)scape of the ROMs directory
      В результате это действие просканирует наши ромы и скачает картинки и описание игр.
      Однако это при добавлении новых ROMов нужно будет каждый раз.
    22. Перезагружаем Raspberry Pi (можно заодно выключить клавиатуру и, если надо, сетку) (sudo reboot / sudo shutdown –h now) и после загрузки наш RPI полностью будет готов к работе.




    Что можно сделать ещё?

    • Достать оригинальные джойстики и подключить их через GPIO
    • Добавить hardware-ные кнопки, так и сделать игровой автомат на raspberry
    • Сделать консоль портативной.


    Но я не фанат такого хардкора, как тот же Pixel_Devil (который, кстати и вдохновил меня на этот эксперимент), поэтому остановился на достигнутом результате. Теперь буду и сам предаваться ностальгии и с друзьями играть :)
    Поделиться публикацией
    Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

    Зачем оно вам?
    Реклама
    Комментарии 11
    • +4
      Не прочитал ничего нового.
      • +3
        Да. К тому же эта тема где то уже была на хабре. Ссыль
        • +4
          а как же картинка с динозавром?
          • 0
            А ну да!!! Классно!!! Две фотки игрушки, фотка падов и пара скриншотов распиконфига. Плюс немножко консольных команд. Огонь статья!
            PS А автору минус за то, что минуснул мне карму за здравую критику. Слов нет — красавчик.
            • 0
              У Вас есть возможность самому написать что-то полезное и новое.

              Тем, кто с темой не знаком, или знаком, но не копался, статья оказалась полезной, т.к. всё описано и работает из коробки без лишних напильников. Остальные вполне могут пройти мимо.

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

              Кроме того, в любой статье есть критерии новизны, полезности и стиля подачи материала.
              • 0
                Честно говоря статья полезна только если речь о подключении таких же геймпадов, как у вас. В противном случае как минимум пункты 11-13 вызывают ступор, так как не поясняется как быть, имей я другие устройства. К примеру откуда взялся параметр "--deadzone 4000"? Методом проб и ошибок он выяснен или вычитан в документации? Одинаков ли он для всех устройств? И т.п.
                Т.е. статья с замахом на мануал, но по факту вы рассматриваете лишь частный случай, каких может быть огромное множество.
        • +1
          Кстати на Амазоне интересная плата расширения для PI

          SainSmart Expansion Board for Raspberry PI Designed for Ease of Use
          image


          The X100 expansion board designed for use on the Raspberry Pi (RPi) computer platform. The board supplies RPi with a regulated +5V from a wide-range voltage source and also contains a real-time clock, a RS232 master port, a HDMI to VGA converter, 3-port USB hub, memory card reader, and 8-channel darlington Driver.
          • +1
            А ни у кого не было проблем с запуском ромов от N64? У меня почему-то нормально заводиться не хотят( Либо покадрам двигаются, либо вообще не запускаются… Может есть какие-то особые настройки для mupen или нужно какой-то другой эмулятор использовать?
          • 0
            Разбираю пошагово его установку на Raspberry Pi 3.

            Не понимаю, как сделать обновление библиотеки ROMов, при добавлении новых в папку?
            В папке ROM есть, а в каталоге, из оболочки его нет. Перезагрузка эффекта не дает.
            Имхо, необходимо сделать обновление данных, вопрос как?

            И второй вопрос, при запуске на Raspberry Pi 3, категорично не работает WIFI.
            Канал на роутере стоит необходимый;
            Железо заведомо рабочее, на др. ОС все работает.

            Предположу что проблема с дровами. Вопрос как их обновить/переставить?
            • 0
              Не понимаю, как сделать обновление библиотеки ROMов, при добавлении новых в папку?

              Вы невнимательно прочитали п.21:

              sudo ./retropie_setup.sh
              Выбираем: SETUP -> Run ‘ES-scraper ->(Re-)scape of the ROMs directory

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.