あっきぃ日誌

ラズピッピブログのようなオタクブログのようななにか

Raspberry Pi PicoでTOTP表示機をつくりたい (1)

Raspberry Pi Advent Calendar 5日目です。別に途切れてもいいんだけれど、なんかもったいない気がして5日目です。皆様のご参加をいつでもお待ちしております。。

adventar.org

TOTP表示機

お仕事でもプライベートでも、どこかにログインしたりなんだりするときにワンタイムパスワードを使うことは増えているかと思います。が、ワンタイムパスワードを使うところが増えすぎて、スマホGoogle Authenticatorが数字まみれになっているので、ちょっと困りものです。あれ、フォルダ分けとかできると嬉しいんですけどね〜。

アプリを開いてよく使うやつをパッと見つけ出すのも辛くなってきたので、Picoでなんか出しっぱなしにできたらいいかなーと思った次第です。

あった

CircuitPythonで作るTOTP表示機はもうすでにAdafruitがチュートリアルを作成済みでした。もう本当になんでもあるわ。サービス選択にコードの入力まで実装されているので、同じハードを揃えたら普通に便利に使えそうです。

learn.adafruit.com

Breakout Gardenでつくりたいが、部材がない

が、できれば先日ケースを自作したBreakout Garden Packで作りたいので、その線でがんばります。LCDはあるとして、TOTPの生成には欠かせないRTCが……ないですね……。昔いくつか買った記憶があるものの、発掘に失敗したため、多分いらないと判断して放出した可能性がデカいです。Raspberry Piでは気軽にインターネットにつながってしまうのでNTPで拾って済む分、RTCいらんわとなりがちですが、Picoではなかなかそうもいかないので、RTCの需要復活と言った感じです。

というわけで、RTCモジュールをAliExpressで注文しつつ、それだといつ来るかわからないのでスイッチサイエンスでも注文しました(こちらもタイミングが遅く、週明け発送に)。ので、続きは来週です。

ちなみに、一つだけ時刻を得られるGPSモジュールというブツは持っていて、ちょっとやってみようとしたのですが、ベランダに出ないと時刻が取得できず、役に立たなかったためボツとなりました。知ってた。

見た目だけ整えておく

こうなるといま時点で私にできることは、コードをいい感じに参考にさせてもらいつつ、見た目を自分好みにカスタマイズするくらいなので、せめてそれをやります。

サンプルコードではTOTPを生成するHMACとかbase32のコードが一緒になってしまっているので、これらは別ファイルにしてimportするように変更しました。あと、キー入力とかTOTP送出とかの機能はないのでゴリゴリ削りました。

残りは本当に見た目のカスタマイズ。240x240のLCDサイズに合わせたテキスト配置に変えて、プログレスバー(これもライブラリになっていてほんとすげえ)の配色をTOTPの使用期限が近づいたら黄色とか赤とかに変えてみたり、ビットマップ画像を壁紙にできるようにしてみたりしました。

こんな感じに。

f:id:Akkiesoft:20211205011901j:plain

ところで、LCDはST7789というドライバーで動くものですが、同じドライバーで動く円形ディスプレイもあるので、こいつでも動かしてみました。表示位置調整でパラメーターは少し変わりますが、ちゃんと出ました。保護シートがもったいなくていまだに剥がせてない。

f:id:Akkiesoft:20211205012227j:plain

コードは最終形になったらGithubにぽいぽいしましょうね。

RTCが届いたら、そいつを実装して最低限は完成です。

OTPをキーボードとして振る舞ってTOTPを送出する機能は欲しい気がするので、ボタンを実装してみたいですね。Breakout GardenのI2CソケットにはINTピンがある(Raspberry PiのGPIOで3V3, SDA,SCL,GPIO4,GNDと並んでいるやつのGPIO4の部分)ので、ここを使えばいけそうです。これは作れるな。