M5Stack StampS3にフレキケーブル液晶を接続

概要

上記のCardputer Accessory Kitはセットになっていますが、単体のStampS3とフレキケーブルで接続できる液晶を準備して使ってみました。

StampS3側のコネクタ

StampS3の裏側にはフレキケーブルを接続するようの端子がついています。現状コネクタ付きのものは単体発売されていないので、前回のキットを購入するか自分ではんだ付けする必要があります。

8ピンコネクタ

m5-docs
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Ar...

上記のドキュメントには記載がありますが、8ピンと12ピンコネクタが利用可能です。

0.5K-HX-8PWB HDGC Connectors | -55℃~+85℃ Flip type 8P Dual-sided contacts / top and bottom connection Horizontal attachment 0.5mm SMD,P=0.5mm,Surface Mount,Right Angle FFC, FPC (Flat Flexible) Connector Assemblies | LCSC Electronics
0.5K-HX-8PWB HDGC - -55℃~+85℃ Flip type 8P Dual-sided contacts / top and bottom connection Horizontal attachment 0.5mm S...

8ピンコネクタは上記のサイトから購入可能です。

12ピンコネクタ

0.5K-HX-12PWB HDGC Connectors | -55℃~+85℃ Flip type 12P Dual-sided contacts / top and bottom connection Horizontal attachment 0.5mm SMD,P=0.5mm,Surface Mount,Right Angle FFC, FPC (Flat Flexible) Connector Assemblies | LCSC Electronics
0.5K-HX-12PWB HDGC - -55℃~+85℃ Flip type 12P Dual-sided contacts / top and bottom connection Horizontal attachment 0.5mm...

12ピンコネクタは上記のものになります。

8ピンと12ピンの違いについて

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/Stamp/S007%20StampS3/Sch_M5StampS3_v0.2.pdf

回路図を見ると8ピンに4ピン追加されたのが12ピンであるとわかります。

接続先8PIN12PIN
VIN_5V1
GPIO182
GPIO173
GPIO164
DISP_BL15
GND26
DISP_RST37
DISP_RS48
DISP_MOSI59
DISP_SCK610
VDD_3V3711
DISP_CS812

上記の違いで、あまり差がないように見えますがフレキケーブル液晶を直接接続できるのは8ピンとなります。12ピンは追加で取り出せそうなGPIOを3つ追加したものであり、途中に変換基板などを経由しないと利用しにくいです。

フレキケーブル液晶側のピンアサイン

ピン番号8PINコネクタフレキケーブル液晶
1DISP_BLLEDA
2GNDGND
3DISP_RSTRESET
4DISP_RSRS
5DISP_MOSISDA
6DISP_SCKSCL
7VDD_3V3VDD
8DISP_CSCS

当たり前ですが対応しています。この液晶のピンレイアウトに合わせて8PINコネクタを設計していると思われます。12ピン液晶だと全然違うレイアウトになっているのでそのまま接続できるものは発見できませんでした。

入手済み液晶

1.14インチ135×240(ST7789)

Tftカラースクリーンディスプレイモジュール、ドットマトリックス、st7789ドライバー、ヒップインターフェイス、高精細、1.14
Smarter Shopping, Better Living! Aliexpress.com

キットに付属していた液晶のケーブルが短いバージョンです。仕様的にはM5StickC Plusなどに利用されているサイズになります。

StampS3よりやや大きめの液晶となります。

スケッチ例

#include <Arduino.h>
#include <M5GFX.h>
#include <lgfx/v1/panel/Panel_ST7789.hpp>

