macsbug

Just another WordPress.com site

TFT_eSPI Library supports M5STACK

with 3 comments

TFT_eSPI Library は M5STACK の Display をサポートしました。   2018.04.17


TFT Display と Library:
_ TFT Display の Library は 幾つかありますが その中で
_ TFT_eSPI Library は 速度、機能、多種対応 で ナンバーワンとも言えます。
_ M5STACK(Custom ILI9341), Raspberry Pi用TFT(ILI9486) を含めて8種の
_ SPI TFT や Parallel interface TFT, ePaper の多種対応、高速化、スプライト、
_ アンチエイリアスフォント機能が実施されています。
_ 詳細は eSPI Library に記載されており 読み応えがあります。


主題の前に M5STACKの解説を致します。( 少し長いです )

M5STACK の TFT Display:
TFT  Driver は 320×240 ILI9341 です。ただし「Custom ILI9341」です。
m5stack/M5Stack_TFT_ILI9341 には 「Custom ILI9341」 と書かれています。
低価格で販売されている 2.4 inch TFT SPI 320×240 ILI9341 とは 異なる点が
あります。MISOの配線は無し。 2 inch で 人によっては小さいです。

 2 inch M5STACK Display 2.4 inch  320×240 TFT Display Module

1. 色の配置:BGR
_ ハード的に異なります。RGB ( ILI9341 Data Sheet ) が BGR に
_ なっています。つまり R(赤) と B(青) が 逆になっています。
_ これは RGB Color Codes Chart が使用できない事を示しています。
_ bin タイプの画像やデーターは互換性が無くなります。


2. 表示の向き:鏡面反転表示
_ 鏡面反転表示 (左右反転)します。これもハードの構成による物と思われます。


M5STACK の現象:
1. M5STACK の Display Library で 外部に接続した市販の TFT を表示すると
_ 色ずれと鏡面反転し正常に表示しません。
2. 従来の TFT Library で M5STACK の TFT を表示すると同様に色ずれと
_ 鏡面反転し正常に表示しません。
理由は 解りませんが 私はプロテクションと判断しています。
_ 昔 aitendo の TFT で この方法を使用した TFT Display があり 不便でした。


M5STACK の 現状と対策:
_ TFT Driver IC に対し カスタムの配線は 従来の TFT Library を使用した
_ スケッチの活用が出来なくなります。
_ スケッチの移植が困難になり 先人の資産を有効活用できません。
_ 従来の TFT とは異なる設計は 大変不便です。
_ その中で、 Tetris, spaceShooter, Pacman 等の移植を実施しました。
_ 例として Tetris は これまでの画像を使用できず 新たにM5STACK用の
_ 画像を作りました。調査と作成に大変時間を要しました。

_ SOKOBAN を移植された robo8080氏も 左右反転に気がつき スケッチの
_ サブプログラムで処理をされ 動作しています。
_ robo8080氏の対応策は素晴らしく、感謝致します。

robo8080氏のプログラム:左右反転。

void fillImage(void *image, int x, int y, int w, int h) {
 uint16_t* p = (uint16_t*)image;
 M5.Lcd.startWrite(); // Requires start/end transaction now
 M5.Lcd.setAddrWindow(x, y, x+w-1, y+h-1);
 for ( int i = 0; i < h; i++) {
   for (int j = 0; j < w; j++) {
     M5.Lcd.writePixel(p[i*w+j]);
   }
 }
 M5.Lcd.endWrite(); // End last TFT transaction 
}
robo8080氏のプログラムを 基に

FACES version of M5Stack_sokoban

を作らせて頂きました。


色の対策: RGB -> GBR
_ Kongduino / M5-Colors-Demo:デモは RGBを BGR に変換しています。
_ Kongduino氏は Colours.h  で RGB の定義をし void demoColour で
_ GBR に変換した 5-Colors-Demo を作成しています。

_ M5CheatSheet にも Color の 定義が記載されています。

