【Arduino】SeeedStudioのEPD ePaper Breakout BoardとePaper Displayを使う

it

書き込みボードと電子ペーパーディスプレイが分離できるモジュールを入手しました。
SeeedStudio XIAO で電子ペーパーディスプレイを制御します。

記事の内容

SeeedStudio のePaper Breakout BoardとePaper Displayを使います。
XIAO規格のマイコン基板との親和性が良く配線不要で使用できます。

記事の内容
・XIAO基板を使って表示してみます
・ブレッドボードを使用して表示してみます
・RP2040マイコンでも使用できるようにライブラリを修正します
・ESP32, RP2040, nRF52840, SAMD21マイコンで使用できるサンプルスケッチを掲載します。

ePaper Breakout Board

主な仕様

電源3.3V
接続SPI
その他Seeedstudio XIAO 規格マイコン基板

SeeedStudio ePaper Breakout Board ページ :
XIAO eInk Expansion Board | Seeed Studio Wiki

ピン配置

ピンソケットにXIAO基板をマウントした場合のピン配置です。

外観

Monochrome ePaper Display

主な仕様

接続FPC (SeeedStudio ePaper Breakout Boardと接続)
カラー白黒
サイズ2.13inch
解像度(h, w)122, 250

外観

パッケージはSeeedstudio梱包箱です。
いつも丁寧な梱包です。

使ってみた

ePaper Breakout BoardにSeeedStudioの XIAO 規格マイコンをマウントして使用します。
ロープロファイルピンソケットを使用しているため、ピンヘッダの半分くらいの挿抜なのが楽です。
ピンヘッダを取り付けなくても使用できます。

ピンヘッダを取り付けた場合は下図のようなブレッドボードに配線をすることでXIAO規格以外でも使用することができます。
画像はXIAO ESP32C3で配線した図です。


SeeedStudioのMonochrome ePaper Displayは書き込み用のボードとディスプレイが別体にできるため、ディスプレイだけのとても薄い状態で表示使用することができます。

ePaper自体書き込みにもたつきがあるので、高速な描画や書き換え回数の多い用途には不向きなです。
これらのサンプルテキスト表示でも3, 4秒程度かかります。
描画の終わった状態では電源が無くても表示が維持できる点や、バックライト無しでも視認できます。

ライブラリにはLOLINの “Arduino library for the LOLIN e-paper display”を使用しました。
このライブラリはRP2040には対応していなかったため修正して使用しています。
ライブラリの修正方法はこちらで紹介しています。

まとめ

Good
・XIAO規格のマイコン基板なら配線不要で使用できる
・ePaper Display単体に分離できるので、狭小か所での使用でも対応できる

Bad
・画面の更新が遅い
・発光機能がないので暗い空間では表示の認識が難しい

準備

開発環境

Arduino環境でRaspberryPi Picoを使用します。
Arduino環境の準備はこちらの記事で紹介しています。

ボードライブラリ

XIAOシリーズの動作確認をしたので多種にわたるライブラリを掲載します。
必要なボードライブラリをインストールします。

ボード名ボードマネージャURLボードライブラリ選択するボード
Raspberry Pi Picohttps://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.jsonRaspberry Pi RP2040 BoardsRaspberry Pi Pico
XIAO RP2040https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.jsonRaspberry Pi RP2040 BoardsGeneric RP2040
XIAO ESP32 C3https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.jsonesp32 by Espressif SystemsESP32C3 Dev Module
XIAO ESP32 C6https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.jsonesp32 by Espressif SystemsESP32C6 Dev Module
XIAO ESP32 S3https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.jsonesp32 by Espressif SystemsESP32S3 Dev Module
XIAO
nRF52840
https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.jsonSeeed nRF52 Boards by Seeed StudioSeeed XIAO nRF52840
XIAO SAMD21https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.jsonSeeed SAMD Boards by Seeed StudioSeeeduino XIAO

モジュールライブラリ

1.モジュールライブラリのインストール

モジュールライブラリにはLOLIN EPD_Libraryを使用します。
Githubからダウンロードし、ArduinoIDEの
メニュー > Sketch > Include Library > Add Zip Library … からインストールします。
インストール方法は、「Arduino環境の作り方」の「Zipファイルからインストール」で紹介しています。

ライブラリ名github URL動作確認時バージョン
Arduino library for the LOLIN e-paper displayhttps://github.com/wemos/LOLIN_EPD_Library不明

Adafruitのライブラリでも表示はしますが、画面上部に「砂嵐」が映ってしまいます。
Adafruit製以外のモジュールを使用すると起きる現象のようです。

ライブラリ名:Adafruit EPD byAdafruit(Ver 4.5.6)

2.モジュールライブラリの修正

LOLIN EPD_LibraryをRP2040に対応させるための修正をします。
ESP32系を使用する場合はこの作業は不要です。

C:\Users\<アカウント>\Documents\Arduino\libraries\LOLIN_EPD\src\LOLIN_EPD.cpp
を開き、以下 Added for RP2040コメントの2行を追記します。

