あっきぃ日誌

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

Unicorn HAT Miniでワンタイムパスワード表示機(ゲーミング仕様)

Raspberry Pi Advent Calendar 2020の4日目です。ネタはなければ作るもの。積みPimoroniガジェットはたくさんあるのよ!

adventar.org

というわけで、今日はUnicorn HAT Miniを調理です。

f:id:Akkiesoft:20201204211938j:plain

Unicorn HAT Minishop.pimoroni.com

Unicorn HATはPimoroni初期から続くフルカラーLEDドットマトリクスボードシリーズです。初代のUnicorn HATは8x8(左上)。Unicorn HAT HDは16x16でドット数は初代から4倍になりました。初代の半分のドット数でZeroサイズに縮めたUnicorn pHAT(これだけ持っていない)を経て、今年新たに登場したのがUnicorn HAT Miniです。ちなみに左下は似てるけど単色なScroll pHAT HD(青)です。

Unicorn HAT MiniはHDで使われているLEDを採用して17x7 == 119ドットのサイズになっています(Scroll pHAT HDも同じ)。最近のPimoroni製アドオンボードはABXYボタンがついでに実装されがちなんですが、Unicorn HAT Miniにも実装されています。PiZeroに載せればちょっとしたゲーム機なんかを作るのにも良さそうですね。

f:id:Akkiesoft:20201204200200j:plain

そして基板の余白もかわいく・クールに・おしゃれに仕上げるのがPimoroni。表面上部のロゴと雲の模様もかわいいですが、裏面も
しっかりデザインされています。RGBのつまみとかスライダーの絵がミキサーかDJのターンテーブルをイメージしてそうな感じです。

f:id:Akkiesoft:20201204200041j:plain

で、サンプルスクリプトを眺めていたらtext.pyというベッタベタなサンプルがあったんですが、流れる文字列がカラフルなゲーミング仕様!wこれを生かしてなんか出してみたくなり、最近お仕事で使う用事が多いワンタイムパスワードを表示できる何かを作ることにしました。

つくる

ワンタイムパスワードを扱うには、PyOTPライブラリが使えます。

pyauth.github.io

Secretを渡せば、あとはnow()で現在のOTPを取得できるスグレモノですが、OTPの期限切れに対応できるように、期限が5秒より少ないときは次のOTPが表示されるまで赤い点を一つ打って待つようにしています。

また、4つのボタンで4種類のワンタイムパスワードに対応できるようにするために、button-splash.pyのコードも組み合わせて実装していきました。button_mapにOTPのSecretを記述してください。

スクリプトはGistに放り投げました。そのうちRPi-ToolsリポジトリにセットアップPlaybookと合わせて整備したいと思います。

Pimoroni Unicorn HAT MiniでOTPを表示するスクリプト · GitHub

動かす

実行の様子はコチラ。OTPのSecretが登録されたボタンが押されると、現在のOTPがtext.pyのカラフルな文字列描画で流れていきます。

www.youtube.com

まとめ

Unicorrn HAT Miniのサンプルスクリプトを組み合わせて、ワンタイムパスワードを表示する物体を作るお話でした。

そんだけっちゃそんだけですし、普段使ってるGoogle Authenticatorスマホのアプリでええやんというハナシではあるんですが、何回も入力するような場合だとスマホのロックを解除するのがなんかだるかったというのがちょっとあります。ただ、文字がいっぺんに表示できないあたり、Unicorn HAT Miniでは不適当なフシがありますね。6ケタの文字がバシッと表示できるものだとMicro Dot pHATあたりが適当でかつカッコいいのですがボタンがないため、Button SHIMあたりとの組合わが必要になるのが惜しいところです。

Micro Dot pHATshop.pimoroni.com

Button SHIMshop.pimoroni.com

あるいは、Scroll pHAT HDのサンプルに縦向きで時計を表示するスクリプトがあったハズなので、これを持ち込んで6ケタを無理やり収めるのもありっぽそうです。……あー、時分だけか。ただ、5x5フォントだから5x3と行間に1ドットを2つ挟めばつめこめそう?あとは可読性との兼ね合いですね。

scroll-phat-hd/clock.py at master · pimoroni/scroll-phat-hd · GitHub

ちなみに、ワンタイムパスワードは時刻が命なので、時刻合わせは忘れずに。