電子ペーパーでカレンダーを作るという面白そうな記事を何件か見つけ、
これはやってみないとな〜!と思い、電子ペーパーをポチりました。
マイコン初心者にはなかなかハードル高かったけど、物理的な接続さえどうにかしてしまえば結構簡単。
Waveshare製 e-peper + RaspberryPiのビルドログ書いたし、せっかくなのでカレンダー作った時の話も書き留めておきます。
完成品はこんな感じです。
実装だけ見たい方はGithubを見てください。
予定表はGoogleカレンダー、
気象情報はOpenWeatherから取得しているため
別途 認証ファイルとAPIキーを取得する必要があります。
完全に余談ですが、部屋の温度が24℃なのに対して表示している気温が18℃だったので、
取得している都市を間違えているのかと思いましたが、アプリで確認しても18℃で困惑しました。
前準備
まずはプロジェクトをダウンロード。
適当な場所にクローンします。
https://github.com/9610r/e-paperCalendar
git clone https://github.com/9610r/e-paperCalendar.git
認証情報取得
カレンダー、気象情報を取得するための事前に必要な認証情報の取得として
の2つが必要になります。
Google Calenderの認証情報取得はこちらのステップ1までを参考に取得。
https://dev.classmethod.jp/articles/google-calendar-api-get-start/
client_secret_xxxxxxxxx-xxxxxxxxxx.apps.googleusercontent.com.json
のような名前のファイルがダウンロードされるので、credentials.json
に名前を変えてプロジェクトフォルダ直下に移動。
OpenWeatherも他サイトの取得方法を見ながらAPIキーを取得。
世界の天気API「OpenWeatherMap」の無料APIキー発行・取得、リクエスト方法 | AutoWorker〜Google Apps Script(GAS)とSikuliで始める業務改善入門
create_image.py
とmain.py
の10行目あたりの部分を取得したトークンに置換。
OpenWeatherToken = "<YOUR OpenWeather API AccessToken>"
基本的に私が所持している7.5inch e-Paper V2をベースに作成したものになりますが、
個人的には3色以上あったほうが見た目が良いと思います。
これから買おうと思っている人はあまり値段に差はないので7.5inch HAT(B)を買うのをお勧めします。黒/赤/白の3色です。
私はPyCharmのリモートホスト機能経由でフォルダごとアップロードしているので、
基本的にローカルに落とし込んでからやりました。
ラズパイの設定は以下を参考に設定。
Raspberry Pi Zero WHの環境構築(Mac PC)
Pythonなど、本当はPyenvなどで環境を分けたほうがいいと思いますが、これ以外に使う用途もないまっさらな環境だったので、私はPythonも直で入れてます。
通信と描画に必要なライプラリをインストール。
$ sudo pip install google-api-python-client $ sudo pip install google-auth-httplib2 $ sudo pip install google-auth-oauthlib $ sudo pip install pillow $ sudo pip install RPi.GPIO $ sudo pip install spidev
実装
とりあえずWaveshare 公式のサンプルコードを動かしましょう
Waveshareの以下のプロジェクトをgitでclone。
GitHub - waveshare/e-Pape
git clone https://github.com/waveshare/e-Paper.git cd e-Paper-master/RaspberryPi_JetsonNano/python/examples python3 epd_7in5_V2_test.py
サンプルが映りました。
7.5inch V2特有のバグなのかわかりませんが、画像のように接続した状態だと
DEBUG : ~: e-Paper busy
の部分で内部で無限ループすることがあるみたいです。
フォーラムを見ていたら40回に1回いけたみたいな報告もありましたが、
流石にそれでは運用できないので、少し見た目は悪くなりますが公式が回答していたジャンプワイヤを使った方法で接続しました。
そもそもの原因は電圧の問題らしいですが、加工するのが面倒だったので適当に繋ぎ直して解決。
↓これだとダメで↓
↓これだと書き込めた↓(ケースに入れてしまったので少し見にくいかも)
表示されたら電子ペーパーのテストはOK.
次は表示用の画像生成です。
ラズパイでカレンダーを定期的に取得するためにtoken.pickle
を先にローカルで取得を行います。
まず下記のコマンドを打ち込みます。
$ cd e-paperCalendar
$ python3 connect_calendar.py
↓
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=969238453089-lu524s499p8dsnde7euogjfase9d9ase.apps.googleusercontent.com&redirect_uri=http.....
ブラウザが開かれて認証画面になるはずです。
取得したいカレンダーを持っているアカウントを選択して認証します。
リスト型のリザルトが返ってきて、token.pickle
が作成されていたら問題ありません。
あとはローカルからラズパイにFTPなどでファイルを転送し、プログラムをcronで定期的に実行してあげるようにすると完成です。
crontab -e
で開いて、末尾に以下を追加
# 起動時に実行 @reboot bash パス/run.sh # 20分おきに実行 */20 * * * * bash パス/e-paperCalendar/run.sh
これで起動時と20分おきに自動で電子ペーパーが更新されるようになります。
今後アップデートするとしたら、カレンダー更新した時に自動で更新されるようにもしたいですね。
おまけ
私はiPhoneとMacをメインで使用しているので、Appleのカレンダーと同期するようにしています。
Googleカレンダーの設定と共有 > カレンダーの統合 から
iCal形式の公開URL をコピーして、カレンダーに登録するとお互いのイベントが共有されます。
Appleのカレンダーでイベントの追加をGoogleカレンダーを選択して登録すると、Googleにも反映されます。
Appleユーザーの方は是非お試しを。
参考
原動力になった記事です。感謝
Googleと連動した電子ペーパー製カレンダーを作る
Waveshare E-paper HATの問題についての原因と解決策の記事です。
Waveshare E-paper HAT issues
全体のコード: