背景
e-Paper(電子ペーパー)とは、電子書籍などに使われている、通電をやめても表示した内容を保持し続けるディスプレイです。e-Inkなどとも呼ばれます。
SPIで制御できるe-Paperを手に入れたので、Raspberry Piで操作してみました。
ところどころ詰まる部分があったので、やった内容を共有します。
10.3インチe-paperも試したので、良かったらこちらの記事もどうぞ。
10.3インチのe-paperをRaspberry Piで制御して日本語を表示してみた
全体像
この順に共有します。- 使ったもの
- Raspberry Piとe-Paperを接続
- 関連プログラムをインストール
- SPIを有効化
- e-Paperのサンプルプログラムを実行
- e-Paperに日本語と日本時間を表示
- 定期実行
- まとめ
使ったもの
- SSH接続できる状態のRaspberry Pi
Raspbian (Stretch 2018.03リリース版) をインストールしたRaspberry Piで動作確認しました。 - 7.5インチの3色(赤、黒、白) e-Paper
aliexpressで購入しました。
Raspberry Piで利用する場合は、上記リンクのHat型のコネクタを使うと楽だと思います。
記事で使用したのは上記のリンクとは違うコネクタですが、自分の確認した範囲では、利用する配線とプログラムは同じようでした。
なお、3色版は情報の更新に30秒位かかるので、更新時間を短くしたい場合は、2色にする(7.5インチ 白黒 6秒)か、サイズを小さくする(2.13インチ 3色 15秒)のが良いと思います。 - オスメスジャンパワイヤ(コネクタがRaspberry PiのHat型では無い場合)
Hat型のコネクタなら、ジャンパワイヤが無くても接続できます。
Raspberry Piとe-Paperを接続
Hat型ではないコネクタは、e-paperの製品情報ページに従い、Raspberry Piとこのように接続します。e-Paper | Raspberry Pi |
---|---|
VDD | 3.3 |
GND | GND |
DIN | MOSI |
CLK | SCLK |
CS | CE0 |
D/C | IO25 |
RES | IO17 |
BUSY | IO24 |
Hat型のコネクタの場合は、Raspberry Piに取り付ければ、上記の接続ができたことになります。
変更可能なコネクタのピンはこのようにしました。
J1: BS2 (4ピンでSPI通信)
J2: 3 (製品紹介ページに、今回使う7.5inchの製品は3を選択すると記されていました)
J3: 未使用
注意: e-Paperのフィルムは、通電面をコネクタの基板と反対側にして接続します。
(裏表逆にして接続していたため、動かずに時間を取られました。)
関連プログラムをインストール
ベースとして利用するサンプルプログラムがpythonというプログラミング言語で書かれていたので、pythonでプログラムを動かすために必要な関連プログラムをインストールします。下記のコマンドで関連プログラムをインストールできます。
sudo apt install fonts-noto-cjk python-spidev python-pil python-tz
インストールしたものを順に説明します。
spidevは、pythonでspi通信するためにライブラリです。
e-Paperとspi通信するために必要です。
pilは、pythonで画像処理するためのライブラリです。
e-Paperに表示するデータの作成に利用します。
日本語の太文字ドフォントが欲しいので、fonts-noto-cjkをインストールしてNotoSansCJK-Boldを使える状態にします。
tz(pytz)とはタイムゾーン管理プログラムです。
日本時間の取得に利用します。
SPIを有効化
Raspberry PiのSPIはデフォルトでは無効になっているので、有効にします。raspi-configを開きます。
sudo raspi-config
Interfaces -> SPI -> Yesを選択します。
raspi-configを終えて、再起動します。
e-Paperのサンプルプログラムを実行
自分が公開しているリポジトリのプログラムを利用する場合
e-Paperのドライバも含めて、今回作成したプログラムをgithubで公開しています。asukiaaa/raspi_spi_epaper
上記のリポジトリは下記のような流れで実行できます。
gitというバージョン管理プログラムをインストールします。
sudo apt install git
gitをインストールしたら、このようなコマンドでサンプルプログラムを動かせます。
mkdri ~/gitprojects cd ~/gitprojects git clone https://github.com/asukiaaa/raspi_spi_epaper.git cd raspi_spi_epaper python main_original.py
サンプルプログラムは2種類の画像を表示します。
1つはこの画像です。
pythonのプログラムで作成したデータを表示しています。
白い「e-Paper demo」という文字は、小さいからか、にじんだように表示されています。
もう1つはこの画像です。
赤色の画像データと黒色の画像ーデータを読み込んで表示しています。
「℃」や「99+」が薄くなっているように、細かい表示はかすれてしまうようです。
プログラム上でデータを作成する仕組みをベースに、日本語表示プログラムを作成します。
メーカーのページから最新版をダウンロードして利用する場合
メーカーのページにある、利用しているe-Paper(7.5inch type B)のサンプルプログラム公開ページの最新のプログラムを利用します。記事を書いている時点では「07:01, 13 April 2018」が最新なので、それの動かし方を説明します。
ダウンロードするファイルは7z形式で圧縮されているので、展開に利用する7zipをインストールします。
sudo apt install p7zip
ダウンロードして、展開して、Raspberry Pi向けのpythonプログラムがあるディレクトリに移動します。
wget https://www.waveshare.com/w/upload/0/01/7.5inch_e-paper_hat_b_code.7z 7zr x 7.5inch_e-paper_hat_b_code.7z cd 7.5inch_e-paper_hat_b_code/raspberrypi/python/
ダウンロードしたファイルはImageに関するライブラリがなぜかそのままでは使えない状態なので、下記のようにPILから呼び出すように書き換えます。
main.py
# import Image # import ImageDraw # import ImageFont from PIL import Image, ImageDraw, ImageFont
epd7in5b.py
# import Image from PIL import Image
修正できたら、下記のコマンドでサンプルプログラムを実行できます。
python main.py
githubのプログラムを実行したのと同じように2種類の画像が表示されると思います。
e-Paperに日本語と日本時間を表示
自分が公開しているリポジトリのプログラムを実行する場合
先ほどの手順でダウンロードしたリポジトリに日本語表示プログラム(main_show_jp.py)があるので、下記のようなコマンドで実行できます。cd ~/gitprojects/raspi_spi_epaper python main_show_jp.py
メーカーのページからダウンロードしたプログラムを編集する場合
下記のようにmain.pyを変更すると、日本語と日本時間を表示できます。日本語を扱うために、main.pyの先頭に下記の行を追加して、文字コードとしてutf-8を定義します。
# encoding: utf-8
時間を扱うためのライブラリをインポートします。
import pytz import datetime
日本語を含んでいるMotoSansCJK-Boldを利用するフォントとして読み込みます。
# font = ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf', 24) font = ImageFont.truetype('/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc', 45)
赤帯に「e-Paper demo」と表示していたえりあに、黒文字で「Hello, world. こんにちは。」と表示します。
注意すべきなのは、日本語を含む文字列はユニコードとして扱うため「"」の前に「u」を付けることです。
# draw_red.rectangle((0, 6, 640, 40), fill = 0) # draw_red.text((200, 10), 'e-Paper demo', font = font, fill = 255) draw_black.text((15, 10), "Hello, world. " + u"こんにちは。", font = font, fill = 0)
display_framの前に、空いている画面下のスペースに日本時間を表示します。
pytzを利用してAsia/Tokyoの時間を取得し、strftimeで月、日、時、分を表示しています。
jp_now = datetime.datetime.now(pytz.timezone('Asia/Tokyo')) draw_black.text((15, 300), jp_now.strftime('%m/%d %H:%M ') + u"表示", font = font, fill = 0)
画像ファイルの情報を表示する処理は不要なので、削除かコメントアウトします。
# display images # frame_black = epd.get_frame_buffer(Image.open('black.bmp')) # frame_red = epd.get_frame_buffer(Image.open('red.bmp')) # epd.display_frame(frame_black, frame_red)
上記の変更ができたら、プログラムを実行します。
python main.py
成功すれば、自分が公開しているリポジトリのプログラムと同様の表示になると思います。
定期実行
pythonの実行コマンドをcrontabに登録することで、定期的に実行できます。下記のコマンドでcrontabの編集モードになります。
crontab -e
下記の行を追加すると10分に1回、日本時間表示プログラムが実行されます。
*/10 * * * * python /home/pi/gitprojects/raspi_spi_epaper/main_show_jp.py
メーカーのページからダウンロードしたプログラムを利用する場合は、このような記述を追加します。
*/10 * * * * python [ダウンロードしたディレクトリのパス]/7.5inch_e-paper_hat_b_code/raspberrypi/python/main.py
まとめ
e-PaperをRaspberry Piで制御して、日本語と日本時間を表示できました。細かい表示はかすれたり、にじんだように表示されてしまうので、文字をはっきり見せるせるにはボールド体で45位の文字サイズで表示するのが良いように思いました。
参考になれば嬉しいです。
大きなepaper情報
13インチ
13インチのipaperモジュールがあるとコメントで情報をいただきました。1600x1200ピクセルなので、まあまあの情報を表示できそうです。
しかし、2018.09.10時点で$449とそれなりの価格である上に、$350のドライバが必要そうなので、8万円以上の費用がかかりそうです。
ドライバのダウンロードリンクなどが見当たらず、Raspberry Piで制御できるか分からないので、上記の13インチepaperを試すのは見送ります。
試された方が居れば、感想を共有してもらえると嬉しいです。
12.48インチ
12.48インチのe-paperがアマゾンで売っているとの情報をいただきました。amazonこんばんは、blog拝見いたしました。アマゾンにて12.48インチの多少お手頃価格なモジュールを見つけました。カレンダーとか予定表が作れたら便利そうですhttps://t.co/LFWAvlIUPc b/w,https://t.co/9h34TzBQFP b/w/r— felis🐈 (@felis) 2018年10月19日
aliexpress
12.48インチ 電子ペーパーディスプレイ
接続ボード
デモキット(接続ボード付き)
メーカー
12.48 e-paper screen, GDEW1248T3
Demo kit driver development board for 12.48 inch large e-paper e-ink display module DESPI-1248
このepaperは記事で使っているモジュールで利用しているepaperと同じgooddisplayという会社の製品なので、そのepaperを利用してモジュールを販売しているwaveshareが、もしかするとRaspberry Pi向けにサポートしてくれるかもしれません。
その他
Raspberry Piで使えそうな13インチ位のepaperがありましたら、情報を共有してもらえると嬉しいです。参考
7.5 inch color e-paper display GDEW075Z09Pythonの UTC ⇔ JST、文字列(UTC) ⇒ JST の変換とかのメモ
更新情報
2018.04.16更新時間を短くしたい場合は2色にするか、サイズを小さくしたら良いという情報を、使ったものに追加しました。
2018.04.19
aptコマンドで必要なライブラリをインストールできたため、pipコマンドを削除しました。
2018.04.25
Hat型を手に入れたので、その写真を追加しました。
2018.09.10
13インチのepaper情報を追加しました。
2018.10.19
12.48インチのepaper情報を追加しました。
2019.08.31
10.3インチのe-paperを試した記事のリンクを追加しました。
既知かもしれませんが13インチのe-paerありました。(高いです)
返信削除https://shopkits.eink.com/product/13-3%CB%9D-epaper-display-es133ut2/
卓上フォトフレームを電子ペーパーで作りたく思い、参考にさせて頂いています!
情報ありがとうございます。
削除記事に情報を追加させてもらいました。
以前軽く見たことはあったのですが、Raspberry Piで使えなさそうだったのでスルーしていました。
改めて見てみましたが、$350する専用ドライバでないと動かせなさそうな雰囲気なので、引き続きスルーしようと思います。
記事が参考になっているようで嬉しいです。