例:Tetris:make_block( 3, 0xFF00);       // D__,DDD  BLUE
_ Colours.h:TFT_BLUE 0x001F /* 0, 0, 255 */ : Color の定義
_ void demoColour(char *colourName, uint16_t clr) {
_  uint16_t reverse = clr ^ 0xFFFF; // Color の反転


M5STACK Display Library の詳細:
TFT 左右表示:アドレスは 0x36 で 名称は ILI9341_MADCTL です。
_ M5 Display.h に定義されています。
_ Memory Access Control : MADCTL : 左右表示
_ M5 Display.h:#define ILI9341_MADCTL 0x36

設定:M5 Display.cpp で 以下の様に 0x08 です。
_   本来は 0x48 で行われています。

writecommand(ILI9341_MADCTL); // Memory Access Control
writedata(0x08);  // writedata(0x48);

追記:2018.05.02
M5STACK Community :メモ:transparency 。
_ M5STACK の TFT LCD の呼び出しにはアルファ値
_ (透明性:transparent)がありません。
_ 透明色を渡すには TFT_eSPI Library のスプライト関数を使用します。
_ 例:pushSprite(int32_t x, int32_t y, uint16_t transparent);


.
=== [ 主題 ] SUBJECT  ===   eSPI Library supports M5STACK   =========

eSPI Library の M5STACK対応:
M5STACK 販売当初、eSPI Library は M5 に正しく表示できませんでしたが
2018.04  (Update 2nd April 2018)  にて M5STACK 対応が実施され
表示が可能になりました。 Bodmer氏に感謝致します。


対応ディスプレー:8種類のTFT と ePaper 対応。
_ ILI9341, ILI9163, ST7735, S6D02A1, ILI9481, ILI9488,ILI9486, HX8357
_ ePaper display


eSPI Library と 多種TFTの記述方法:User_Setups
TFTの設定は 通常 スケッチの宣言部と setup で行いますが eSPI Library は
User_Setups に記載された内容で 行なわれます。
TFT_eSPI/User_Setups/Setup12_M5Stack.h

TFTの宣言と設定を User_Setups に集約する事で便利になっています。
既に 対応する TFT の User_Setups も用意されています。
多種類の TFT 対応が可能である事と プログラムが簡単です。

これにより 従来の eSPI のスケッチがそのまま動作します。
SPI FREQUENCY は 40MHz で 動作します。

例:User_Setups:M5STACK の 設定:

#define ILI9341_DRIVER
#define M5STACK
#define TFT_MISO  -1
#define TFT_MOSI  23
#define TFT_SCLK  18
#define TFT_CS    14  // Chip select control pin
#define TFT_DC    27  // Data Command control pin
#define TFT_RST   33  // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL    32  // LED back-light
#define SPI_FREQUENCY  40000000

鏡面反転表示 (左右反転) から 正しい表示:


サンプル:多数のサンプルがあります。
_ 具体的な画像は  TFT display for Raspberry pi with ESP32 を参照ください。


注目する機能:
1. Sprite :スプライト
_ 複雑なグラフィックにて フリッカーの無い表示が可能です。
_ スクロール機能のサンプルもあり参考になります。

2. ESP32_PARALLEL
_ User_Setups の中に #define ESP32_PARALLEL の設定があります。
_ Control pin 3つ、R/W 2つ、DATA 8つ 計 13本で パラレル操作が可能です。
_ TFT は ILI9481 and ILI9341 で PARALLEL 方式の TFT を入手できますと
_ ESP32 で PARALLEL 操作が可能になり 高速表示を期待する事が出来ます。
_ 対応するボードは 8 bit parallel interface TFT ILI9341 が販売されています。
3. M5STACK 内蔵の Display や M5STACKに外部接続した Display も表示が
_ 可能です。


M5STACK TFT Driver ILI9341:
更に詳しい TFT Driver の中味は TFT_Driver Folder の中に
_ ILI9341_Defines.h, ILI9341_init.h, ILI9341_Rotation.h があります。

ILI9341_init.h には M5STACK用の設定が宣言されています。

#ifdef M5STACK
  writedata(0xA8); // Rotation 0 (portrait mode)
#else
  writedata(0x48); // Rotation 0 (portrait mode)
#endif

#ifdef M5STACK
  // Turn on the back-light LED
  digitalWrite(TFT_BL, HIGH);
  pinMode(TFT_BL, OUTPUT);
#endif

ILI9341_Rotation.h にも M5STACK の設定が多数宣言されています。

 
#ifdef M5STACK 
  writedata(TFT_MAD_MY | TFT_MAD_MV | TFT_MAD_BGR); 
#else 
  writedata(TFT_MAD_MX | TFT_MAD_BGR); 
#endif 

この内容を見ると eSPI Library の著者である Bodmer氏は M5STACK を解析し
丁寧に作られており 驚くばかりです。


速度:
M5STACK での M5 Display Library と eSPI Library の速度を比較しました。
速度は ほぼ同じです。恐らく内部の CODE は 同じ構成だと想像します。


eSPI の bug:バグと修正方法。
3.5 ” 480×320 SPI TFT ILI9486 RPi touch Display を使用する場合、ここに
示されたVersion では表示しません。ブログにコメントされた ohno氏 が
発見し解析により解決方法が判明致しました。
詳細は TFT display for Raspberry pi with ESP32 を参照ください。
ohno氏 に感謝致します。
変更内容:以下の eSPI.cpp を eSPI.h の先頭に移動。

#ifdef RPI_ILI9486_DRIVER
  #define CMD_BITS 16-1
#else
  #define CMD_BITS 8-1
#endif

他、Parallel interface TFT に於いて TFT_CS が出力されない不具合があり、
eSPI.h の TFT_CS の変更が必要です。


参考:
mgo-tec電子工作:mgo-tec氏 が解析され RGB -> BGR の詳細が記載されています。
_ M5stack(ESP32搭載)の液晶ディスプレイ ILI9341 をちょっと解明してみた
_ M5STACK発売当時からの疑問が 同様である事が解りました。
_ 詳細な分析と解説をありがとうございました。mgo-tec 氏に感謝致します。
TFT display for Raspberry pi with ESP32:ラズベリーパイ用 3.5 inch 480×320
Mini Grafx Library : Daniel Eichhorn:高度な命令がある TFT Library
Arduino Library List:ライブラリー集
instructable:ARDUINO TFT DISPLAY AND FONT LIBRARY:Arduino by Bodmer


感想:
eSPI Library ( version 0.20.10 ) 2018.04 Version:
_ M5STACK で使用できなく困っていましたが 使用できる様になり便利に
_ なりました。M5STACK や e-Paper に対する 対応をされ Bodmer氏に
_ 感謝致します。

eSPI Library:
_ rev : 0.20.10
_ rev : 0.20.13 : 2013.04.21 : TFT_DC , TFT_CS
_ rev : 0.20.14 : 2013.04.24 : ePaper, SD, drawXBitmap, Fix111(not font)
_ Bug : TST_CS does not output in ESP32_PARALLEL : 2018.04.24

M5STACK のサンプル:
_ M5STACK発売後に M5の全サンプルを画像表示しようかと思いましたが
_ 既にある eSPI Library と同じである為 M5の紹介では表示しませんでした。
_ 時期的に eSPI Library の方が早く M5のサンプルは eSPI Library の
_ サンプルを使用した物と思われます。


.

広告

Written by macsbug

4月 17, 2018 @ 3:00 pm

カテゴリー: ESP32

コメント / トラックバック3件

Subscribe to comments with RSS.

  1. ご無沙汰しております。
    電子工作ブログをやっている mgo-tec です。
    先日は私のブログでコメントありがとうございました。
    M5stack のスイッチはまだ壊れたままです。
    いつか、時間に余裕が出来たら修理しようと思っています。

    そして、こちらの記事にリンクを貼って頂き、ありがとうございます。
    さらにさらに、Facebook であんなに大々的に紹介していただき、嬉しい反面、実力が伴っていないのでお恥ずかしい限りです。
    ほんとにありがとうございます。
    この場をお借りしてお礼させて頂きます。
    m(_ _)m

    私は Facebook はやっておらず、観閲しているだけなので、「いいね」できずにスミマセン。
    macsbugさんの記事は他にはないコアな情報盛り沢山で、いつもチェックさせていただいていております。
    これからも、引き続き役立つ素晴らしい情報を提供して下さることを願っております。
    お互い、何かオモシロイものを発信できるといいですね・・・。

    mgo-tec

    4月 28, 2018 at 1:00 am

    • mgo-tecさん、こんにちわ。
      mgo-tecさんの M5STACKの分析により 疑問に思っていた事が
      その通りである事が解り 今回のブログを書く事が出来、大変助かりました。

      「M5stack Yahoo! News Scrolle」の作成をご苦労様でした。最高の作品と完成に祝!
      この作品を Facebook で皆さんに是非共 お知らせしたく 断りもせず Twitter 情報から拝借致しました。 
      実は心待ちにしていた このプログラムの完成に感激し、この場をお借りしてお礼させて頂きます。

      此の様なアプリを希望するも 自分にはその力量がありません。特にスクロール技術には感心しています。
      ハードの分析や こつこつとライブラリーを作り ブログにまとめられておられ素晴らしいです。
      mgo-tecさんの記事は 難度も読み返しています。読めば読む程 書かれていない苦労を 素晴らしく感じます。
      反響があり、対応に大変だと思いますが 気楽にやって欲しいと思っています。

      Facebook や Twitter は お互いに観閲状態で「いいね」はできませんが 多分通じていると思います。
      言われます様に「お互いに何かオモシロイものを発信できるといいですね・・・」 は、同感です。
      M5STACKの製品を 多くの方が持つ事により、話が共通になり なにかオモシロイものが出来そうです。

      M5Stack のスイッチの部品調査は昨日(27日)、第2段が到着しましたので Facebook に追記しておきました。
      交換できる部品が入手できると言う事だけでも解れば 安心できるかと思いました。
      M5STACK用Power Switch:型番 TS-1286VE-4:10個 $1.25。輸送期間=22日。
      Aliexpress:WIN ELEC-TECH CO.,LTD Store:https://www.aliexpress.com/item/10PCS-3X4mm-4Pin-Push-Button-Switch-Side-Push-for-Phone-MP3-MP4-Momentary-Tact-Switch-Button/1281882780.html

      macsbug

      4月 28, 2018 at 3:50 pm

      • ありがたいお言葉をかみしめて、日々電子工作に努めたいと思います。
        スイッチ情報、ありがとうございました。
        これからも度々寄らせて頂きますので、益々のご活躍をお祈りしております。

        mgo-tec

        4月 28, 2018 at 7:15 pm


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中

%d人のブロガーが「いいね」をつけました。