arrow-righthamburgerlogo-marksocial-facebooksocial-githubsocial-twitter
2019.01.29

電池が切れても消えないディスプレイって?電子ペーパーを使ってみた!

佐々木さん

電子工作レシピ
   このエントリーをはてなブックマークに追加  

こんにちは、わくわくエンジニアの佐々木さんです。

みなさんは電子ペーパーを知っていますか?

電子ペーパーはその名の通り、紙のような見た目のディスプレイです。低消費電力であることや、最後に表示したものを電源がなくても保持し続けることが特徴として挙げられます。

身近なものだとAmazonのKindleで採用されています。

それでは実際に本題に入っていきましょう!

電子ペーパーの仕組み

今回使用するのは2.9inch e-Paper Moduleという電子ペーパー。

電子ペーパーは複数の表示方式がありますが、2.9inch e-Paper Moduleは電気泳動方式というものが採用されているためこちらの説明をしたいと思います。

電気泳動方式では、ディスプレイの中にマイクロカプセルという色を表現するための透明なカプセルが隙間なく並んでいます。そのマイクロカプセルの中には色のついた粒子が入っており、かける電圧で粒子を移動させることによって、見える色を変えています。電源がなくなっても粒子は移動しないので、最後に表示したものを保持し続けることができます。

従来は白黒のディスプレイが主流でしたが、現在では3色のディスプレイも多くなっています。

使ったもの

20180810_165537.jpg

このディスプレイは白黒黄の3色を表現できるディスプレイになっています。この他にも、白黒や白黒赤などを表示することができるディスプレイもあります。

20190120_192847.jpg

このRaspberry Pi Zero WHはIoTで使われるボードの1つです。

ディスプレイに表示させてみよう

今回は2.9inch e-Paper Module User Manualを参考にして進めていきます。

配線

GPIO2.9inch e-Paper Module
3.3V3.3V
GNDGND
MOSIDIN
SCLKCLK
CE0CS
25DC
17RST
24BUSY

環境構築

以下のコマンドが今回プログラムを実行するのに必要なものをインストールするコマンドになります。

ターミナルを開いて実行してください。

sudo apt-get install python-pip
sudo pip install spidev
sudo apt-get install libjpeg-dev
sudo pip install Image

次に、/boot/config.txtを編集します。以下のコマンドを実行してください。

sudo nano /boot/config.txt

すると、nanoエディタが開くので、以下の手順を行なってください。

  1. 番下にdtparam=spi=onを追加
  2. キーボードの controlキーxキー を同時に押す
  3. yキーを押す
  4. enterキーを押す
  5. 全て完了したらrebootコマンドで再起動

これで環境構築は完了です。

プログラム

デモプログラムが公開されているため、こちらからcurrentと書かれているものをダウンロードしてください。

ダウンロードが完了したら以下のコマンドを実行してください。

sudo apt-get install p7zip-full
7z x 2.9inch_e-paper_module_b_code.7z

上記のコマンドで出てきた中のRaspberryPi/python2を今回は使います。

ターミナルでRaspberryPi/python2ディレクトリに移動してpython main.py**を実行すると、デモプログラムが起動します(※何も編集していない状態だとフォントが存在していないためエラーが発生します)。

nano main.pyでファイルを少し編集します。

main.pyには以下のようなプログラムがあります。

main.py

font24 = ImageFont.truetype('/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', 24)
font18 = ImageFont.truetype('/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', 18)

この'/usr/share/fonts/truetype/wqy/wqy-microhei.ttc'という部分を '/opt/vc/src/hello_pi/hello_font/Vera.ttf'に変更します。

もう一度python main.pyを実行すると、画面がピカピカし始め、Hello, worldなどが画像に表示されます。

では、実際にプログラムを少し変えて見ていきましょう。

main.py

#!/usr/bin/python
# -*- coding:utf-8 -*-

import epd2in9b
import time
from PIL import Image,ImageDraw,ImageFont
import traceback

try:
    # ディスプレイの初期化処理をしています。
    epd = epd2in9b.EPD()
    epd.init()
    print "clear"
    epd.Clear(0xFF)

    # ディスプレイを横に使うように設定しています。
    HBlackimage = Image.new('1', (epd2in9b.EPD_HEIGHT, epd2in9b.EPD_WIDTH), 255)  # 298*126
    HRedimage = Image.new('1', (epd2in9b.EPD_HEIGHT, epd2in9b.EPD_WIDTH), 255)  # 298*126
    print "Drawing"
    drawblack = ImageDraw.Draw(HBlackimage)
    drawred = ImageDraw.Draw(HRedimage)

    # 1つ目の引数でフォント、2つ目の引数でフォントのサイズを指定しています。
    font30 = ImageFont.truetype('/opt/vc/src/hello_pi/hello_font/Vera.ttf', 30)

    # 1つ目の引数で座標、2つ目に表示させたい文字列、3つ目には上記のフォントを指定します。
    drawblack.text((10, 0), 'Hello, World', font = font30)
    # ディスプレイに表示させます。
    epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRedimage))
    time.sleep(2)

    print "read bmp file"
    HBlackimage = Image.open('2in9b-b.bmp')
    epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRedimage))
    time.sleep(2)
except Exception, e:
    print 'traceback.format_exc():\n%s' % traceback.format_exc()
    exit()

このプログラムを実行すると以下のようになります。

20190121_002653.gif

20190121_002722.gif

まとめ

いかがでしたでしょうか?

電子ペーパーは、低消費電力という特徴があるので、センサからとれるデータを一定時間ごとに表示したり、自分の好きなものを表示して持ち運んだりすることもできます。

電子部品の販売店に売っていたりしますが、電子ペーパーの使い方はあまり広がっていないように感じるので、この記事を参考にぜひやってみてください!

   このエントリーをはてなブックマークに追加