« PRS-T3SへReaderStoreで購入したコンテンツを入れる方法 | トップページ | 無線化した電書ページめくり機に、バッテリーモニターを付けてみました »

2022/08/20

Androidの電子書籍用ページめくり機を無線化しました【2022/12/26追記】

去年の冬がくる前に、コタツに手を突っ込んだまま電子書籍のページ送りをできるようにしたくて、USB接続のページめくり機を作りました。ところが、ASUS ZenPad3 8.0をターゲットにした開発を終えて本命のBOOX Poke Proで使おうとしたところ、USB OTG(On-The-Go)非対応だったというオチが付いて、無線化したいなぁと思いつつ、ReaderStoreの本は物理ボタン付きのPRS-T3S、他の書店はBOOX Poke Proとワッツのリモートシャッターの組合せ、という使い分けにしていました。
その後、ReaderStoreで買った本がPRS-T3SでWi-Fiダウンロードできなくなったことから、なんとか有線接続して転送して読んでいたのですが、やっぱり不便なので、無線化の検討を再開しました。

BLE (Bluetooth Low Energy)のキーボードエミュレーションができる電子工作向きのチップかモジュールを調べたところ、無線マイコンモジュールのESP32-WROOM-32Eぐらいしか見当たらず、これを使うことにしました。
また、リモートシャッターや自分の電書めくり機を使っていると、タクトスイッチのクリック音が気になることがあります。夜中に読んでいる時はもちろん、昼間でも「カチカチカチカチ」言うのはちょっと頂けない。そう思っていたところ、aitendoさんのサイトで静音タクトスイッチなるものを見かけて買ってみたところ、ぷにぷにした感触が面白くクリック音も無く、サイズも大して大きくないので、これを使うことにしました。

とりあえず記念写真。できたものを中央にして、右がワッツのリモートシャッター、左が自作のUSB接続品です。
Etw1
中身はこんな感じです。上の中央が無線マイコンモジュールのESP32-WROOM-32Eで、一番下にLi-Po電池があり、その右上に充電モジュールがあります。左の中央が電源スイッチと3.3Vのレギューレータ部になります。(なお、電池のリンク先が品切れになっていますが、同等品は多々あります。)
Etw2
ここで、高々BLEなのに電源周りが大がかりになっているのは、先達が色々と苦労されているのを見たからです。特にこちらの記事が参考になりました:
8か月以上の長期間動作を確認! 超省エネIoTセンサESP32-WROOM-32 - ボクにもわかる電子工作のブログ -
こちらを読まずに、電圧だけ見てコイン電池で組んでいたら痛い目に遭うところでした。実際、ふつうの(ハイパワーでない)USB-シリアル変換器では起動できずリブートを繰り返していました。

さて、
ESP32を使うのは今回が初めてでした。当初は有線タイプで味を占めたMicroPythonを使おうかと考えていたのですが、作例が見当たらなかったので、素直にArduino IDEを使うことにしました。また、勝手が分からなかったので、まずは素直に開発ボードを使い、Lチカからやりました。マイクロテクニカさんのチュートリアルが分かりやすかったです。
Etw3
無線化については、M5StickCの作例が参考になりました。ページめくりに欲しい機能は、リンクを辿ってT-vKさんのキーボードライブラリのヘッダファイルから、
  1. KEY_MEDIA_VOLUME_UP
  2. KEY_MEDIA_VOLUME_DOWN
  3. KEY_MEDIA_WWW_BACK
の3つです。なお、有線接続の時は「本棚へ戻る」のにマウス右クリックを送っていましたが、本来はBACKなので、この機会に直しました(microPythonのadafruit_hid.consumer_control_codeにも同様の設定があると思いますが調べていません)。

プログラムの方は、最初のハードルだけ越えれば難しくありませんでした(というか、大したことはやっていないので動かせるようになれば楽勝)。
それで機嫌良くESP32-WROOM-32Eでの電子工作をして、ENとBOOTのスイッチを手順に従って押しながらプログラムを転送しようとしたのですが、Arduino IDEがConnecting...からタイムアウトしてしまいます。配線ミスなどを疑ってみたのですが(1か所は間違えていたが直しても)解決せず、ふとEN端子をテスターで触ると電圧が出ていません。それでデータシート(リンク先PDF)を見るとペリフェラル側でプルアップするように書いてあるのを見落としていたことが分かりました。他方BOOTのGPIO0はデフォルトでプルアップだと書いてありますが、気持ち悪いので両方とも10kΩで外部プルアップしたところ、無事に動くようになりました。(答が分かってから検索するとFAQだったようです。FAQついでにUARTは3.3Vのクロス接続です。)

あと、BleKeyboard.hを眺めていたら下の方にデバイス名と製造者の設定があったので、お遊びで変更してみました。これもアップしてあります(etw.h)。
Etw4
こうすると、BOOX Poke Proの方からは、こう見えます:
Etw5
ちょっと嬉しい。

完成したコードと回路図はGitHubにリポジトリを作ってアップしておきました。回路図は、例によって完成品の裏面にも貼りました。
Etw6

最終的なBOMは次の通りで、合計1227円でした。電線・ピンヘッダ・ハンダ・ラベルはカウントしていません:
itemdetailpricepcssubtotal
BLE moduleESP32-WROOM-32E3601360
Li-ION Batt.1200mAh2101210
Charge moduleTP405626126
RegulatorNJM2845DL1-3350150
LEDOSG8HA3Z74A10110
SubstrateD-type NTH45290
Silent SWTS8855SG-P222488
Compact SWTVBP06-B043CW-B10220
Slide SW 1x2SS-12D00-G520120
Slide SW 2x2SS-22SDP290190
Resistor1/6W, 2.2kx1, 10kx2133
CapacitorMLCC 10μF50150
CaseMINTIA Breeze2101210

思いのほか、大げさな工作になってしまいました。リモートシャッターに入っているような省電力で小型のBLEチップが手軽に手に入るようになればいいのですけれど。

以上、何かの参考になれば幸いです。

パドラッパ from MacBook Air (2017)

【2022/12/26追記】
「BLE (Bluetooth Low Energy)のキーボードエミュレーションができる電子工作向きのチップかモジュール」として、有線バージョンで使っていたSeeed XIAOの新商品が出ていたことに、いまごろ気が付きました。国内でも2022年5月から売っているようです。
Seeed Studio XIAO nRF52840 Sense - TinyML/TensorFlow Lite- IMU / Microphone - Bluetooth5
なんと、Li-Po電池の充電コントローラまで内蔵されています。センサー無しバージョンもありますが、センサ付きの方が面白そう。こんど何か作るときには候補にします。(知っていたら絶対にこちらを使っていたのに… 自分のアンテナの低さが悔しい。)

| |

« PRS-T3SへReaderStoreで購入したコンテンツを入れる方法 | トップページ | 無線化した電書ページめくり機に、バッテリーモニターを付けてみました »

コメント

コメントを書く



(ウェブ上には掲載しません)




« PRS-T3SへReaderStoreで購入したコンテンツを入れる方法 | トップページ | 無線化した電書ページめくり機に、バッテリーモニターを付けてみました »