class LGFX_EXTERNAL : public lgfx::LGFX_Device {
  lgfx::Panel_ST7789 _panel_instance;
  lgfx::Bus_SPI _bus_instance;
  lgfx::Light_PWM _light_instance;
public:
  LGFX_EXTERNAL(void) {
    {
      auto bus_cfg = _bus_instance.config();
      bus_cfg.pin_mosi = GPIO_NUM_35;
      bus_cfg.pin_miso = (gpio_num_t)-1;
      bus_cfg.pin_sclk = GPIO_NUM_36;
      bus_cfg.pin_dc = GPIO_NUM_34;
      bus_cfg.spi_mode = 0;
      bus_cfg.spi_3wire = true;

      _bus_instance.config(bus_cfg);
      _panel_instance.setBus(&_bus_instance);
    }

    {
      auto cfg = _panel_instance.config();
      cfg.pin_cs = GPIO_NUM_37;
      cfg.pin_rst = GPIO_NUM_33;
      cfg.panel_height = 240;
      cfg.panel_width = 135;
      cfg.offset_rotation = 1;
      cfg.readable = true;
      cfg.invert = true;
      cfg.offset_x = 52;
      cfg.offset_y = 40;

      _panel_instance.config(cfg);
    }
    {
      auto cfg = _light_instance.config();
      cfg.pin_bl = GPIO_NUM_38;
      cfg.invert = false;
      cfg.freq = 240;
      cfg.pwm_channel = 3;

      _light_instance.config(cfg);
      _panel_instance.setLight(&_light_instance);
    }
    setPanel(&_panel_instance);
  }
};

LGFX_EXTERNAL display;

void setup(void) {
  Serial.begin(115200);
  delay(2000);

  display.init();
  display.setBrightness(200);
  display.clear(TFT_BLUE);
  display.setFont(&fonts::efontJA_16_b);
  display.setTextColor(TFT_RED);
  display.println("Hello, World!");
  display.println("はろーわーるど");
  display.display();
}

void loop(void) {
}

こちらはキットに付属して液晶と同じものなので、同じコードで動きました。

1.47インチ172×320(ST7789)

高精細ドライバー付きLCDディスプレイ画面,1.47インチ,ips172x320,st7789 - AliExpress 502
Smarter Shopping, Better Living! Aliexpress.com

キットに付属しているものより大型の液晶となります。角がまるまっていますが一回り解像度も大きいです。

サイズは横が大きくなっていますが、それほど変更ありません。

解像度の差ですが、かなり違います。キットに付属している液晶の設定のままだと周りにノイズの部分があり、ここが解像度の違いになります。

動作検証ですが、画面サイズを広げてからオフセットの値を変更していって、ノイズの部分がなくなるように調整します。上記はあと2ドット隙間がある状態です。

スケッチ例

#include <Arduino.h>
#include <M5GFX.h>
#include <lgfx/v1/panel/Panel_ST7789.hpp>

class LGFX_EXTERNAL : public lgfx::LGFX_Device {
  lgfx::Panel_ST7789 _panel_instance;
  lgfx::Bus_SPI _bus_instance;
  lgfx::Light_PWM _light_instance;
public:
  LGFX_EXTERNAL(void) {
    {
      auto bus_cfg = _bus_instance.config();
      bus_cfg.pin_mosi = GPIO_NUM_35;
      bus_cfg.pin_miso = (gpio_num_t)-1;
      bus_cfg.pin_sclk = GPIO_NUM_36;
      bus_cfg.pin_dc = GPIO_NUM_34;
      bus_cfg.spi_mode = 0;
      bus_cfg.spi_3wire = true;

      _bus_instance.config(bus_cfg);
      _panel_instance.setBus(&_bus_instance);
    }

    {
      auto cfg = _panel_instance.config();
      cfg.pin_cs = GPIO_NUM_37;
      cfg.pin_rst = GPIO_NUM_33;
      cfg.panel_height = 320;
      cfg.panel_width = 172;
      cfg.offset_rotation = 1;
      cfg.readable = true;
      cfg.invert = true;
      cfg.offset_x = 34;
      cfg.offset_y = 0;

      _panel_instance.config(cfg);
    }
    {
      auto cfg = _light_instance.config();
      cfg.pin_bl = GPIO_NUM_38;
      cfg.invert = false;
      cfg.freq = 240;
      cfg.pwm_channel = 3;

      _light_instance.config(cfg);
      _panel_instance.setLight(&_light_instance);
    }
    setPanel(&_panel_instance);
  }
};

