Unit LCD

SKU:U120

説明

ユニットLCDは、1.14インチカラー液晶ディスプレイの拡張画面ユニットです。ST7789V2駆動方式を採用し、解像度は135*240、RGB666表示(262,144色)に対応しています。ESP32-PICO制御コアの内部統合(ファームウェア内蔵、ディスプレイ開発がより便利)、I2C(addr | 0x3E)通信インターフェースによる制御とファームウェアアップグレードをサポートします。画面背面にはマグネットを内蔵しており、金属面に簡単に吸着して固定することができます。LCDスクリーンエクステンションは、表示パネルとして簡単なコンテンツを表示する必要がある様々な機器や制御機器への組み込みに適しています。

製品の特徴

  • 1.14インチカラー液晶ディスプレイパネル
  • ST7789V2駆動方式
  • I2C通信インターフェース
  • 解像度: 135*240
  • 視野角: 全視野角
  • 磁気背部設計
  • I2Cファームウェアのアップグレードをサポート

含まれるもの

  • 1x Unit LCD
  • 1x HY2.0-4P ケーブル

アプリケーション

  • 情報表示

仕様

仕様 パラメータ
画面駆動用IC ST7789V2
動作電流 45.7mA
通信プロトコル I2Cアドレス: 0x3E
表示サイズ 1.14インチ
画素ピッチ 0.1101(H) x 0.1038(V)mm
解像度 135*240
表示可能サイズ 全画面表示
動作温度 0~40℃
製品重量 8.5g
梱包重量 20g
製品サイズ 48×24×8mm
梱包サイズ 67×52×12.5mm
ケース素材 プラスチック(PC)

PinMap

M5Core(PORT A) GPIO22 GPIO21 5V GND
ユニットLCD SCL SDA 5V GND

回路図

関連リンク

  • Arduino

#include <M5UnitLCD.h>

M5UnitLCD display;

M5Canvas canvas(&display);

static constexpr char text[] = "Hello world ! こんにちは世界! this is long long string sample. 寿限無、寿限無、五劫の擦り切れ、海砂利水魚の、水行末・雲来末・風来末、喰う寝る処に住む処、藪ら柑子の藪柑子、パイポ・パイポ・パイポのシューリンガン、シューリンガンのグーリンダイ、グーリンダイのポンポコピーのポンポコナの、長久命の長助";
static constexpr size_t textlen = sizeof(text) / sizeof(text[0]);
int textpos = 0;
int scrollstep = 2;

void setup(void) 
{
  display.init();
  display.setRotation(2);
  canvas.setColorDepth(1); // mono color
  canvas.setFont(&fonts::lgfxJapanMinchoP_32);
  canvas.setTextWrap(false);
  canvas.setTextSize(2);
  canvas.createSprite(display.width() + 64, 72);
}

void loop(void)
{
  int32_t cursor_x = canvas.getCursorX() - scrollstep;
  if (cursor_x <= 0)
  {
    textpos = 0;
    cursor_x = display.width();
  }

  canvas.setCursor(cursor_x, 0);
  canvas.scroll(-scrollstep, 0);
  while (textpos < textlen && cursor_x <= display.width())
  {
    canvas.print(text[textpos++]);
    cursor_x = canvas.getCursorX();
  }
  display.waitDisplay();
  canvas.pushSprite(&display, 0, (display.height() - canvas.height()) >> 1);
}

Video

ユニットLCDについて

  • ユニットLCDは、ESP32とST7789V2を搭載したI2Cユニットです。
  • IPSパネルを搭載しており、解像度は135×240です。
  • 表示可能な色数は、ST7789V2の仕様であるRGB666の262,144色です。
  • ESP32はI2C通信を担当し、受信した内容に基づいてメモリ内のフレームバッファに描画します。
  • ESP32のメモリ内のフレームバッファの内容は、SPI通信のDMA転送によりST7789V2に反映されます。
  • フレームバッファ上ではRGB888 16,777,216色で表現されます。

