各種電子書籍リーダのページめくり問題をM5Atomで解決

夜なかなか寝付けないときなんかはこんな感じでダメ人間感あふれる状態でマンガを読んだりしてます。

実際にこの状態で読んでみるとわかるんですが、ページをめくるのにタッチすると画面が揺れるし疲れるし冬は寒いしで快適とは程遠いのです。

そこでM5StickCを使ってワイヤレスでページめくりするようにして快適読書生活を送っていました。 が、いつの間にかKindleアプリのページめくりができなくなってしまい、一向に対応される気配がありません。

もう待ってられないのでなんとか工夫して快適生活を取り戻す!!

以前使っていたワイヤレスのページめくりはこれです。
妙に凝った構成になっていますがボタン操作に応じてBLEキーボードの左右カーソルを送出するのが主な機能です。

github.com

最終コミットが2019年で、この時期はKindleアプリも外部キーボードのカーソルでページ遷移可能だったんですね。

対策

私が普段利用している電子書籍ビューアは以下の3つです。

ComicGlass[コミックリーダ]

ComicGlass[コミックリーダ]

  • RR Soft
  • ユーティリティ
  • ¥370
apps.apple.com

Kindle

Kindle

  • AMZN Mobile LLC
  • ブック
  • 無料
apps.apple.com

apps.apple.com

3つのアプリで共通しているのは、左右端付近をタップするとページ遷移するという操作です。ページ遷移と判定される範囲は微妙に異なるものの、どのアプリも画面端のタップで遷移するようです。

iPadOSは13.4からマウスによる操作が可能になっています。
というわけで、キーボードでなくマウスで操作するように変更しましょう。

実装

ボタンが押されたらカーソルを左端か右端に移動してタップする処理を実装します。

カーソルの座標を指定して移動できれば楽ですが、ただのマウスではそんな指定はできません。
MagicTrackPad2を接続してカーソルの挙動を見たところ、カーソルの移動は画面のサイズでクリップされるようです。 強引なやり方ですが、確実に端から端へ移動できるだけの大きな移動量を指定して解決することにしましょう。

BLEマウスはこのライブラリを使うと非常に簡単に作成できます。

github.com

また、ボタンのクリックや長押しなどの判定は M5Unified を使うと便利です。

M5Atomを想定しているので1ボタンで操作できるように、ボタン短押しで進み・長押しで戻るように実装してみました。

動作

ぱっと見のワイヤレス感を出したかったのでM5StickC Plusを使っていますが、Kindleアプリで動作確認です。
特に問題なく動いてますね。

マウスでカーソルを移動させると普段表示されないポインタが表示されます。 読書中にチラチラして気にならないかと危惧していましたが、それほど気になりません。
カーソルが動くときはページめくりの方向を変えるときなので、普段はカーソルが移動しないので問題にならないでしょう。

完成

BLE接続状況のステータスLEDや、無操作時のDeepSleepなどを実装して完成です。

github.com

今回はM5Unifiedを使ったのでボタン関連の面倒な実装は必要なくシンプルな実装となりました。(前のが冗長すぎただけですが)

キーボードでのページめくりはキーバインドの差分を吸収しなくてはいけないですが、マウスでタップをする方式であればほとんどのアプリに対応できそうです。

実際に色々なマンガアプリをダウンロードして確認してみましたが、フリック動作のみ対応しているアプリ以外は順調にページめくりできていました。

単純な実装の割に使えそうなものができて結構嬉しいです☺️