M5Stack OLEDユニット(U119)

概要

らびやんさんがM5StackにJoinして、初のプロダクトであるOLEDユニットを入手したので紹介したいと思います。

商品

まだ日本では販売されていないはずです。

赤いコネクタなのでI2C接続のユニットになります。SH1107という1.3インチのモノクロ画面が搭載されているんですね。ちなみにこのユニットは特殊なのでパネルの種類はあまり関係ありません。

中身は本体とケーブルのみになります。

裏側です。128×64ピクセルの1.3インチという情報がわかります。

使い方

SH1107が画面の型番ですが、M5GFXライブラリに統合されているので、I2C接続であることなどを考慮することなく利用可能です。

まずはライブラリマネージャで「M5GFX」をインストールします。

上記にサンプルスケッチがあります。M5GFXライブラリはLovyanGFXライブラリ相当ですので標準で日本語フォントを利用することが可能です。

#include <M5StickC.h>
#include <M5UnitOLED.h>

M5UnitOLED 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)
{
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.setTextSize(2);

  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);

  M5.Lcd.setCursor(10, 10);
  M5.Lcd.print(millis());

  delay(1);
}

ちょっとだけ変更して、M5StickCと同時利用してみました。M5StickCの標準ライブラリを利用しているのでM5StickC本体だと日本語フォントを利用することができません。

こんな感じの実行結果です。OLEDはモノクロですがM5StickCと比べると非常に大きいので使いやすいかもしれません。とはいえ画面のないATOMとかと組み合わせる方が多いのかな?

UIFlowでもサポートされているので使いやすいユニットだと思います。

まとめ

らびやんさんが魔改造しているライブラリなので非常にヌルヌル描画されます。I2C接続とは思えない感じですね。とはいえ、10ドルを超えるユニットになりますのでそんなに安くはないですよね。また今後モノクロのOLEDの他に、カラーのLCDユニットが販売されると思いますので用途によって使い分けることになると思います。

コメント