🖱️
BLEマウスをつくって、iPadを制御しよう
ESP32を使って、BLEマウスを作りました。
iPadを制御します↓。
- カーソルの移動
- スクロール
関連記事
↑以前作成したbleキーボートと技術的にはほぼ共通です。
マウス部分のみ記載します。
仕様検討
以下としました。
デバイス | 動作 | iPad側への送信 |
---|---|---|
🕹ジョイスティック | ←/→/↑/↓操作 | マウスカーソルの移動 |
🕹スイッチ1 | プッシュ/リリース | マウス-左ボタン |
スイッチ2 | プッシュ/リリース | マウス-右ボタン |
スイッチ3 | 押下 | スクロール UP |
スイッチ4 | 押下 | スクロール DOWN |
🔧パーツ一覧
機材名 | 備考 |
---|---|
ESP32評価ボード | ESP32-WROVER 開発ボード/ESP32-WROOM 開発ボードのどちらでも可 |
🕹ボード | ジョイスティックおよびスイッチセット - Amazonで購入 |
タクトスイッチ | 3つ使用 |
接続図
MPU側でプルアップ設定を行うため、抵抗は不要です。
💻環境
VScode - PlatformIOを使用します。
PlatformaIOの環境構築は、↓にまとめておきました。
ライブラリ - ESP32 BLE Mouse
ESP32をBLEキーボードにするために、下記のライブラリを使用します。
インストール手順は、以下となります。
- PlatformIO - Librariesを選択し、ESP32-BLE-Mouseを検索
- ESP32-BLE-Keyboardを選択
- "Add to Project"を選択
- プロジェクトを指定 - 今回は、"esp32_mouse"というプロジェクトを指定
- "Add"を選択
-
lib_deps = t-vk/ESP32 BLE Mouse@^0.3.1
これで、インクルードできるようになります。
#include <BleMouse.h>
📝手順
以下を記載します。
- 筐体の作成
- ソフト設計/コード
筐体の作成
3Dプリンタで筐体を作成しました。
親指で、🕹を制御できるように上に配置しました。
スイッチは、側面に配置しました。
ソフト設計/コード
以前作成したBleキーボードのプロジェクトをベースに作成しました。
FreeRTOSを使用しています。
タスク構成
タスク名 | 役割 |
---|---|
スイッチ監視タイマー | スイッチのDOWN/UPの変化を監視する |
ジョイスティック監視タイマー | ジョイスティックの変化を監視する |
メッセージ管理タスク | スイッチ/ジョイスティックのイベントをキーボード管理に通知 |
マウス管理タスク | メッセージ管理から受けたイベントをBleマウス制御を送信 |
コード関連
コード自体は、githubにアップしてあります。
ポイントを記載します。
bleマウスライブラリ
初期化は以下のように行います。
#include <BleMouse.h>
static BleMouse s_xBleMouse;
s_xBleMouse.begin();
beginの後で、ペアリングできる状態になります。
iPadからペアリングを実施できます。
接続しているかどうかは以下で判定できます。
if (s_xBleMouse.isConnected())
{
// !!!接続中!!!
}
マウスコマンドを送信する場合は、以下となります。
// 左ボタンクリック
s_xBleMouse.click(MOUSE_LEFT);
// 左ボタンマウスダウン
s_xBleMouse.press(MOUSE_LEFT);
// 左ボタンマウスアップ
s_xBleMouse.release(MOUSE_LEFT);
// カーソル移動 x:+10, y:+20
s_xBleMouse.move(10, 20, pxMessage->wheel, pxMessage->hWheel);
// ホイールの回転
s_xBleMouse.move(0, 0, 10, 10);
ホイールの補足です。
iPadに対してホイールを送信する場合、時間をあけて連続で送る必要があります。
以下が例です。
int32_t max_count = 30;
int8_t step = 1; // +:正方向, -:逆方向
for (int32_t i = 0; i < max_count; i++)
{
s_xBleMouse.move(0, 0, step, step);
delay(5);
}
ジョイスティックおよびスイッチの監視は、前記事を参照願います。
コード全体
さいごに
キーボードにつづき、マウスも作ることができました。
コードには、ロータリーエンコーダの処理もありますが、
物理的に搭載するのが大変だったので諦めました。
趣味と実用が一緒になるのは、楽しいです。
参考URL
Discussion