カワリモノ息子の技術メモ的な~

カワリモノ息子とその母の技術メモ的な〜

学校が苦手な息子くんの作品とその母の作品、はたまた日常などいろいろを在宅エンジニア母が綴る

中1息子くん電子ペーパーで遊ぶ - JetsonNanoとRaspberry Pi

アキバで買ってきた

先日東京に行ってきまして、息子くん念願の秋葉原でお買い物してきました。

今回は↑この右上にうつっている電子ペーパーで遊んだ話を書きたいと思います。

電子ペーパーとは

そもそも電子ペーパーとは。
最近ちょいちょいTwitterで見かけるものの詳細についてはよくわからぬまま、私「電子ペーパー欲しい~」とほざいておりました。

電子ペーパーの特徴。通常のディスプレイと比較すると、
・省電力
・紙のように薄い
という感じです。
「省電力」っていうのに関しては、書き込み時(表示させるとき)には電気使うけどそれも省電力、表示させた状態なら電源ぬいちゃっても長期間表示状態を保つんです!すごい!

って、私よりも息子くんのテンションが上がりました。

WaveShare WS-14600 5.83インチ

こちらが今回入手した電子ペーパー。
www.physical-computing.jp

仕様はこんな。
www.waveshare.com

こちらのサンプルコード・ライブラリをcloneして使用したとのこと。
github.com

JetsonNanoで動かしてみた

ドキュメントを読むと、Raspberry piのほかJetsonNanoでもいけるとの情報があったので、
ちょうど取り出しやすい場所にあったJetsonNanoを使ってみることにしました。

でもこれが最初の難関の始まり^^;;

JetsonNanoが起動しない・・・?

電子ペーパー関係なく、JetsonNano起動してちょっと触ってるとすぐに落ちてしまう現象発生・・・!

原因はなんてことない、パワー不足でした。
電源をタコ足してたんですよね。。
以前、ラズパイでもタコ足が原因で電力不足になって不安定で落ちてしまうことがあったので、気づくことができました。

といってもそれに気が付くまで30分くらいかかってしまいました。とほほ。

つなぐ

ピンの配線は、GitHubの下記情報を参照しました。
e-Paper/RaspberryPi&JetsonNano/python/readme_jetson_EN.txt

Pin connections can be viewed in \lib\epdconfig.py and will be repeated here:
EPD    =>    Jetson Nano/RPI(BCM)
VCC    ->    3.3
GND    ->    GND
DIN    ->    10(SPI0_MOSI)
CLK    ->    11(SPI0_SCK)
CS     ->    8(SPI0_CS0)
DC     ->    25
RST    ->    17
BUSY   ->    24

f:id:toriko0413:20201107141851j:plain
各色のワイヤーを気を付けながらつないでいきます。

サンプルプログラムを動かす

サンプルプログラムは、cとpythonがありましたがpythonのほうを使用しました。

■サンプルプログラム
今回購入した製品は
e-Paper/RaspberryPi&JetsonNano/python/examples/epd_5in83bc_test.py
が動作するテストプログラムのようなのでこれを使用。

■必要なライブラリ
e-Paper/RaspberryPi&JetsonNano/python/lib/waveshare_epd/
も配置します。

環境を整えていざ実行!
しかし!プログラムを実行しても固まったようになって動きませんでした。

サンプルプログラムのGitHubのIssues見たらたくさんの「動かない」報告。
これはもしかしたらうまくいかないやつだったのかもしれない・・泣
なんて言いながら、ピンをつなぎなおしてみたり、ケーブルを裏向きにしてさしなおしてみたり(そういう情報もあったけど結局最初にささってた方向で合ってた)、だいぶ時間を使いました。

結果後でわかったことですが、実際には動いていたんです。

まずPuDBというデバッガでデバッグしてみた息子くん。

f:id:toriko0413:20201107124858j:plain
えええっ、pythonってこんなVBみたいにデバッグできるの!しかもLinuxで!ってびっくりした私でした。

デバッグしてみると初期処理も描画処理もちゃんと動いていました。
その描画処理中、

epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRYimage))

このdisplayの関数の中では、3万回以上ループ処理されている模様でした。

このループ中で止まってるのかも?
とにらんで、ループ中にログ出力させながら、実行。
すると、

f:id:toriko0413:20201107130614j:plain

ちゃーんと進みました。赤で囲ってる部分がループの処理。33599回実行されています。
じつはこれプログラム起動してから全部終わるまで5分位かかってました。
今まで「固まった」って思ったのは処理に時間がかかってただけみたいでした。
時間かかりすぎ・・

そしてちゃんとサンプル画像が表示されることを確認しました!

f:id:toriko0413:20201107130947j:plain

おおっ、電源ぬいても表示されたままー♪

Raspberry piで動かしてみた

次の日ラズパイでも動かしてみました。
我が家のはRaspberry pi 3 model b です。

ピンへの配線は今度は下記を参考にしました
e-Paper/RaspberryPi&JetsonNano/python/readme_rpi_EN.txt

Pin connections can be viewed in \lib\epdconfig.py and will be repeated here:
EPD    =>    Jetson Nano/RPI(BCM)
VCC    ->    3.3
GND    ->    GND
DIN    ->    10(SPI0_MOSI)
CLK    ->    11(SPI0_SCK)
CS     ->    8(SPI0_CS0)
DC     ->    25
RST    ->    17
BUSY   ->    24

驚いたのが、JetsonNanoでは表示されるまでだいぶ待たないといけなかったのに、ラズパイだと早かった!
「ぴゅん」とまではいかないけど、少し待てば表示されるといったふうでした。

f:id:toriko0413:20201107134056j:plain

プログラムに手を加えて、ラズパイに接続したカメラで撮影した画像を出力するようにもしてみました。

f:id:toriko0413:20201107134204j:plain
f:id:toriko0413:20201107134220j:plain

この電子ペーパーは2色対応なんですが、黒い画像と赤い画像を合成する形で作られていて、今回の画像は黒のみで出力するようにプログラムすることでこのようにグレースケール表示できるようにしたとのことでした。

今後の展望

ケースを3Dプリンターで作って、置いておけるようにしたいな~。