#ifdef __AVR__
#include <avr/pgmspace.h>
#elif defined(ESP8266) || defined(ESP32)
#include <pgmspace.h>
#elif defined(ARDUINO_ARCH_RP2040)          //<-Added for RP2040
#include <pgmspace.h>                       //<-Added for RP2040
#else
#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) ///< read bytes from program memory
#endif

接続

ePaper Breakout BoardとMonochrome ePaper DisplayをFPCケーブルで接続します。

使い方

文字の表示

説明

シンプルに文字列を表示します。
“TAMANEGI”
“SSD1680”
“Res=250 x 122”

XIAO規格を使用し「ボードマウント版」「ブレッドボード配線版」のどちらでも使用できます。
ボードライブラリで定義しているマクロによりボードごとにピン設定とSPIの初期化を変更しています。

XIAO規格では以下ボードに対応、動作確認をしています。
・SAMD21
・ESP32 S3
・ESP32 C3
・ESP32 C6
・RP2040
・nRF52840

配線

ボードマウント版

XIAOボードの方向に注意して取り付けます。

ブレッドボード配線版

配線は代表でXIAO RP2040で示しています。
配線の位置関係はすべてのXIAOで同じです。

スケッチ

#include <LOLIN_EPD.h>
#include <Adafruit_GFX.h>

//ボード選択
//XIAO SAMD21 : Seeeduino XIAO
//XIAO ESP32 C3 : ESP32C3 Dev Module
//XIAO ESP32 S3 : ESP32S3 Dev Module
//XIAO RP2040 : Generic RP2040
//XIAO nRF5280 : Seeed XIAO nRF52840

//SAMD21
#ifdef ARDUINO_ARCH_SAMD
#define EPD_CS    (1)
#define EPD_DC    (3)
#define EPD_RST   (0)
#define EPD_BUSY  (5)
#endif

//ESP32 C3
#ifdef ARDUINO_ESP32S3_DEV
#define EPD_CS    (2)
#define EPD_DC    (4)
#define EPD_RST   (1)
#define EPD_BUSY  (6)
#define EPD_MOSI  (9)
#define EPD_SCK   (7)
#endif

//ESP32 C3
#ifdef ARDUINO_ESP32C3_DEV
#define EPD_CS    (3)
#define EPD_DC    (5)
#define EPD_RST   (2)
#define EPD_BUSY  (7)
#define EPD_MOSI  (10)
#define EPD_SCK   (8)
#endif

//ESP32 C6
#ifdef ARDUINO_ESP32C6_DEV
#define EPD_CS    (1)
#define EPD_DC    (21)
#define EPD_RST   (0)
#define EPD_BUSY  (23)
#define EPD_MOSI  (18)
#define EPD_SCK   (19)
#endif

//XIAO RP2040
#ifdef ARDUINO_ARCH_RP2040
#define EPD_CS    (27)
#define EPD_DC    (29)
#define EPD_RST   (26)
#define EPD_BUSY  (7)
#define EPD_MOSI  (3)
#define EPD_SCK   (2)
#endif

//XIAO nRF52840(Sense)
#ifdef ARDUINO_ARCH_NRF52
#define EPD_CS    (1)
#define EPD_DC    (3)
#define EPD_RST   (0)
#define EPD_BUSY  (5)
#endif

LOLIN_SSD1680 EPD(250, 122, EPD_DC, EPD_RST, EPD_CS, EPD_BUSY);

void setup(void)
{
#ifdef ARDUINO_ARCH_SAMD
  SPI.begin();
#endif

#ifdef ARDUINO_ARCH_NRF52
  SPI.begin();
#endif

#ifdef ARDUINO_ESP32S3_DEV
  SPI.begin(EPD_SCK, -1, EPD_MOSI, EPD_CS);
#endif

#ifdef ARDUINO_ESP32C3_DEV
  SPI.begin(EPD_SCK, -1, EPD_MOSI, EPD_CS);
#endif

#ifdef ARDUINO_ESP32C6_DEV
  SPI.begin(EPD_SCK, -1, EPD_MOSI, EPD_CS);
#endif

#ifdef ARDUINO_ARCH_RP2040
  SPI.setTX(EPD_MOSI);
  SPI.setSCK(EPD_SCK);
  SPI.begin();
#endif

  EPD.begin();
  // large block of text
  EPD.clearBuffer();
  EPD.fillScreen(EPD_WHITE);

  EPD.setTextSize(4);
  EPD.setTextColor(EPD_BLACK);
  EPD.setCursor(0,0);
  EPD.println("TAMANEGI");

  EPD.setTextSize(3);
  EPD.setTextColor(EPD_BLACK);
  EPD.println("");
  EPD.println("SSD1680");
  EPD.println("Res=250 x 122");
  EPD.display();

}

void loop()
{
}

結果

結果は代表してXIAO SAMD21を掲載します。
XIAO規格すべてで表示できました。

ブレッドボード配線でも表示できました。

コメント

タイトルとURLをコピーしました