ユニットLCDとの通信について

  • ユニットLCDとの通信は、I2C通信でコマンドの送信とデータの受信が可能です。
  • I2C通信の最大通信速度は、400kHzです。
  • I2Cの7ビットアドレスの初期値は、0x3Eです。CHANGE_ADDRコマンドで変更可能です。
  • 送信に必要なバイト数はコマンドによって異なり、1Byteで完了するコマンドもあれば、7Byte必要なコマンドもあります。
  • コマンド送信中にI2C通信のSTOPやRESTARTが発生した場合、中断されたコマンドは処理されません。
    1回の送信シーケンスで最後まで途切れずに送信する必要があります。
  • 固定長のコマンドを送信した後、続けて別のコマンドを送信することができます。
  • 不定長のコマンドを送信した後は、コマンドの終了を示すためにI2C通信を停止させる必要があります。
  • NOPコマンドや未定義コマンドを送信した場合、I2C通信が停止するまで通信内容は無視されます。
  • I2C通信部と描画処理部は並列に動作するため、描画処理中であってもI2C通信を行うことができる。
  • I2C通信の内容は、ESP32のメモリ上のコマンドバッファに格納され、描画処理部はこれを順次処理する。
  • 広範囲な塗りつぶしや範囲コピーなどの重い処理を大量に送信すると、コマンドバッファを圧迫してしまうので、READ_BUFCOUNTコマンドでバッファの残量を確認する必要があります。

描画コマンドについて

  • FILLRECT で任意の領域を単色で塗りつぶすと、矩形が描画されます。
  • 1 ピクセルだけ描画したい場合は,FILLRECT の代わりに DRAWPIXEL を使用することができます.
  • 前景色を省略したコマンドを使用した場合は、最後に使用した色が使用されます。
  • CASET、RASET で描画範囲を指定し、WRITE_RAW コマンドで画像データを送信することができる。
  • WRITE_RAW の代わりに WRITE_RLE を使用すると、ランレングス圧縮された画像データを送信することができる。

コマンドリスト

未定義のコマンドは、NOP として扱われます。

