July 19, 2021

Как играть в 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, как это работает сейчас.
  • Тупо найти способ уменьшить задержку.