CircuitPython displayioライブラリの使い方 (4/5)

AdafruitのLearning Guideの非公式日本語訳です。
英語独特の言い回しを可能な限り日本語的な表現に直していますが、不自然に感じる部分も残っていますことを何卒ご容赦ください。

電子ペーパーディスプレイ

EPaperDisplay クラスは、前述の Display クラスと似ていますが、電子ペーパーディスプレイ (EPD、eInk、epaper など) ハードウェアに特化しています。
また、Displayと同様に、EPaperDisplayクラスを直接使用することはほとんどありません。代わりに、多くの電子ペーパーディスプレイブレークアウトやボード用のディスプレイ固有の設定を行うライブラリを使用します。

EPDライブラリ

ディスプレイの詳細については、CircuitPython EPDライブラリを介して行われます。これは、AdafruitのEPDブレークアウトやボードで使用されるメインのライブラリです。

電子ペーパーディスプレイ搭載ボード

Adafruit MagTagのようにEPDが内蔵されたボードを使用している場合は、CircuitPythonのファームウェアでEPaperDisplayがすでに設定されています。これにアクセスするには次のようにします。

import board
epd = board.DISPLAY

EPDの使い方

EPaperDisplayの一般的な使い方は、通常のDisplayとほぼ同じです。show()を呼び出して、どのGroupが表示されるかを設定します。表示サイズを問い合わせるために、width および height プロパティがあります。また、rotation プロパティを使用して、回転を問い合わせたり設定したりすることができます。
グループを実際に表示するには、refresh()を呼び出します。ただし、EPD特有の考慮すべき点があります。
それらについては次に説明します。

EPD特有の挙動

EPDは、TFTのような他のディスプレイとは根本的に異なるハードウェアです。主な違いは、表示に時間がかかることと、リフレッシュの頻度に制限があることです。そのため、EPDではオートリフレッシュを行いません。

EPaperDisplayは自動更新しません。ライブラリが自動更新をしてくれない限り、refresh()を呼び出す必要があります。

表示を更新するには、単純にrefresh()を呼び出します。しかし、表示速度の低下や更新回数の制限に対処するためには、これらの追加プロパティが重要です。

  • time_to_refresh – 表示を更新するまでの時間を秒単位で指定します。refresh()の呼び出しが早すぎると、例外が発生します。
  • busy – ディスプレイの更新中にTrueが表示されます。ディスプレイの更新が完了したことを確認してから他の作業を行いたい場合に使用します。

これらのプロパティがどのように使われるのか、簡単な例を挙げてみましょう。

# wait until we can actually refresh
time.sleep(epd.time_to_refresh)
# refresh the display
epd.refresh()
# (optional) wait until display is fully updated
while epd.busy:
    pass
# display is now updated

正確な使い方は、みなさんの個別のアプリケーションに依存します。
例えば、busyの状態を照会せずに他の作業に移るのは自由です。しかし、refresh()を呼び出した後、すぐにディープスリープに入るような場合は、ディスプレイが完全に更新されていることを確認してから実行してください。

また、busyが完了(Falseになった)しても、すぐにはrefresh()を呼び出せないこともあります。
time_to_refreshを適切に使用する必要があります。例えば、5秒間でディスプレイが更新される(busyがFalseになる)ものの、60秒に1回しかリフレッシュできない(time_to_refreshが>0である)場合です。

原文:https://learn.adafruit.com/circuitpython-display-support-using-displayio/epaperdisplay

Follow me on Twitter