Форум программистов, компьютерный форум, киберфорум
Наши страницы
Джойстики, геймпады, рули
Войти
Регистрация
Восстановить пароль
 
JeikiS
0 / 0 / 0
Регистрация: 28.07.2018
Сообщений: 10
1

Подключаем любой манипулятор к игровой консоли

02.12.2019, 14:49. Просмотров 120. Ответов 0

Подключаем любой манипулятор к игровой консоли


Доброго времени суток, уважаемые камрады

Сегодня я расскажу вам о замечательном лайф хаке, который позволяет подключить любой манипулятор(будь то геймпад, джойстик, руль, клавиатура, мышь или все вместе и в любой конфигурации) к PlayStation или XBox. Освещать этот вопрос, я буду на примере подключения манипулятора HOTAS для игры в Elite: Dangerous на PlayStation 4.
(да да, это перевыпуск той самой элиты, в которую мы залипали ночами на спектруме на заре 90-х).


Собираем манатки

Итак, что у меня изначально было:
  • консоль PlayStation 4 Slim;
  • игра Elite: Dangerous;
  • джойстик HOTAS Saitek x45 Flight Control System;
  • острое желание подружить всё это.
Что мне пришлось докупить/откопать:
  • одноплатный компьютер Raspberry Pi 3b (примерно 2000руб.);
    Можно использовать любой другой одноплатник, как Raspberry, так и один из его многочисленных клонов, главное чтоб он по ттх вывозил.
  • USB2TTL адаптер на известном чипе cp2102(примерно 60руб.);
    Опять же, можно любой другой usb2ttl толерантный к 5-ти вольтам, cp2102 автоматически определяется как в Raspbian, так и в Windows, да и ценник шикарный - потому мой выбор пал именно на него.
  • карта памяти microSD минимум на 4 Gb(нашёл в хламе);
    Очень рекомендую использовать карту Class 10 UHS-I, в противном случае Raspberry будет весьма нерасторопной.
  • плата микроконтроллера Arduino Pro Micro (примерно 200 руб.);
    И тут можно любой клон, типа Teensy 2.0, Leonardo и тп. Главное на что надо обратить внимание: чип ATmega32u4 и напряжение питания 5В.
  • источник питания на 5В, 2А USB(нашел в хламе);
  • три кабеля USB -> MicroUSB(нашёл в хламе);
  • кабель HDMI(нашёл в хламе);
  • макетные соединительные провода для Arduino(в моем случае, прилагались к cp2102).
Как всё это работает: Raspberry, при помощи опенсорсной софтины GIMX, обрабатывает состояние осей и кнопок вашего любимого, несовместимого с консолью, манипулятора, сопоставляет их с кнопками/осями DualShock 4 и, через USB2TTL-адаптер отправляет их на Arduino, который эмулирует DualShock 4(или любой другой манипулятор, официально совместимый с вашей консолью) и подключается к USB порту консоли.

Звучит запутанно, но на самом деле всё очень просто.


Подготовка

Скачиваем актуальный дистрибутив Raspbian, у меня это был Raspbian Buster with desktop.
Распаковываем скаченный архив и заливаем его на флешку с помощью Win32DiskImager.
Компьютер нам больше не нужен, забираем клавиатуру с мышью идем к телеку, вставляем карту памяти в Raspberry Pi, подключаем её к телеку через HDMI и запитываем от источника питания, если предыдущие пункты выполнены корректно, запуститься Raspbian и предложит произвести первоначальные настройки и обновить систему до актуального состояния. Важный момент: при подключении к сети предпочтительней использовать wi-fi модуль, потомучто Ethernet модуль работает через тот же мост что и шина USB, а это вызывает какието коллизии, перегрев или еще чтото в этом роде, со слов авторов GIMX.

После обновления и перезагрузки Raspbian, устанавливаем актуальный GIMX для ARM-процессоров, для меня это был GIMX 7.15.

Устанавливаем deb пакет, перезагружаемся. Запускаем GIMX-Launcher, подключаем micro-USB кабель от Arduino к USB Raspberry, выбираем пункт help и update firmware, в качестве прошивки выбираем emups4.hex(так как мы хотим чтоб arduino эмулировало dualshock 4). После чего launcher попросит вас разомкнуть и снова воткнуть USB кабель от Arduino и известит вас победным сообщением о завершении прошивки.
Картинка.

Отключаем Arduino от Raspberry Pi, теперь это эмулятор dualshock 4, нам нужно на него отправлять команды из GIMX, делать это будем посредством USB2TTL-переходника, для этого нужно соединить макетными соединительными проводами Arduino и USB2TTL-переходник по следующей схеме:

Код
Arduino              USB2TTL
  TX         ->        RX
  RX         <-        TX
  GND        --        GND
В моем случае, на ардуино пришлось впаять три штырька (pls).


Подключение

