Как играть в GTA с помощью Mi Band
Mi Band — довольно бесполезная штука, если вы разработчик. Однако существуют хитрости, которые позволяют получать полезные данные с часов, в том числе данные акселерометра, что мы, собственно, и будем делать.
На основе данных акселерометра будут эмулировать нажатия клавиш вверх, вниз, право и влево. По итогу вы сможете управлять машинами или персонажами в играх. Это не так удобно, как джойстиком, но веселуха та еще)
Уровень сложности
- Если вы программист или просто технически подкованы — 🟡 Medium.
- Если вы простой смертный — 🔴 Очень hard.
Что понадобится
- Mi Band 5 или 6. Скорей всего и на 4 получится.
- Собственно Mi Fit.
- Программа Automate для Андроид (бесплатно).
- Программа Notify for Mi Band (v21.7.4+). Понадобится PRO-версия.
- Компьютер с Node.js на борту.
- Компьютер и телефон должны быть подключены к одному WiFi.
Как это работает?
Notify соединяется с вашими часами и прослушивает различные события с часов. Включив в Notify интеграцию с Tasker (Automate в нашем случае), он будет транслировать эти события в другие приложения через интенты. В Automate мы прослушиваем событие акселерометра, извлекаем из него x, y и z координаты и через http-запрос передаем по локальной сети на компьютер. Сервер на компьютере получает данные координат и на основе них эмулирует нажатия клавиш.
Я заранее подготовил для вас Automate Flow и репозиторий с сервером. Вам нужно будет только это все правильно установить.
Инструкция
Перед тем, как начать рекомендую прочесть инструкцию целиком и приступать уже с пониманием своих возможностей. Инструкция для Windows и сразу для чайников, поэтому если вы программист, вы и так знаете, что делать.
1. Скачайте и установите Node.js на компьютер.
2. Скачайте файлы из репозитория и разархивируйте в какой-нибудь папке на компьютере. Желательно, чтобы путь содержал только латинские символы.
3. Зайдите в папку и запустите из нее консоль.
4. Откроется консоль. Введите npm i
и нажмите Enter
. Дождитесь пока все зависимости установятся (1-3 минуты), после чего можете закрыть консоль.
5. Существует 2 версии сервера: пульсирующая — pulse.js
, и удерживающая — hold.js
. Пульсирующая больше подходит для управления машинами, а удерживающая — персонажами. Пульсирующая нажимает на клавиши с разной частотой в зависимости от наклона часов, а удерживающая тупо жмет и держит клавишу.
Итак, допустим мы хотим управлять машиной. Находясь в папке проекта перейдите в папку src
→ запустите из этой папки консоль от имени администратора → введите node pulse
и нажмите Enter
. Не закрывайте консоль.
Наш сервер успешно запущен запущен (http://localhost:8000
).
6. Скачайте и запустите Notify. Соединитесь в нем с часами → нажмите на иконку сообщения вверху справа → перейдите в инструменты → включите интеграцию с Tasker.
7. Скачайте Automate → установите флоу по этой ссылке → Вернитесь в список ваших флоу → откройте Mi Band broadcast axes. Теперь необходимо поменять IP-адрес сервера на IP вашего компьютера. Отложите пока телефон.
8. Узнайте IP-адрес вашего компьютера в локальной сети (видео-инструкция).
9. Снова возьмите телефон → нажмите на карандашик → нажмите на первую кнопку над крестиком → найдите блок с изображением планеты и нажмите на него → в поле, где написано http://192.168.1.100:8000/
введите свой IP из поля IPv4 адрес
. Например, если у вас IPv4 = 192.168.45.124
, то в итоге должно получиться http://192.168.45.124:8000/
(видео-инструкция).
10. Выйдите из режима редактирования и нажмите Start. Теперь Automate прослушивает интент акселерометра из Notify.
11. Откройте Notify → нажмите на иконку сообщения вверху справа → перейдите в инструменты → откройте пункт Проверка датчиков. На экране появится график со значениями осей. Automate уже получает интенты и передает значения осей на компьютер. Если вы все сделали правильно, то в консоли из пункта 5 сейчас должна выводиться информация об эмулируемых клавишах. Осторожно, сервер хаотично нажимает на клавиши.
12. Чтобы все это дело остановить, не выходя из режима проверки датчиков сверните Notify, откройте Automate и нажмите Stop (рядом со Start).
Наденьте часы на кисть так, чтобы кнопка смотрела вправо.
13. Откройте игру (в моем случае GTA SA), сядьте в машину и снова нажмите на Start в Automate. Если вы все сделали правильно, то теперь вы можете управлять машиной движениями кисти.
Если вы захотите снова все запустить достаточно будет выполнить пункты с 8 по 13.
Фидбэк
Если у вас появились какие-то трудности или ошибки или вы нашли опечатку в тексте — пишите мне в Телеграм @mikhailsdv. Будьте готовы, что я буду требовать скриншоты и подробное описание ваших действий.
Также подписывайтесь на мой канал. Я там часто подобными вещами занимаюсь.
Как вы можете помочь?
- Если вы шарите в Андроид разработку, то можете попробовать написать приложение all-in-one, которое подключается к часам, читает данные акселерометра и через веб-сокет передает на сервер, ибо http — это медленно.
- Если вы шарите в низкоуровневые языки, то можете написать драйвер, который запускает WebSocket сервер и эмулирует полноценный геймпад, а не тыкает по кнопкам через
robotjs
, как это работает сейчас. - Тупо найти способ уменьшить задержку.