Open4

Raspberry Pi に電子ペーパーを繋げてあそぶ

ChanmoroChanmoro

マニュアルはここにあった

https://www.waveshare.com/wiki/7.5inch_e-Paper_HAT_Manual#Working_With_Raspberry_Pi

電子ペーパーの仕様、ラズパイと繋げるセットアップのやり方、Python のサンプルの動かし方も書いてある

Install the function library のところに依存ライブラリのインストールが書いてあるが、github にあるサンプルコードだと numpy は使ってないようなので実際には以下をインストールすれば OK

sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo pip3 install RPi.GPIO
sudo pip3 install spidev
ChanmoroChanmoro

Python のサンプルコードがこれ

https://github.com/waveshare/e-Paper/blob/master/RaspberryPi_JetsonNano/python/examples/epd_7in5_V2_test.py

examples のディレクトリには他の電子ペーパー用のコードもあるので紛らわしいが epd_7in5_V2_test.py というやつが今回いじってるものに対応したコード

epd.display(epd.getbuffer(Himage))

という部分で画像を電子ペーパーに描画している
色々と前処理は書かれているが、PIL の Image オブジェクトを作って epd に渡すと描画してくれるということがわかった

epd.getbuffer(...) で Image オブジェクトからバイト列を生成しているようなので、 epd.display(...) に描画するバイト列を渡すということのよう

ChanmoroChanmoro

EPD クラスの処理はこちらに定義されている

https://github.com/waveshare/e-Paper/blob/60762ac5a3/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5_V2.py

謎の16進数の定数が多く定義されているが、これは電子ペーパーに定義されているコマンドを表している模様
その定義はドキュメントがあった
※Webにあるマニュアルの Documentation -> 7.5inch e-Paper V2 Specification (current version) から飛べる
https://www.waveshare.com/w/upload/6/60/7.5inch_e-Paper_V2_Specification.pdf

例えば電子ペーパーに描画する epd.display(...) の処理はこうなっている

    def display(self, image):
        self.send_command(0x13)
        self.send_data2(image)

        self.send_command(0x12)
        epdconfig.delay_ms(100)
        self.ReadBusy()

0x13 のコマンドは Display Start transmission コマンド

0x12 は Display Refresh のコマンド

ということが PDF のドキュメントの「5. Command Table」に書かれている