Итак у нас всё готово, можно приступать к подключению. Что у нас и как должно быть подключено, чтоб все заработало, подключаем/проверяем:
  • к microUSB Raspberry Pi, подключаем кабель питания, подключенный к источнику;
  • к HDMI разъему Raspberry Pi, кабель подключеный к телевизору/монитору;
  • к USB Raspberry Pi, подключаем ваш любимый манипулятор(Saitek x45,в моем случае);
  • к USB Raspberry Pi, MicroUSB кабелем, подключаем DualShock 4;
  • к USB Raspberry Pi, органы управления для первоначальной настройки(клавиатура+мышь);
  • к USB Raspberry Pi, подключаем USB2TTL переходник, с подключенным к нему по TTL Arduino;
  • Arduino соединяем MicroUSB кабелем с игровой консолью.


Первый запуск

Перед тем как приступить к настройкам нашего манипулятора, неплохо было бы убедится что, собранный нами, GIMX-адаптер функционирует корректно. Для этого запускаем GIMX-Launcher, меню Help -> Get configs, тут можно загрузить готовые конфигурационные файлы, предоставленные другими пользователями GIMX. Самое простое это загрузить конфиг Dualshock4.xml, при этом дуалшок, подключенный к Raspberry, будет эмулировать сам себя. Я пошел по более сложному пути, у меня уже были подключены к Raspberry клавиатура и мышь и я сразу решил их использовать, загрузив конфиг для клавиатуры и мышки для BattleField V(PS4_BattlefieldV_Godlike.xml).
Включаем игровую консоль;
Настройки в окне GIMX-Launcher устанавливаем следующим образом:
Код
Output: GIMX adapter;
Port: ttyUSB0;
Input: Physical devices;
Config: Dualshock4.xml;
Messages: text;
Mouse capture: auto.
Нажимаем кнопку Check и убеждаемся в том что GIMX видет наш манипулятор и консоль. После этого давим вожделенную кнопку Start, откроется выводное окно GIMX, с приглашением нажать кнопку ассоциированую с кнопкой PS(кнопка включения DualShock). Впринципи уже можно потыкать кнопки и стики дуалшока подключенного к распберри и увидеть в выводном окне значения, которые GIMX отправляет на игровую консоль, после чего нажать кнопку включения манипулятора для запуска эмуляции. Консоль должна сообщить о подключении нового манипулятора, с этого момента консоль должна полностью управляться с дуалшока подключенного к распберри. Если это так, то наш GIMX адаптер полноценно функционирует.


Создание конфигурационного файла

Для создания таблицы соответствия осей и кнопок вашего любимого манипулятора с осями и кнопками дуалшока разработчики GIMX создали програму GIMX-config(еще есть GIMX-fpsconfig, но её юзабельность, по моему скромному мнению, стоит под большим вопросом). Сразу оговорюсь, что софтина сделана не для людей, но после недолгих мытарств становится понятным что и куда. Функционала напресованно очень много, и весь его объем мне освоить пока еще не удалось, так что поле для наращивания функционала еще весьма обширное.

Итак, открываем GIMX-config, File -> New. Вначале настроим оси: переходим во вкладку Axis, давим кнопку Auto Detect и двигаем той осью, которую собираемся ассоциировать, при этом софтина должна определить ось джойстика и отобразить её название в окне Device. В выпадающем списке Axis отображены все оси дуалшока которые можно эмулировать, выбираем подходящую для нас(например lstick X, это ось X левого стика). В поле Label можно ввести пометку для себя на будущее(например: "обзор вверх-вниз"), остальные параметры заполнялись по дефолту и я их не трогал. Для добавления строки в табличную часть нажимаем кнопку Add. Чтобы изменить введенные параметры надо кликнуть по строке в табличной части, чтоб она выделилась полностью и нажать кнопку Modify, после чего отредактировать параметры в верхней строке(где вводили первоначальные данные) и нажать кнопку Apply. При желании, можно сопоставить значение какой либо оси на кнопку(к примеру при нажатии на 20-ю кнопку джойстика, на дуалшоке зажимается левый стик наверх на 100%), для этого в выпадающем списке Event надо выбрать button, потом давим Autodetect и прожимаем нужную кнопку на джойстике. Далее переходим на вкладку Button и настраиваем соответствия кнопок вашего манипулятора с кнопками дуалшока, настройка производится в общем и целом так же как и соответствие осей.
После всего не забываем сохранить наш конфигурационный файл: File -> Save As -> имя_файла.xml.
Можно взять уже готовый конфигурационный файл, из скачанных, и изменить его под свои нужды. Для этого File -> Open, выбираем конфиг и модифицируем его.


Создание макросов

Очень важная функция GIMX это макросы, покрайней мере для Elite: Dangerous. Макрос это последоватьельность команд, выполняющихся в определенном порядке, которую можно назначить на определённую кнопку вашего манипулятора. Для макросов был создан свой скрипт язык, описывать, в рамках данной статьи я его не буду, а сошлюсь на первоисточник и покажу пример простого макроса с комментариями.
Макросы пишуться в новом текстовом файле(имя_макроса.txt) и складываются в специально отведенную папку, которую можно найти запустив GIMX-launcher -> File -> Open macro directory.

