iPhoneで自動周回プレイ ④仮想キーボードの製作
前記事では画面タップせずにスイッチコントロールを実行するためにBluetoothキーボードを使用した方法をまとめた。
あとは自動周回用に一定間隔でキーを叩けば24時間戦える。
今回はその仕組みと専用の機能を持った機械の製作方法についてまとめる。
警告
まとめ結論
キーを自動入力させる方法
スイッチコントロールのスイッチに割り当てたキーを定期的に送信する方法には下記の2つがある。
キーボードを改造して一定間隔でキーを操作できるように改造する
タイマーIC555などを使ってキーのパターンをショートさせる
タイミング調整できるようにしておくと便利
マイコンボードを使用して仮想キーボードを製作する
キー送信するだけの機械を作る
プログラム次第で正確で細かい制御ができる
改造はハンダ付けや制御回路の作成も必要、その後キーボードとしても使いにくくなってしまう。
今回はマイコンボードを活用して仮想キーボードを製作する。
機能要件とマイコンボードの選定
機能要件
特定のキーを一定間隔で押下する
iPhoneとの接続にはBluetoothを使用する
iPhone側からはキーボードとして認識されるようにする
できるだけハンダ付け作業などは行わないようにしたい
以上を満たすものとして、今回は無線モジュールが標準で組み込まれているものが多いESP32シリーズのマイコンボードを使用する。
ESP32シリーズとボード選定
早い話が無線機能内蔵の超小型PC。
簡単なプログラムでBluetoothキーボードとして動作させることができる。
今回はCPU性能は不要なため、できるだけ安くて小さいものを探して見つけたのがコレ。
このサイズでボード上にBluetooth機能どころかWi-Fiまで乗っている。USB-Cケーブルを接続するだけで動作可能。
電源LEDは付いているが、その他のプログラム制御できるLEDやボタンなどは付いていない。
今回は単純に電源投入したらプログラム実行するだけの機能のみとしたが、動作LEDやボタン押すだけで動作間隔時間を変更したりできる機能を追加するなど拡張できる。今後の状況次第で改造するかもしれない。
必要なもの
マイコンボード
ESP32ボード Seeed Studio XIAO ESP32C3
開発環境
Arduino IDE
記事作成時の最新バージョンは 2.3.1
USB-Cケーブル
ESP32ボードに含まれていない。
データ通信対応のケーブルを用意する。
新しい事に取り込もうとする小さな気持ち
初めてのESPボード開発は敷居が高いと考えてしまいがち。
今回は複雑なことはしていないので、まずは次の項目の1だけやってみよう!気が向いたら2以降に進めて行けばOK。
Arduino IDEのインストール
1. Arduino IDEのダウンロード
下記のサイトにアクセスし「DOWNLOAD OPTIONS」から自分の環境に合わせたものをダウンロードする。
親父はWindows10 64bitを使用しているので「Windows Win 10 and newer, 64 bits」を選択する。途中の画面では必要情報を入力するか「JUST DOWNLOAD」を選択する。
2. インストール
ダウンロードしたファイルを実行してインストールする。インストール先などにこだわりがなければそのまま進めていけばよい。
インストールが終わったらチェックが入っている状態で完了を選択。Arduino IDEを起動する。
3. 追加ボードマネージャのURL指定
今回使用するESPボードのボードマネージャを追加するため、下記の方法で基本設定を開く。
・[ファイル] → [基本設定…] を選択
・Ctrl + カンマ を押下
[設定] タブの [追加のボードマネージャのURL] に下記のURLを追加する。https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
4. ボードマネージャを開く
下記の方法でボードマネージャを開く。
・左サイドメニューの上から2番目を選択(推奨。楽)
・[ツール] → [ボード] → [ボードマネージャ] を選択
・Ctrl + Shift + B を押下
検索欄に「esp」と入力して「esp32 by Espressif Systems」を見つける。「2.0.9 installed」と表示されていない場合は、下のプルダウンから「2.0.9」を選択後に [インストール] を選択してアップデート or ダウンデートする。
5. NimBLEのインストール
標準のBLEライブラリの動作が不安定なため、接続が切れたり、接続できてもキー送信されない、と問題が多い。この解消のために今回はNimBLEというライブラリを使用する。
下記の方法でライブラリマネージャーを開く。
・左サイドメニューの上から3番目を選択(推奨。楽)
・[スケッチ] → [ライブラリをインクルード] → [ライブラリを管理…] を選択
・Ctrl + Shift + I を押下
先ほどと同様に検索欄に「nimble」と入力して「NimBLE-Arduino by h2zero」を見つけるてインストールする。
記事作成時のバージョンは 1.4.1。
Bluetoothキーボードライブラリのインストールと設定変更
ESPボード上でBluetoothキーボードを仮想的に作成するためのライブラリをインストールする。これを用いるとものすごく簡単に開発ができる。
記事作成時の最新バージョンは 0.3.2-beta。ベータ版だが2022年から正式リリース版が出ておらず追加修正もなさそうなので、このバージョンを使用する。
ESP32 BLE Keyboard library
https://github.com/T-vK/ESP32-BLE-Keyboard
1. ESP32 BLE Keyboard libraryのダウンロード
下記URLの [Assets] にある「esp32-ble-keyboard.zip」をダウンロードする。
https://github.com/T-vK/ESP32-BLE-Keyboard/releases/tag/0.3.2-beta
2. ESP32 BLE Keyboard libraryのインストール
[スケッチ] → [ライブラリをインクルード] → [zip形式のライブラリをインストール…] を選択する。
ファイル選択ダイアログが表示されたら、先ほどダウンロードした「esp32-ble-keyboard.zip」を指定する。
問題なければインストールが完了する。
3. Arduino IDEの終了
次項で設定ファイルの編集があるため、Arduino IDEを終了する。
4. BleKeyboard.h の修正
上記でインストールしたライブラリのBleKeyboard.hを開いて下記のように修正する。
ファイルは検索すれば見つかるが、標準であれば下記のパスに配備されている。
C:\Users(ログインユーザー名)\Documents\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.h
修正前
// uncomment the following line to use NimBLE library
//#define USE_NIMBLE
修正後(コメントを外す)
// uncomment the following line to use NimBLE library
#define USE_NIMBLE
5. platformio.ini への追記
platformio.iniにNimBLEを使用できるよう下記の内容をファイルの最後に追加する。
このファイルも検索すれば見つかるが、標準であれば下記のパスに配備されている。
C:\Users(ログインユーザー名)\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\libraries\LittleFS\examples\LITTLEFS_PlatformIO\platformio.ini
追記内容
lib_deps = NimBLE-Arduino
build_flags = -D USE_NIMBLE
ボードとポートの選択
1. Arduino IDEの起動
デスクトップ上のショートカットアイコンやスタートメニューからArduino IDEを起動させる。
2. ESP32ボードをUSB-CケーブルでPCに接続
問題なく接続されれば [コンピュータの管理] の [ポート] に「USB シリアル デバイス」が追加されているはず。合わせてCOMポート番号を確認する(接続タイミングで変化しやすい)。
現れない場合はUSBケーブルが充電専用の可能性がある。
3. ボードとポートの選択
初期状態では適当なボードが選択されている。今回使用するボードに変更する。
[他のボードとポートを選択…] を選択する。
ボードに「xiao_esp32c3」と入力して下のリストから同じ名前のものを選択してチェックを付けた状態にする。
ポートは2で確認したCOMポートを選択してチェックを付ける。
選択したらOKボタンを選択する。
ソースコードの入力・転送
心臓となる仮想キーボードのプログラムを入力する。
サンプルは用意してあるので、コピー&ペーストして必要部分だけ修正すればOK。
1. 新規スケッチの作成
下記の方法で新規スケッチを作成する。
・[ファイル] → [新規スケッチ] を選択
・Ctrl + N を押下
2. ソースコード入力
下記のコードをコピー&ペーストする。
//BLEキーボードライブラリを読み込む
#include <BleKeyboard.h>
// ■ 要修正箇所 ■
// このBLEキーボードのデバイス名を命名する(Bluetoothデバイスの検索結果として表示される)
BleKeyboard bleKeyboard("BLEKB");
// 起動処理部分
void setup() {
// デバッグ用コード:起動完了するとシリアルポートにメッセージ送信
Serial.begin(115200);
Serial.println("Starting BLE work!");
// BLEキーボード機能を起動する
bleKeyboard.begin();
}
// メインループ部分
void loop() {
// 相手側と接続ができているか確認する
if(bleKeyboard.isConnected()) {
// 接続できている場合
// 下記以降の処理でキー送信を行う
// デバッグ用コード:シリアルポートにメッセージ送信
Serial.println("Sending...");
// ■ 要修正箇所 ■
// 左シフトキーを送信(押して離す)
// write で press と releaseAll が実行される
bleKeyboard.write(KEY_LEFT_SHIFT);
// 動作安定用に0.2秒待機する
delay(200);
}
// 相手側と接続できていない場合、または、上記のキー送信処理終了後
// ■ 修正箇所 ■
// デバッグ用コード:シリアルポートにメッセージ送信
// (修正しなくても動作影響はなし)
Serial.println("Waiting 10 seconds...");
// ■ 要修正箇所 ■
// 10秒待機する(10秒=10×1,000ms)
delay(10000);
}
送信したいキーの指定方法はこの資料を参考にする。
// 文字送信 1文字指定する
bleKeyboard.write('a');
// スペースキー送信 半角の空白を指定すればよい
bleKeyboard.write(' ');
// 特殊キー関係 KEY で指定された名前を指定する
bleKeyboard.write(KEY_LEFT_SHIFT);
3. ソースの保存
一旦入力したソースコードを適当な名前で保存する。
・[ファイル] → [Save] を選択
・Ctrl + S を押下
4. 検証・コンパイル
ソースコードに問題がないか下記のいずれかの手順で確認を行い、転送できる形式に変換(コンパイル)する。
・[検証] ボタンを押下
・[スケッチ] → [検証・コンパイル] を選択
・Ctrl + R を押下
結構時間かかるのでのんびり待つ。
問題なく終われば出力に下記のようなメッセージが出力される。
最大1310720バイトのフラッシュメモリのうち、スケッチが489114バイト(37%)を使っています。
最大327680バイトのRAMのうち、グローバル変数が22940バイト(7%)を使っていて、ローカル変数で304740バイト使うことができます。
5. ESPボードにプログラムを転送
実際のESP32ボードにプログラムを転送して実行可能状態にする。
下記のいずれかの手順で転送する。
・[書き込み] ボタンを押下
・[スケッチ] → [書き込み] を選択
・Ctrl + U を押下
再度コンパイルするので少し時間がかかるが、問題なく転送できれば下記のようなメッセージが出力される。
この状態になればすでに動作を開始している。
eaving...
Hard resetting via RTS pin...
作成した仮想キーボードを使用する
上記までの流れでこの小さな基盤にキーボードの機能の組み込みができている。
あとはiPhoneに繋いでスイッチコントロールのスイッチに追加するだけだ。
基本的な作業は前記事で紹介した内容と同じため画面は一部のみ掲載している。
iPhoneとのペアリング
iPhoneの [設定] → [Bluetooth] を開く。
[デバイス] に今回製作したBLEKBの名前が表示されると思われるので、タップしてペアリングする。
ペアリングが完了すれば接続済みとなる。
念のため自動再接続の試験を行う。
[Bluetooth] を [オフ] に変更してBluetooth機能を無効に切り替える。
少し時間をおいて再度 [オン] にしてBLEKBが自動的に接続済みになるか確認する。
自動再接続されない場合は(恐らく)ESP32のボードマネージャのバージョンが異なっている。
スイッチ動作の割り当て
1. [設定] → [アクセシビリティ] を選択。
2. [スイッチコントロール] を選択。
3. [スイッチ] を選択。
4. [新しいスイッチを追加…] を選択。
5. [外部] を選択。
6. 外部スイッチのアクティベート画面となる。BLEKBからキーが送信されるまでしばらく待つ。
7. [新しいスイッチ] ダイアログが表示されるので登録したい名前を指定する。
8. [システム] にある [タップ] を選択。
9. [スイッチ] に追加されたのを確認。
作成済みレシピのスイッチを一括変更する
先ほどまでと同じく前記事と全く内容同じ。
1. [スイッチ] にある [編集] を選択。
2. 今回作成したスイッチ以外の左側の削除アイコンを選択。
3. [削除] を選択して削除を実行。
4. 削除されたら [完了] を選択。
5. スイッチが1つだけになる。
動かしてみる
ここも前記事でまとめた内容と同じ。
スイッチコントロールを起動して待っているとレシピが自動起動する。
本項目では起動しない場合の対処方法を記載する。
Bluetoothペアリングが解除されていないか
iPhoneの設定画面内のBluetoothからペアリング状況を確認する。
接続済みになっていれば問題なし。
未接続の場合は、ESP32のボードマネージャのバージョンを変えて再度転送して動作確認してみる。
スイッチコントロールを起動すると外部キーが見つからないと表示される
Bluetooth接続できていない。使っている中で数秒表示されることはたまにあるが、表示が消えない場合は接続が切れているので仮想キーボードの機械のUSB-Cケーブルを抜き差しして再起動させる。
再起動しても解決しない場合は上記のペアリングの確認手順を行う。
ボード側が動作しているか分からない
仮想キーボード側に状態表示されるのは電源LEDのみのためプログラムの実行状況は見えない。PCと接続している状態でArdiuno IDEのシリアルモニタを使用すれば少しは状況を確認できる。
メッセージ内容は下記の通り。
アンテナの接続とケースに入れる
接続しなくても1,2m程度は電波が届くようだが、安定動作させるためには付属のアンテナを接続した方が良い。
また、基盤剥き出し状態で使い続けるのもショートの危険がある。適当なケースに組み込んで完成させる。
完成した「スイッチコントロール用仮想Bluetoothキーボード BLEKB」(弐号機)
最後に
本記事では一定間隔でキー送信する専用の機械を製作し、動作確認を行った。
あとは周回プレイできるようにレシピの調整をしつつゲームを進めて行こう!くれぐれもバレてアカウント削除にだけはならないように!
.
..
...
....え?サービス終了?!