2018年6月4日月曜日

Bot使用時におけるGOPlusの再接続自動化

ポケモンGoBotにおける最大の問題点はGoPlusが一時間で自動切断されることだった
一時間おきに手動で再接続する必要があり、Botとしてのパフォーマンスが大幅に低下する

ここではiOSのスイッチコントロール機能を用いて再接続の自動化を実現する

GoPlusの再接続の自動化

再接続の自動化には以下の3つの制御が必要になる
 1.GoPlusの切断を検知すること
 2.GoPlusのボタンを押すこと
 3.クライアント画面上のGoPlusボタンを押すこと

GoPlusの切断を検知する

GoPlusの振動モータ信号をマイコン等で監視することで切断を検知できる
(GoPlusが接続された状態でBOTが動作していた場合、定期的に振動するため)
モータ停止中はほぼ0V
モータ振動中は3V程度の電圧が印加される
100msec程度の周期でモータ信号をチェックし、一定時間の連続停止を切断と判定する

LED信号の監視の方が好ましいが、配線の引き出し難易度が高すぎて断念した

GoPlusのボタンを押す

リレーなどでボタンを押せばよい
配線の引き出しは自動化改造時を参照
ボタンの配線をGNDに落とせばボタンを押した状態と等価になる

プロトタイプ/ArduinoのXBeeシールドを流用

クライアント画面上のGoPlusボタンを押す

iOSのスイッチコントロールを使用する
外部スイッチとしてRN42をHIDキーボードモードで使用する
マイコンとRN42をシリアル接続し、マイコン側から打鍵情報をRN42に転送する

参考メモ1
参考メモ2

スイッチコントロールのレシピには以下2つの連続操作を登録
 ・速度警告ウィンドウのボタン位置をタップ
 ・GoPlusアイコンボタン位置をタップ

速度警告ウィンドウへの対策を入れる所がポイント
一度表示されると『私は運転者ではありません』ボタンを押すまで閉じないため
この状態でGoPlusアイコンボタン位置をタップしても無効

GoPlusアイコンに被るのでウィンドウを消す必要がある

結果と問題点

GoPlusを用いたBotの一時間の壁を突破することに成功した
問題は誤タップによる画面遷移に対応できないこと
速度警告ウィンドウへのタップでジムなどを誤タップしてしまう場合がある
この場合はジム画面から抜け出せなくなる


2018年6月3日日曜日

iOSスイッチコントコントロール:レシピの設定

レシピとは

スイッチコントロール機能の一つ
スイッチに対して特定の操作を割り当てることができる
スイッチをトリガに一連の画面操作を記録、再生することも可能(カスタムジェスチャ)
ここで扱うのはこのカスタムジェスチャのみ

レシピ(カスタムジェスチャ)の設定

ここではBluetooth接続の外部スイッチ(キーボード)を用いるものとする

1.スイッチの登録
 前回参照
 レシピを用いる場合『アクション』は無視されるので適当なものを選べばよい

2.レシピの設定
 設定→一般→アクセシビリティ→スイッチコントロール→レシピ→新規レシピを作成
 『名前』は適当に入力
 『スイッチを割り当てる』で登録したスイッチを選ぶ
 →『カスタムジェスチャ』を選択
  『新規ジェスチャ』画面が開くので登録したい画面操作を実施後、『保存』を選択
 ここまででレシピが登録される

 『レシピを起動』で登録したレシピを選択する

レシピの使用方法

1.スイッチコントロールをON
 設定→一般→アクセシビリティ→スイッチコントロール
 『スイッチコントロール』をON
 『スイッチは”○○○○”レシピを使用するように設定されています』
 と表示されたら成功(※○○○○はレシピに付けた名前)
 
2.スイッチの動作確認
 登録したスイッチのキーを押す
 登録したレシピ通りの画面操作が再生されれば成功
 レシピによる画面操作時にはタップ位置に丸いマーカーが表示される


TIPS

・動作がおかしくなったら『スイッチコントロール』を入れ直す
 →青いハイライトが頻発する場合など
  レシピが無効になってスイッチ側のアクションに切り替わっている

・『スイッチコントロール』のショートカットを有効にする
 →『スイッチコントロール』を頻繁にONOFFするため
  設定→一般→アクセシビリティ→ショートカット
  『スイッチコントロール』をチェック
 ホームボタンのトリプルクリックで『スイッチコントロール』をONOFFできる


2018年6月2日土曜日

iOSスイッチコントロール用外部スイッチの自作

iOSではアクセシビリティ向上機能として操作を外部スイッチに代替できる
この外部スイッチについての調査および自作の方法についてのメモ

外部スイッチとは

iOSのいう『外部スイッチ』とは外付け入力機器のこと
分かりやすいものでいえばBluetoothキーボードが該当する
その他Bluetoothコントローラ、カメラアダプタ経由有線キーボードなど
(※iOSとの相性次第なのですべての製品が保証されるわけではない)
有線カメラシャッターはダメであった

電子工作におけるBluetoothキーボード制御

実物をリレーで叩く、BT機能のあるマイコンでプロトコル再現などが考えられる
ここではBluetoothモジュールRN42のキーボードエミュレーション機能を用いる

BluetoothモジュールRN42

内部コマンドによる機能切り替えだけでHIDキーボードとして動作する
切り替え後は外部からはBluetoothキーボードとして認識される
キーボード打鍵はシリアル入力により実現できる
よってマイコンなどからiOSを間接的にコントロールすることが可能となる

画像は秋月より/ピッチが狭く使いづらいが結線するポートはわずか
切り替え方法:
 RN42へシリアル接続(有線、無線どちらでもよい/出荷状態は115200bps)
 コマンドモード遷移『$$$』後に『S~,6』コマンド入力で切り替え
 次回起動時からはキーボード扱いとなる

注意点:
 この機能はRN42のファームウェアバージョン依存
 古いものには機能が無い模様(コマンド入力時にエラーとなる)
 ファームアップも無理なので新しく買うこと

スイッチコントロールの設定

以下はiOS側の設定

1.キーボードとBluetooth接続を確立
 設定→Bluetooth→Bluetoothをオン
 デバイスの中からキーボードを選択してペアリング

2.スイッチの登録
 設定→一般→アクセシビリティ→スイッチコントロール→スイッチ
 新しいスイッチを追加→外部
 『外部スイッチをアクティベートしてください』という表示を確認
 ここでスイッチとして用いたいキーを押す
 『新しいスイッチ』ウィンドウが開くので適当なスイッチ名を入力し保存
 『アクション』ウィンドウが開くのでスイッチに対応するアクションを選択


ここまで
次回以降のメモでレシピを用いた実用的なスイッチ運用を行う