16進数 LEN コマンド 説明 送信パラメータ
0x00 1-∞ NOP 通信が停止するまで何もしない [0] 0x00
[1-∞] 無視された値
0x20 1 INVOFF 色反転を無効にする [0] 0x20
0x21 1 INVON 色反転有効 [0] 0x21
0x22 2 BRIGHTNESS バックライトの明るさ設定
0:消灯~255:全灯
[0] 0x22
[1] 明るさ(0~255)
0x23 7 COPYRECT 矩形範囲コピー [0] 0x23
[1] コピー元 X_Left
[2] コピー元 Y_Top
[3] コピー元 X_Right
[4] コピー元 Y_Bottom
[5] コピー先 X_Left
[6] コピー先 Y_Top
0x2A 3 CASET X方向範囲選択 [0] 0x2A
[1] X_Left
[2] X_Right
0x2B 3 RASET Y方向選択 [0] 0x2B
[1] Y_Top
[2] Y_Bottom
0x36 2 ROTATE 描画方向設定
0:標準 / 1:90° / 2:180° / 3:270°
4-7: 0〜3を上下反転
[0] 0x2A
[1] 設定値(0-7)
0x38 2 SET_POWER 動作回転数設定値
(消費電力設定)
0:低速 / 1:通常/ 2:高速
[0] 0x38
[1] 設定値(0-2)
0x39 2 SET_SLEEP 液晶パネルスリープ設定
0:ウェイクアップ/1:スリープ
[0] 0x39
[1] 設定値(0-1)
0x41 2-∞ WRITE_RAW_8 描画画像RGB332 [0] 0x41
[1] RGB332
[1]通信STOPまで
0x42 3-∞ WRITE_RAW_16 draw image RGB565 [0] 0x42
[1-2] RGB565
[1-2]通信STOPまで
0x43 4-∞ WRITE_RAW_24 draw image RGB888 [0] 0x43
[1-3] RGB888
[1-3]通信STOPまで
0x44 5-∞ WRITE_RAW_32 draw image ARGB8888 [0] 0x44
[1-4] ARGB8888
until [1-4]通信STOPまで
0x45 2-∞ WRITE_RAW_A draw image A8
only alpha channel.
Use the last used drawing color.
[0] 0x45
[1] A8
[1]通信STOPまで
0x49 3-∞ WRITE_RLE_8 RLEイメージRGB332を描画 [0] 0x49
[1-∞] RLEデータ
0x4A 4-∞ WRITE_RLE_16 draw RLE image RGB565 [0] 0x4A
[1-∞] RLE Data
0x4B 5-∞ WRITE_RLE_24 draw RLE画像 RGB888 [0] 0x4B
[1-∞] RLE Data
0x4C 6-∞ WRITE_RLE_32 draw RLE画像 ARGB8888 [0] 0x4C
[1-∞] RLE Data
0x4D 3-∞ WRITE_RLE_A RLEイメージA8を描画
アルファチャンネルのみ。
最後に使用した描画色を使用します。
[0] 0x4D
[1-∞] RLE Data
0x50 1 RAM_FILL 最後に使用した描画色で選択範囲を塗りつぶす [0] 0x50
0x51 2 SET_COLOR_8 描画色をRGB332で指定 [0] 0x51
[1] RGB332
0x52 3 SET_COLOR_16 RGB565 で描画色を指定 [0] 0x52
[1-2] RGB565
0x53 4 SET_COLOR_24 RGB888 で描画色を指定 [0] 0x53
[1-3] RGB888
0x54 5 SET_COLOR_32 ARGB8888 で描画色を指定 [0] 0x54
[1-4] ARGB8888
0x60 3 DRAWPIXEL 1ドット描画
格納されている描画色を使用
[0] 0x60
[1] X
[2] Y
0x61 4 DRAWPIXEL_8 シングルドット描画
RGB332 1Byte 描画色指定用
[0] 0x61
[1] X
[2] Y
[3] RGB332
0x62 5 DRAWPIXEL_16 1ドット描画 [0] 0x62
[1] X
{2} Y
[3-4] RGB565
0x63 6 DRAWPIXEL_24 シングルドット描画
RGB888 3Byte 描画色指定
[0] 0x63
[1] X
[2] Y
[3-5] RGB888
0x64 7 DRAWPIXEL_32 一点描画
ARGB8888 4Byte 描画色指定
既存描画内容との透明合成
[0] 0x64
[1] X
[2] Y
[3-6] ARGB8888
0x68 5 FILLRECT 矩形を塗りつぶす
格納されている描画色を使用
[0] 0x68
[1] X_Left
[2] Y_Top
[3] X_Right
[4] Y_Bottom
0x69 6 FILLRECT_8 矩形塗り潰し
RGB332 1Byte 描画色指定
[0] 0x69
[1] X_Left
[2] Y_Top
[3] X_Right
[4] Y_Bottom
[5] RGB332
0x6A 7 FILLRECT_16 矩形塗り潰し
RGB565 2Byte 描画色指定
[0] 0x6A
[1] X_Left
[2] Y_Top
[3] X_Right
[4] Y_Bottom
[5-6] RGB565
0x6B 8 FILLRECT_24 矩形塗り潰し
RGB888 3Byte 描画色指定
[0] 0x6B
[1] X_Left
[2] Y_Top
[3] X_Right
[4] Y_Bottom
[5-7] RGB888
0x6C 9 FILLRECT_32 矩形塗り潰し
ARGB8888 4Byte 描画色指定
既存描画内容との透明合成
[0] 0x6C
[1] X_Left
[2] Y_Top
[3] X_Right
[4] Y_Bottom
[5-8] ARGB888
0xA0 4 CHANGE_ADDR I2Cアドレスの変更。
意図しない変更を防ぐことができます。
[2]は[1]のビット反転値を指定します。
[0] 0xA0
[1] 新しいI2Cアドレス
[2] [1]のビット反転値
[3] 0xA0

コマンドリスト (読み取り可能なコマンド)

16進数 len コマンド 説明 返値
0x04 1 READ_ID IDとファームウェアのバージョン
4Byte受信
[0] 0x77
[1] 0x89
[2] Major version
[3] Minor version
0x09 1 READ_BUFCOUNT 残りのコマンドバッファを取得します。
値が大きいほど余裕があります。
連続して読み出すことができます。
[0]コマンドバッファ残量(0~255)
繰り返し受信可能です。
0x81 1 READ_RAW_8 RGB332イメージの読み出し [0] RGB332
通信STOPまで[0]を繰り返す。
0x82 1 READ_RAW_16 RGB565 画像の読み出し [0-1] RGB565
通信STOPまで[0-1]を繰り返す。
0x83 1 READ_RAW_24 RGB888 画像の読み出し [0-2] RGB888
通信が STOP するまで [0-2] を繰り返す。

