3この記事は2481文字で約7分で読めますラズパイが余っているので活用したいと思います。Contentsラズパイ有効活用そもそもなぜ電子ペーパー?先人がいました。皆さんは家に余っているラズパイはありますか?私はあります...。いい加減眠らせておくのももったいなく感じ、かつちょうどカレンダーが家になかった(会社でもらったカレンダーは全部捨ててしまった)のでラズパイと電子ペーパーを使って万年カレンダーでも作ってみようかと思います。ラズパイと電子ペーパーのセットアップは過去記事MQTTと電子ペーパーを使って年賀状を作るで実施済みなのでこちらを使うことにします。そもそもなぜ電子ペーパー?昨今リモートワークも多くなり、オフィスに出向くことも少なくなりました。私はオフィスの机に卓上カレンダーを置いていたのですがリモートワーク中でもカレンダーが常に見れるようにしておきたいです。無茶なスケジュールをクライアントから要求されたときに、おおよそ何週間くらい猶予があるのかカレンダーを使うことで直感的にわかるからです。家に置いておく卓上カレンダーが現在ありません。Piを買ったのでカレンダーデバイスを作ってみようと思います。作ろうと思って調べるとすでに電子ペーパーでカレンダーを作っていた人がいました。Googleカレンダー連携までしているまさにスマートデバイス。Googleと連動した電子ペーパー製カレンダーを作る一からコードを書くのもめんどくさくなり、上記をパクッて参考に作ればいいという気分になりました。コード自体は結構コピペで作って、画面サイズ変更と赤色の印字無効だけで済ませてしまったので公開はしませんが詰まったところを下記に書いていきたいと思います。GoogleのoAuth2.0認証が取れない!!これが一番苦戦しました。Googleと連動した電子ペーパー製カレンダーを作るを参考に作っていくとGoogleカレンダーとの連携のため、oAuth2.0のユーザー認証が必要なのですが...。CloudのAPIコンソールから発行できるクレデンシャル用のJSONがある場合で、認証済みの場合に作成されるtoken.pickleが存在しない場合はgoogle_auth_oauthlib.flow.InstalledAppFlowのrun_local_serverを使って、ローカル上にWebサーバーを立ててGoogleアカウントでの認証が済んだ場合にローカルサーバーにリダイレクトするようにする認証方式をとるようにしてありました。token)公式のドキュメントに載っているクイックスタートでも同様の設定になっているので問題ないと思ってましたが....。いざリダイレクトが始まると..。https://console.developers.google.com/apis/credentials/oauthclient/xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com?project=xxxxxxxxxxxxxというエラーがブラウザで出てしまい、リダイレクトされず当然認証も通りませんでした。port=xxxxxで固定化してリダイレクトURLもポート指定にして再度トライしたのですが、同じエラーでした。途方に暮れていたのですが、そもそも自己でリダイレクト先のローカルサーバーを立てることのできないタイプのデバイスもあるはずでそういった場合はどうやって認証するのか調べたところ...。テレビと入力機能が限られているデバイスという認証オプションが用意されてました。flow.run_console()に書いてあげることで、ブラウザ上で認証が完了したらワンタイムコードが表示され、それをコンソール上に入力する形で認証が通るようになりました。2.7インチは画面小さすぎ先人の知恵をお借りして画面サイズとフォントサイズだけ合わせと赤色無効化をして調整して作ったところ...。小さいっ!圧倒的に小さい。Zippoと比べてもらうとわかるのですが、こんなの使いものにならない!先人、かなり理にかなったデザインをしていたようで、メインのカレンダーの他、右側に予定表と次の月のミニカレンダーを表示するようになっているのですが、さすがに2.7インチには小さすぎました。このサイズだと予定表とか読めたものではないです。予定表をよく見てほしい。Beginning」行きます。GPIOのキースイッチを使おう!話を戻して、2.7インチだとさすがにいろいろ視認性が悪いですね、という結論になりました。そこで、2.7インチHATに搭載されているキースイッチを活用することにしました。キースイッチは4つありますので、4画面に分割できます。これならうまくいきそうですね。下記の通りにしました。それぞれを分割してスクリプトを作成します。キースイッチがデータシートに載ってない!さて、それぞれの描画スクリプトは何のことなく作れたので、あとはキースイッチが押されたら画面を切り替えるようにします。データシートを見ていきましょう。https://www.waveshare.com/wiki/2.7inch_e-Paper_HATあれ?キースイッチの記載がない...。4という記載がありました!!GoodJob!ということでコードを書いていきます。キースイッチが押されたときに何かをする、というのはGPIO.add_event_detectでイベントリスナーを登録できます。コールバック関数が設定できるので、こちらにキースイッチが押下された際のふるまいを登録すればいいです。コールバック関数にはGPIOのPINが引数でわたりますのでkey_pressedみたいな感じで共通化できます。本来はちゃんと作るべきなのですが、ちょっと手探りで画面を作っていたところもあり、subprocessを使って直接Pythonファイルを実行するイケてない実装になってます。