DIY Pokemon GO Plus device
~~META: status = active &relation firstimage = :project:pokemon-go-plus.png ~~
We started to experiment a little with building a DIY Pokemon GO Plus bracelet. (Pokébrm?)
The Pokemon Go game is designed to communicate with a device that allows basic gameplay without using the phone - it can vibrate and play out animations using one RGB LED, and has a button to catch pokeballs and clear out pokestops. The device is paired with the phone using BLE (Bluetooth Low Energy).
The APK of the Android port has been decompiled. The codename of the BLE component is “Sfida”: https://github.com/applidium/PokemonGo_Android_RE/tree/master/android/app/src/main/java/com/nianticproject/holoholo/sfida
Ranging from Unity plugin interface to low-level BLE communication code. (Including an intriguing three-step challenge-response certification process that's filled with just dummy steps right now. We aren't also sure about the details of the animation message formats, but the high level structure is easy to make out.)
As a first step, we just wanted the game to notice the device is around and notify us of a connection error. Our first attempt has been to take Bluefruit UART Friend chip, hook it up on an Arduino, make its GATT device name “Pokemon GO Plus” which is what the source code is looking for, and a dummy implementation of the initial certification GATT characteristics. Based on what pasky has read in the source code, this should definitely make the game notice that the device is around, and offer an option to connect + report failed connection.
This experiment unfortunately failed. We aren't getting any debug messages from the code related to bluetooth, even messages that should be printed before starting to detect the device at all, and the app makes no sign of noticing our Bluefruit board. Therefore, our current hypothesis is that while the source code is there, it's not activated by Unity or is activated only in some specific circumstances, so it's in fact not possible to use the bracelet with current app version.
It's possible that Niantic will roll out an app update only the day it starts shipping the bracelet (also maybe with a more complicated certification handshake), to maximize headstart towards Chinese counterfeits. Or we are doing something wrong.
iPhone: It's been pointed out that “According to the Nintendo UK website, it’s compatible with “iPhone 5/5c/5s/SE/6/6s/6 Plus/6s Plus and operating systems iOS 8-9”. Yes, that means Pokémon Go Plus is currently only available for iOS, but as of July this year Niantic and Nintendo are working on a Android version.” Android experiments are on hold, but we're looking for iPhones to try this on.
Further News: http://www.techradar.com/news/wearables/staryu-kidding-the-pokemon-go-plus-wearable-has-been-delayed-1325459 so the existing app support apparently is quite work in progress…