通信例

例 矩形塗り潰しコマンド0x6Aを使用して、X16-31、Y32-47の矩形範囲を赤で塗り潰す。

インデックス 16進数 説明
0 0x6A 矩形をRGB565で塗りつぶす。
1 0x10 左X方向
2 0x20 Yトップ
3 0x1F Xライト
4 0x2F Yボトム
5 0xF8 カラーデータ RRRRRGGG(赤)
6 0x00 カラーデータ GGGBBBBB(赤)

コマンド 6Ah は、合計 7Byte のコマンド列です。 送信中に I2C 通信の STOP または RESTART が発生した場合、コマンドは処理されません。 1回の送信シーケンスで最後まで途切れることなく送信する必要があります。

矩形塗り潰しコマンドは、68h~6Chのいずれかを使用することができます。 インデックス1~4は同じですが、インデックス5以降は色の指定方法が異なります。

コマンド68hの記憶色は、最後に指定した色を再利用することを意味します。 つまり、同じ色の矩形塗りつぶしを何回か続けて行いたい場合、最初の矩形塗りつぶしだけ色を指定し、68hコマンドで色指定を省略することができるのです。

コマンド6Ch、ARGB8888では、アルファチャンネル(透明度)を指定することで、すでに描かれている内容を描画色と合成することができます。


例 範囲指定コマンド 0x2A/0x2B と画像送信コマンドを使用して、X10~13、Y14~17 の矩形範囲に画像を描画する。

インデックス 16進数 説明
0 0x2A X方向範囲指定
1 0x0A X Left(10)
2 0x0D X Right(13)
3 0x2B Y方向範囲指定
4 0x0E Y Top(14)
5 0x11 Y Bottom(17)
6 0x43 描画イメージRGB888
7-54 ?? 画像データ(RGB888×16)

例: WRITE_RLEコマンドでRLE(ランレングスエンコーディング)画像を送信する。

  • RLE の仕様は、BMP ファイル用の RLE をベースにしている。
  • BMPファイル用のRLEとは異なり、RGB565とRGB888に使用することができます。
  • まず、同じ色の連続した画素数(0~255)を送信し、その後に色データを送信します。
  • 連続した番号に0を送ると、RLEを使用しないダイレクトモードになります。
  • ダイレクトモードでは、まず画素数(1~255)を送信し、その後に画素数分の色データを送信します。
インデックス 16進数 説明
0 0x4A RLEイメージRGB565を描画
1 0x07 連番(7pixel)
2-3 0xF800 色データ(赤)
4 0x00 連番(0pixel)
ダイレクトモードに切り替わります。
5 0x03 ダイレクトモードの連続番号(3pixel)
6-7 0x07E0 カラーデータ(緑)
8-9 0x001F 色データ(青)
10-11 0xF800 色データ(赤)
12 0x04 連続番号(4pixel)
13-14 0x001F 色データ(青)

上記の例では、以下のように処理されます。

  • index1-3 : RLEモードで赤を7画素描画する。
  • index4-5 : ダイレクトモードに切り替え、3ピクセル描画するよう指示。
  • index6-11 : ダイレクトモードで3画素分の色を送信し、緑、青、赤を描画します。
  • index11で3画素分のダイレクトモードが終了しているので、index12からRLEモードに戻ることになります。
  • index12-14 : RLEモードで4画素分の青を描画します。

ファームウェアのアップグレード

方法1. ESP32-Downloaderを使用して、更新用ファームウェアをダウンロードする。

M5Burner をダウンロードし、UNITの液晶ケースを開けて、 ESP32 DOWNLOADER でアップデートしてください。

方法2. I2C通信によるアップデート

上記の Githubソースコード または リソースページからM5Burnerをダウンロード をコンパイルし、M5Core1/Core2/M5StickC/Plus/ATOM/PaperのいずれかのマスターコントローラにRecord LCD_UNIT_FirmwareUpdater ファームウェアを書き込みます。UNIT LCDをI2Cポートに配線することで、自動的にアップデートが開始されます。