あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

Raspberry Pi PicoとPico Wireless Packでリモートキーボード?を作ってみる

先日買ったPico Wireless Packで遊ぼうと商品説明を眺めていたら、CircuitPythonとAdafruitのESP32SPIモジュールとAdafruit_CircuitPython_SDモジュールでも遊べるで、と書いてあることに気づきました。

Pico Wireless Pack – Pimoroni

CircuitPythonといえば、先日マイクラのキー操作を自動化して焼石を掘らせるブツをCircuitPythonで作りました。RP2040系ボードであそぶならMicroPythonかなと思っていたのですが、どうもCircuitPythonのほうが色々と環境が整っていて遊びやすいようです。Adafuitやるな。

akkiesoft.hatenablog.jp

というわけで、これらを組み合わせて、Pico+Wireless PackでWebサーバーを立てて、HTTPリクエストに応じてキー操作をPCに送りつける、リモートキーボード的なものを作りました。

f:id:Akkiesoft:20210605112607j:plain

今回実装してみたのは、Slack Call、WebEx、Zoomそれぞれのミュートボタンに相当するショートカットキー。電話会議中にPCから少し席を外したときに、ミュートを入れたり解除したりできたら便利かなと思ってこれを選択してみました。席を外す前には各種Web会議ツールのウィンドウをアクティブにしておく必要はあります。あと、ミュートかどうかはツールによって判別しにくいので、そこはご愛嬌ですね(WebExはポッ・ポポッと鳴るのでわかりやすかったりしますね)。

www.youtube.com

そしてコード。キーボードの初期化とWiFiの接続をして、Webサーバーを建てると行った流れです。特定のパスにGETされたら適宜キーコードを送信します。ルートにアクセスしたらWebページを開けるように、HTMLもPythonスクリプトに埋め込んでいます。

Send key codes(web meeting mute hotkeys) by web api. · GitHub

調べている途中で見つけたESP32SPIのWSGIが、去年の10月から実装が壊れていてサンプルすら動かんといった状態でしたが、問題のあるコードは使わなさそうだったのでライブラリから雑に消し去って対処しました。また、ちょうど気づいたタイミングで修正に向けて動きがあったので、遠からず修正されそうです。

github.com

HTMLを開く様子。ESP32からの送信はそこまで早くないのか、こんな感じで結構遅く、意図せずアニメーション調になっています。昔のインターネットかな?

www.youtube.com

適当な見た目のために、bootstrap5のCDNから引っ張ってくるやつを入れてるんですが、この2行ぶんすらまあまあ文字数が多く(ハッシュとか入ってて長い)、略したらかなり軽くなるはずなので、見た目の妥協はアリかもしれないですね……。

f:id:Akkiesoft:20210605122908p:plain

テレカンは平日じゃないと発生しないので実戦投入は来週以降ですが、さておき、こんな感じでリモートからキーボード操作みたいなので他に使えそうor遊べそうなネタは結構発掘できるんじゃないかなーと思っています。