やったこと
iOSにBluetoothキーボードのショートカットキーがあり、スクリーンショットなど色々制御できそうだと思い、
RN-42使用 Bluetooth無線モジュール評価キットを使って、WindowsマシンからBluetoothでキーボード操作を自動化
構成
Windows8 → (USB) → RN-42 → (Bluetooth) → iPhone 6s(iOS13)
手順
RN-42をPCに接続する
今回、Windows8マシンがあったので、TeraTermを使ってRN-42に接続しました。
RN-42とターミナルソフトと接続
参考サイト:RN-42 Bluetoothモジュールの使い方1
上のサイトに詳しいことが載っていますが、
- FTDI社のUSBデバイスドライバをインストール
- COMポートの設定
- TeraTermとの接続
でTeraTermと接続できます。
RN-42の設定
参考サイト:iPhoneとRN42でBluetooth
ここからは上のサイトになぞり、TeraTerm上でRN-42をスレーブのHIDキーボードとして設定します。
設定が終わるとiPhoneとの接続が可能になり、TeraTerm上でキー入力を行うとiPhone側にも反映されます。
Bluetoothキーボード上ではwin+H
でホームボタンを押すショートカットなのですが、Windows側のショートカットとかぶっているので、うまく動作しません。
また、今回はキー操作を自動化したいので、
- キー入力のバイナリ(HID keyboard report format)を送信して操作する
- TeraTermのマクロによる自動化
の2点を使ってアプローチします。
キー入力のバイナリ(HID keyboard report format)を送信して操作する
Bluetoothキーボードはキー入力時に11バイトのバイナリデータを送信するプロトコルとなっています。
Bluetooth HID Profile User Manual
バイナリの中身として
| 0xfd | 0x09 | 0x01 | modifier | 0x00 | code1 | code2 | code3 | code4 | code5 | code6 |
となっており、実際のキー入力は4バイト目のmodifierと6バイト目以降のscan codeに入ります。
ここで、modifierはCtrlやAltなどのビットごとにフラグをたてたものであり、
bit7 : RightGUI (Meta)
bit6 : RightAlt
bit5 : RightShift
bit4 : RightCtrl
bit3 : LeftGUI (Meta)
bit2 : LeftAlt
bit1 : LeftShift
bit0 : LeftCtrl
また、各codeにはその他のキーのscan codeが1つずつの6個までが入ります。
scan codeの早見表
具体例としてCmd+Shift+3
(iOSのスクリーンショットのショートカットキー)は
FD 09 01 82 00 20 00 00 00 00 00
なにも押してない状態は
FD 09 01 00 00 00 00 00 00 00 00
となります。
TeraTermのマクロによる自動化
キー入力のバイナリをマクロを使って自動化します。
[コントロール]→[マクロ]より.ttl
ファイルが選択・実行ができます。
i = 0
while < 100
;スクリーンショット
send $FD $09 $01 $82 $00 $20 $00 $00 $00 $00 $00
;キーを何も押してない状態に戻す
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;5秒待機
pause 5
i = i + 1
loop
上のマクロは見ての通り、実行すると5秒おきのスクリーンショットを500回行うものです。
注意)
TeraTermの[設定]→[全般]→[言語(L)]はEnglish
にしてください。
また、[コントロール]→[マクロウィンドウの表示]は実行後に中止するときに使ってください。自動では止まりません。
あとがき
iPhoneなどスマートフォンの自動操作は難しいものではありますが、今回のBluetoothを用いたアプローチは少し希望が見えるのではないでしょうか。
マクロを巨大に組まないといけないけれども。
おまけ
一番上のタイピングgifのマクロ
;t
send $FD $09 $01 $00 $00 $17 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;y
send $FD $09 $01 $00 $00 $1C $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;o
send $FD $09 $01 $00 $00 $12 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;u
send $FD $09 $01 $00 $00 $18 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;z
send $FD $09 $01 $00 $00 $1D $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;e
send $FD $09 $01 $00 $00 $08 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;t
send $FD $09 $01 $00 $00 $17 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;u
send $FD $09 $01 $00 $00 $18 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;r
send $FD $09 $01 $00 $00 $15 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;i
send $FD $09 $01 $00 $00 $0C $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;g
send $FD $09 $01 $00 $00 $0A $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;a
send $FD $09 $01 $00 $00 $04 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;i
send $FD $09 $01 $00 $00 $0C $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;n
send $FD $09 $01 $00 $00 $11 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;o
send $FD $09 $01 $00 $00 $12 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;t
send $FD $09 $01 $00 $00 $17 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;a
send $FD $09 $01 $00 $00 $04 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;i
send $FD $09 $01 $00 $00 $0C $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;p
send $FD $09 $01 $00 $00 $13 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;i
send $FD $09 $01 $00 $00 $0C $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;n
send $FD $09 $01 $00 $00 $11 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;n
send $FD $09 $01 $00 $00 $11 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;g
send $FD $09 $01 $00 $00 $0A $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;u
send $FD $09 $01 $00 $00 $18 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00
;.
send $FD $09 $01 $00 $00 $37 $00 $00 $00 $00 $00
send $FD $09 $01 $00 $00 $00 $00 $00 $00 $00 $00