はじめまして、アバンセシステムのTIGERです。
よろしくお願いします。
今回はRaspberryPiと電子ペーパーを使った簡単なスケジュール表を作ります。
電子ペーパーを使用するメリットとして画面の表示中に電力を消費せず、電力源を絶っても画面は表示し続けます。視野角も広く170°まで視認することができる仕様です。
デメリットとしては、今回選択した電気泳動式2色の電子ペーパーは全画面更新が6秒ほどかかります。この方式では1色ずつ描画されていく為、色が増えるほど更新時間は増えていきます。例として、同サイズの3色のものは全画面更新時間が16秒です。
今回作成するようなスケジュール表など画面の更新頻度が少なく、常時表示しておきたい文章の表示をするには低電力で目に優しい優秀なディスプレイです。
表示する予定表はGoogleカレンダーから情報を取得します。
下記の機材を使用します。
機材 | 数量 | 備考 |
Raspberry Pi zero WH | 1 | |
Waveshare E-paper | 1 | 今回は白/黒の2カラー 7.5インチの物 |
PC | 1 | MacOS Big Sur |
無線LANルーター | 1 | |
microSDカード | 1 | 容量: 32GBのものを使用 |
SDカード リーダー/ライター | 1 | microSD対応 |
USB to MicroUSBケーブル | 1 | 電源供給で使用 |
Google開発用アカウント | 1 | Googleカレンダーイベント取得の為 |
ピンヘッダと通信モジュールがついたボードであれば、Raspberry Pi zero WHでなくても問題ありません。
弊社のGTが執筆した下記の記事を参考にRaspberry Piセットアップをします。
今回はGPIOとWi-Fi通信を使用する為、第2回の章 Pythonパッケージソフトウェアインストールのパッケージはインストールを行わなくて問題ありません。
第1回 ラズパイを使用したBLE通信 ~ ディスプレイ、キーボード、マウスを接続しないで設定 前編 ~
第2回 ラズパイを使用したBLE通信 ~ ディスプレイ、キーボード、マウスを接続しないで設定 後編 ~
上記の記事の設定ができたら一度ラズパイにsshで接続し、追加の設定と通信と電子ペーパーの描画に必要なライブラリをインストールしていきます。
ロケールの追加
下記のコマンドを実行して、Raspberry Piにインストール済みのロケールの一覧を取得します。
$ locale -a
> C
> C.UTF-8
> POSIX
一覧の中にja_JP.UTF-8
がなかった場合は、追加するための操作を行います。
$ sudo raspi-config
上記のコマンドで、設定を開き
5.Localisation Options > 1.Locale と進んでいきます。ja_JP.UTF-8
が出てくるまで↓矢印を押してスクロールしていきます。
項目を見つけたらスペースキーを押して選択。エンターキーで終了してインストールします。
正常にインストールされたログが出ればOKです。
Generating locales (this might take a while)...
en_GB.UTF-8... done
ja_JP.UTF-8... done
Generation complete.
ライブラリのインストール
インターネット通信と描画に必要なパッケージをインストールします。
$ sudo pip3 install google-api-python-client
$ sudo pip3 install google-auth-httplib2
$ sudo pip3 install google-auth-oauthlib
$ sudo pip3 install pillow
$ sudo pip3 install python-dateutil
$ sudo pip3 install RPi.GPIO
$ sudo pip3 install spidev
ケーブルの接続
ラズパイの電源を切ってからピンヘッダにケーブルの接続を行います。
電子ペーパー購入元のWaveShare様のマニュアルを参照し、ボードと電子ペーパーを適切に接続します。
e-Paper | Raspberry Pi |
VCC | 3.3V |
GND | GND |
DIN | 19 |
CLK | 23 |
CS | 24 |
DC | 22 |
RST | 11 |
BUSY | 18 |
参考: Waveshare – 7.5inch e-Paper HAT Manual
使用するボードと電子ペーパーによっては接続するピンが変わる為、注意が必要です。
カレンダーIDの設定
最後に取得するカレンダーのIDを環境変数に登録します。
https://calendar.google.com/calendar/u/0/r
上記のURLにアクセスして、取得したいカレンダーの縦三点リーダーをクリックします。
リスト内の設定と共有をクリックして、カレンダーの設定画面を開きます。
画像に表示されている 赤枠内のカレンダーIDを使用します。
$ vi~/.bash_profile
末尾にCALENDER_IDを追加して、上書き保存します。
export CALENDER_ID=Googleカレンダーで取得したカレンダーid
これでRaspberry Piの設定は準備完了です。
今回のタスク表にはGoogleカレンダーの情報を取得するため、
API認証情報とアクセストークンが必要になります。
ラズパイで行うと時間がかかる為、この章はPC上で作業を行います。
まず、Githubからプロジェクトをダウンロードします。
$ git clone https://github.com/tiger-nk/E-PaperScheduleTable.git
定期的にGoogleカレンダーから情報を読み取る為にGoogle CloudにてWebアプリケーションとして登録を行います。
Google Cloud コンソールを開き、新しくプロジェクトを作成します。
プロジェクト名はわかりやすい名前にすれば何でも問題ありません。
プロジェクトを作成したら、APIとサービス > OAuth同意画面と進み、
同意画面を作成します。ここは入力必須*部分の記入だけで問題ありません。
同意画面を作成したら、認証情報のタブに戻ります。
画面上部の 認証情報を作成 から OAuth クライアントIDを選ぶと、OAuth クライアント ID の作成画面に移ります。
アプリケーションの種類で「デスクトップアプリ」を選択し、作成ボタンを押して作成します。
この時に出てきたウインドウ内の「JSONをダウンロード」をクリックして、ダウンロードをします。
“client_secret_xxxxxxxxx-xxxxxxxxxx.apps.googleusercontent.com.json
“のような名前のファイルがダウンロードされるので、
このファイルの名前をcredentials.json
に変えて先ほどダウンロードしたプロジェクトフォルダ直下に移動させます。
参考: Google Workspace for Developers – Create access credentials
次にGoogle Calender APIのサンプルコードを参考に認証ファイルをPickleに変換して取得していきます。
- Python用のGoogleクライアントライブラリをインストールします。
$ pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
- 先ほどダウンロードしたプロジェクト内のスクリプトを使い、認証ファイルを取得します。
$ cd E-PaperScheduleTable
$ python3 connect_calendar.py
>> Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=xxxxxxx-xxxxxxxxxxxx.apps.googleusercontent.com&redirect_uri=http.....
上記のスクリプトを実行すると、URLとログが表示され、
PCのデフォルトブラウザが起動してGoogleアカウント認証画面に表示されます。
この時に自動的に遷移しない場合はログに表示されたURL(https://accounts.google.com/o/oauth2/…)に手動でアクセスしてください。
認証画面にて開発用Googleアカウントを選択して認証します。
リスト型の結果が出力されて、token.pickle
が作成されていたら問題ありません。
参考: Google Calender- Python Quickstart
最終的に下記のツリーのような構成になっていればOKです。
E-PaperScheduleTable
├── Fonts
├── LICENSE
├── README.md
├── connect_calender.py
├── create_image.py
├── credentials.json
├── image.bmp
├── lib
├── main.py
├── run.sh
└── token.pickle
上記で変更を加えたプロジェクトフォルダをラズパイに送信します。
Mac上でターミナルを開き、下記のコマンドを入力します。
$ scp -r E-PaperScheduleTable pi@[ラズパイのIPアドレス]:~/home/pi
PCでの操作は以上になります。
次の章からはラズパイでの動作確認です。
いよいよ、Raspberry Piで電子ペーパーを動かします。
$ cd E-PaperScheduleTable
$ python3 main.py
電子ペーパーが何回か点滅した後に画像が表示されたら接続と設定は問題ありません。
最後に自動で更新が行われるようにスクリプトファイルをcrontabで定期的に実行するように設定します。
下記のコマンドを入力し、crontabに設定を追加します。
$ crontab -e
末尾に以下の文を追加します。フォルダパス
の部分はプロジェクトフォルダの保存箇所に置換してください。
# 起動時に実行
@reboot bash パス/run.sh
# 20分おきに実行
*/20 * * * * bash フォルダパス/E-PaperScheduleTable/run.sh
これで起動時と毎時20分おきに自動でスクリプトが実行されて、画面が更新されるようになりました。
今回はカレンダーからのスケジュールを反映させていますが、外部のAPIから天気情報などを抜き出して表示しても便利そうですね。
今回使用したコード:
GitHub – tiger-nk/E-PaperScheduleTable
WaveShare社製 電子ペーパーのパッケージ:
GitHub – waveshare/e-Paper
関連記事
-
こんにちは、アバンセシステムのTIGERです。今回は、3Dスキャン技術を使って3Dオブジェク...
公開日:2023.04.14 更新日:2023.04.14
-
はじめまして、アバンセシステムのTIGERです。よろしくお願いします。 今回はRaspber...
公開日:2022.09.09 更新日:2022.09.09
tag : IoT Raspberry Pi
-
ラズパイ実験室 〜いろんなmicroSDで性能を測ってみた〜
こんにちは! IoT時代到来の真っ只中ということで、弊社でも数多くのセンシングデバイスを取り...
公開日:2021.04.30 更新日:2021.06.29
tag : Raspberry Pi
-
WSL2でLocalStackを使ってLambda を実行してみる~実行編~
こんにちは、motoKNです。前回 の続きとなります。 それではローカル環境にLocalSt...
公開日:2023.01.13 更新日:2023.01.13
tag : クラウド
-
WSL2でLocalStackを使ってLambda を実行してみる~構築編~
こんにちは。ラボ記事投稿2回目のmotoKNです。 私自身、今のところ業務でクラウド環境を使...
公開日:2022.09.23 更新日:2022.12.08
tag : クラウド
-
第1回 ルネサスRX64MでBLE通信をしてみよう! ~開発環境準備編
こんにちは!Matsuです。 組み込み機器の世界もいろいろと進化してきました。IoTやスマー...
公開日:2022.06.10 更新日:2022.06.10