Для примера рассмотрим следующий макрос: зажимаем и держим квадрат, нажимаем крестовину влево, отпускаем квадрат(в Elite эта комбинация открывает панель навигации). Важно отметить, что для всех использующичся в макросе кнопок уже должны быть настроены соответствия в GIMX-конфигураторе. Предположим мы забиндили квадрат на первую кнопку нашего джойстика, а крестовину влево на вторую, третья кнопка будет выполнять макрос:
Код
#объявляем начало макроса при нажатии на кнопку 3
MACRO JBUTTONDOWN 3
#зажимаем кнопку 1(забинденную на квадрат)
JBUTTONDOWN 1
#ждем 100 мс(реакция интерфейса)
DELAY 100
#зажимаем кнопку 2(забинденную на крестовину влево)
JBUTTONDOWN 2
#ждем 100 мс(реакция интерфейса)
DELAY 100
#отпускаем кнопку 2
JBUTTONUP 2
#отпускаем кнопку 1
JBUTTONUP 1
Кладем файл с таким содержимым в папку макросов, запускаем GIMX и теперь при нажатии на 3-ю кнопку джойстика подключенного к распберри, на консоль будет отправляться комбинация нажатий кнопок описанная выше.
в одном файле можно описать множество макросов, хоть все, а можно разделить файлы по тематике.


Добавляем GIMX в автозагрузку

Когда у нас уже все заработало, надо сделать так чтоб GIMX загружался автоматически при включении системы.
Запускаем окно терминала и создаем файл с настройками програмы:
Код
sudo nano /etc/systemd/system/gimx.service
файл наполняем следующим содержимым:
Код
[Unit]
Description=GIMX  
After=syslog.target network.target

[Service]
User=pi  
Type=simple  
# Replace /dev/ttyUSB0 with /dev/ttyAMA0 when using the on-board UART interface
ExecStart=/usr/bin/gimx -p /dev/ttyUSB0 -c ED.xml --nograb  
Restart=always  
RestartSec=5

[Install]
WantedBy=multi-user.target
при необходимости тут надо будет заменить ttyUSB0, если вы используете другой порт для коммуникации и конфигурационный файл ED.xml на ваш любимый.

далее с терминала запускаем gimx и прописываем его в автозагрузку

Код
sudo systemctl daemon-reload
sudo systemctl enable gimx && sudo systemctl start gimx
Домашнее задание

Простор для творчества и улучшений просто огромен, первое что я наметил для себя:
  • организовать соединение к PlayStation по bluetooth;
    для этого нужен bluetooth-адаптер, у которого можно подменять адрес устройства, на сайте GIMX рекомендуют чип CSR8510, я заказал такой на известном китайском сайте, вчера забрал с почты, но еще не проверял;
  • в качестве источника питания использовать пауербанк;
    получим полностью беспроводное решение;
  • использовать UART который встроен на Raspberry Pi;
    у распберри есть свой уарт, который выведен на системный разъем, заместо usb2ttl переходника, можно использовать его, освободится usb-порт. Но в случае, если все хорошо заработает с bluetooth, не так актуально;
  • Сделать плату для системного разъема RPi;
    На плату хочу вывести кнопки включения/выключения и светодиоды которые будут свидетельствовать о том что GIMX запустился.
  • Решить вопрос со звуком;
    тут пока вообще незнаю что делать, мы лишаемся и наушников и микрофона, которые включались в DualShock. Пока я вижу 2 варианта: но они оба мне не нравятся: первый - дорогой, это приобрести наушники аля Sony Gold Wireless Stereo Headset, второй - жутко неудобный, но пока пользуюсь им, подключаюсь с другого аккаунта дуалшоком и другого аккаунта зову в тусовку, к которой сам уже подключен.
  • использовать Raspberry Zero W;
    использовать Raspberry Pi 3B для GIMX, эт как из пушки по воробьям палить, опять же зеро в два раза дешевле и энергопотребление ниже
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2019, 14:49
Ответы с готовыми решениями:

Написать программу «Манипулятор робота» так, чтобы она рисовала манипулятор из n сегментов
Здравствуйте)). Прошу помочь. Написать программу «Манипулятор робота» так, чтобы она рисовала...

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

Получение ввода пользователя в консоли из любой части программы
Здравствуйте! Нужна такая помощь. Есть консоль. Надо принимать ввод пользователя всегда, тоесть...

Кто слышал о новой игровой консоли Xbox One?
Да, когда почитал в новостях за эту новинку, то приятно удивился, насколько вперед летит поколение...

Как на любой версии ОС Windows 10 (ENG / RUS) получить русские символы в консоли ?
Как на любой версии ОС Windows 10 (ENG / RUS) получить русские символы в консоли ? Сижу на ENG...

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2019, 14:49

Почему если в консоли ввести вместо числа любой символ, программа впадает в бесконечный цикл?
Всем привет! Недавно начал изучать С++ и столкнулся с проблемой при создании калькулятора. Если в...

Сделать так, чтобы в любой момент в консоли можно было нажать определенную кнопку для получения списка клиентов
Нужно сделать так, чтобы в любой момент в консоле можно было нажать определенную кнопку для...

Как поменять цвет текста консоли на любой цвет из RGB цветов
Цвет консоли можно поменять используя только 16 встроенных цветов или можно использовать комбинации...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.