LGFX_EXTERNAL display;

void setup(void) {
  Serial.begin(115200);
  delay(2000);

  display.init();
  display.setBrightness(200);
  display.clear(TFT_BLUE);
  display.setFont(&fonts::efontJA_16_b);
  display.setTextColor(TFT_RED);
  display.println("Hello, World!");
  display.println("はろーわーるど");
  display.display();
}

void loop(void) {
}

画面サイズとオフセットの値だけ調整したものになります。

0.96インチ80×160(ST7735)

0.96インチIPSディスプレイ,160 V,8ピン,spi hd,80x3.3,st7735チップ付きディスプレイモジュール,フルカラー - AliExpress 502
Smarter Shopping, Better Living! Aliexpress.com

画面的にはM5StickCで利用されていた仕様になります。

画面的には小柄になります。

スケッチ例

#include <Arduino.h>
#include <M5GFX.h>
#include <lgfx/v1/panel/Panel_ST7735.hpp>

class LGFX_EXTERNAL : public lgfx::LGFX_Device {
  lgfx::Panel_ST7735S _panel_instance;
  lgfx::Bus_SPI _bus_instance;
  lgfx::Light_PWM _light_instance;
public:
  LGFX_EXTERNAL(void) {
    {
      auto bus_cfg = _bus_instance.config();
      bus_cfg.pin_mosi = GPIO_NUM_35;
      bus_cfg.pin_miso = (gpio_num_t)-1;
      bus_cfg.pin_sclk = GPIO_NUM_36;
      bus_cfg.pin_dc = GPIO_NUM_34;
      bus_cfg.spi_3wire = true;

      _bus_instance.config(bus_cfg);
      _panel_instance.setBus(&_bus_instance);
    }

    {
      auto cfg = _panel_instance.config();
      cfg.pin_cs = GPIO_NUM_37;
      cfg.pin_rst = GPIO_NUM_33;
      cfg.panel_height = 160;
      cfg.panel_width = 80;
      cfg.offset_rotation = 3;
      cfg.readable = true;
      cfg.invert = true;
      cfg.offset_x = 26;
      cfg.offset_y = 1;

      _panel_instance.config(cfg);
    }
    {
      auto cfg = _light_instance.config();
      cfg.pin_bl = GPIO_NUM_38;
      cfg.invert = false;
      cfg.freq = 240;
      cfg.pwm_channel = 3;

      _light_instance.config(cfg);
      _panel_instance.setLight(&_light_instance);
    }
    setPanel(&_panel_instance);
  }
};

LGFX_EXTERNAL display;

void setup(void) {
  Serial.begin(115200);
  delay(2000);

  display.init();
  display.setBrightness(200);
  display.clear(TFT_BLUE);
  display.setFont(&fonts::efontJA_16_b);
  display.setTextColor(TFT_RED);
  display.println("Hello, World!");
  display.println("はろーわーるど");
  display.display();
}

void loop(void) {
}

ドライバが違うのでいろいろと調整が必要した。M5StickCの設定を参考にして調整をしています。

(未検証)2.25インチ76×284(ST7789)

TFT LCDディスプレイ画面、ロングストリップスクリーン、シリアルポート、カラードライバー、2.25インチ、76x284 - AliExpress 502
Smarter Shopping, Better Living! Aliexpress.com

上記の横長液晶もピンアサイン的には使えそうです。届いたら動作確認してみたいと思います。

まとめ

キット以外にも3種類の液晶が利用可能でした。使いやすさではキットの長いケーブルのが好ましいので違う画面を使いたい場合以外はキットをおすすめします。

キット1.14インチ1.47インチ0.96インチ
StampS3$7.50$7.50$7.50
コネクタ$0.12$0.12$0.12
液晶$1.18$1.44$0.99
$9.95$8.80$9.06$8.61

ちなみに価格的には微妙に個別で購入したほうが安いのですがコネクタのはんだ付けが必要であったり、長いケーブルは一般販売がされていなかったりと懸念事項があります。

コメント