AmazonのKindleを始めとして、電子ペーパーを使用したプロダクトが次々と登場してきてます。電子書籍に留まらず様々な利用シーンの可能性がある電子ペーパーを、RaspberryPiを使って制御してみました。
サンプルコードを元に動作を確認するまでの流れを紹介します。

製品

今回はwaveshareの電子ペーパーを使用します。
サイズは何種類もありますが、今回は2.9インチで赤白カラーのこちらを使用します。
https://www.waveshare.com/2.9inch-e-paper-module.htm

動作

公式サイトのサンプルコードを動かします。
https://www.waveshare.com/wiki/2.9inch_e-Paper_Module_(B)

ちなみにこれは同じサイズで白黒と赤白黒の三色カラーの二種類があり、それぞれドライバが違うので注意してください。(今回は三色カラーのBタイプを動かします)

 

まずWikiの下の方にあるDemo Codeからデモコードをダウンロード。
中にはarduino、raspberyPi、stm32と各種マイコンごとのコードがありますが、今回使用するのはraspberrypi/pythonです。

まずraspberryPiの側の用意です。

1
$ sudo raspi-config

“5 Interfacing Options”  から、SPIを有効にします。
次に必要パッケージのインストール。

1
$ sudo apt-get install python-rpi.gpio python-pil

 

次に結線。
Wikiにもありますが、以下のように接続します。


1
2
3
4
5
6
7
8
- BUSY - GPIO24 (Pin18)
- RST - GPIO17 (Pin11)
- DC - GPIO25 (Pin22)
- CS - GPIO8 (Pin24)
- CLK - GPIO11 (Pin23)
- DIN - GPIO10 (Pin19)
- GND - Pin6など
- 3.3v - Pin1

これでOK。

 

では、動かしてみましょう。以下のようなコマンドを打ちます。
(sipとgpIOを使用するのでsudoが必要です)

1
$ sudo python main.py
1
2
3
4
5
6
7
pi@raspberrypi:~/2.9inch_e-paper_module_b_code/raspberrypi/python $ sudo python main.py
Traceback (most recent call last):
File "main.py", line 27, in
import epd2in9b
File "/home/pi/2.9inch_e-paper_module_b_code/raspberrypi/python/epd2in9b.py", line 28, in
import Image
ImportError: No module named Image

 

どうやらコードのインポートの記述に誤りがあるようです。
以下に示すように2つのファイルの修正をします。

  1. main.py
  2. epd2in9b.py
import Image    →    from PIL import Image
import ImageFont    →    from PIL import ImageFont
import ImageDraw    →    from PIL import ImageDraw

もう一度トライ。

1
2
3
4
5
6
7
8
9
10
11
pi@raspberrypi:~/2.9inch_e-paper_module_b_code/raspberrypi/python $ sudo python main.py
Traceback (most recent call last):
File "main.py", line 69, in
main()
File "main.py", line 54, in main
font = ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeMono.ttf', 16)
File "/usr/lib/python2.7/dist-packages/PIL/ImageFont.py", line 238, in truetype
return FreeTypeFont(font, size, index, encoding)
File "/usr/lib/python2.7/dist-packages/PIL/ImageFont.py", line 127, in <strong>init</strong>
self.font = core.getfont(font, size, index, encoding)
IOError: cannot open resource

今度は内部で参照しているフォントが見つからないと言われました。
存在しているフォントを探してそれに修正しましょう。

1
$ find / -name '*.ttf'  &gt; /dev/null | head -n 1

この環境では ‘/opt/vc/src/hello_pi/hello_font/Vera.ttf’ というのがあったのでこれを使用します。

 

main.py

1
2
3
""" このように書き換える """
""" font = ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeMono.ttf', 16) """
font = ImageFont.truetype('/opt/vc/src/hello_pi/hello_font/Vera.ttf', 16)

 

そしてもう一回動かす。

1
$ sudo python3 main.py

できました。

main.pyのデモではドライバにできる一通りの動作を行っています。
つまり、以下のものです。

  1. フォントによる文字出力
  2. 図形の描写(線、四角、丸)
  3. 画像の出力

これら応用すれば比較的簡単に制御できるんじゃないかと思います。
今回は比較的導入が簡単なPythonを使用しましたが、サンプルの中にはC言語のものもありますので、

こちらもトライしてみると面白いかもしれません。

 

XSHELLでは社内開発の一環として音声方向の測位や、LEDマトリックスモジュールなど、あらゆる題材に積極的に取り組んでいます。ぜひ弊社のブログを覗いてみて下さい。

コメント