macsbug

TFT display for Raspberry pi with ESP32

with 4 comments

3.5 ” 480×320 SPI TFT RPi touch Display を ESP32 で動かす方法。   2017.08.12
rev1 : 2018.03.27
rev2 : 2018.03.28
rev3 : 2019.01.01
費用は  2265円 です。( RPi Display + ESP32 MiniKit + 接続基板 )
他には D1 mini Lite = 1775円。D1 mini = 1985円。D1 mini Pro = 2285円 です。
ディスプレー の価格は 1266円 で 2.4 inch 320×240 TFT より少々高いです。

ラズベリーパイ用 TFT ディスプレー:
_ 画素数が多く多彩な表示ができます。基板、タッチセンサー、TFT部が
_ きちんと固定されケースに収めやすい構造です。ラズパイは 本体と
_ ディスプレー用に綺麗な RPi Acrylic Case (294円) が販売されています。


RPi Display 仕様:
_ 表示方式: TFT LCD
_ サイズ: 3.5 inch。8.5cm x 5.5cm x 1.7cm
_ 画素数: 480 x 320 ( HVGA )
_ 電源 : 5Vdc ( 3.3V Regulator 内蔵)
_ タッチ: Touch Screen Controller XPT2046
_ タッチペン: 8.7cm
_ 接続: SPI ( MOSI, SCLK, CS, DC, RST, MISO )
_ SPI 周波数: 20MHz ( TFT下の配線構造の為 )
_ ドライバーIC: ILI9486  ( 480 x 320 )
_ SPI 詳細: SPI信号を 74HC04, 74HC4040, 74HC4094, 74HC4094
_      でパラレル信号に変換しています。
_ 3.5inch RPi Display User Manual


準備:費用 2265円。RPi Display + ESP32 MiniKit + 基板 + コネクター

No  Nomen  Link   Price
1  3.5 ” 480×320 SPI TFT Raspberry Pi  ebay ( $11.43 ) rev ($12.68)  1250円
2  ESP32 Minikit  top_electronic1980($7.11)   785円
3  WEMOS D1 Mini Lite  WEMOS CC Store($3.53)   389円
3  WEMOS D1 Mini  WEMOS CC Store($4.53)   499円
3  WEMOS D1 Mini Pro  WEMOS CC Store($7.26)   799円
4  ユニバーサル基板:72 x 47mm:1個  秋月電子通商   120円
5  ピンヘッダー:2×13:1個  秋月電子通商    50円
6  ピンヘッダー:2×20:1個  秋月電子通商    50円
 —————————————-  ————————-   ——
7  TFT ライブラリー  Bodmer:TFT_eSPI

追記:2019.01.01
3.5 ” 480×320 SPI TFT Raspberry Pi 販売:$11.43 の販売店は無くなりました。
_ 注意:基板裏側に「3.5 inch RPi LCD V3.0」と書かれている製品が使用でき
_    KeDei製は使用できません。格安の販売店をお探し下さい。

海外の価格:円レートと販売店で変化します。ESP32 Minikit は 23社が販売
_     しており 日々価格が変化します。最安の業者を探しましょう。
購入トラブルメモ:Advanced Teck($7.08)に注文し異なる物がきました。
_ 注文品の送付を依頼しましたが届きません。よってこの業者は
_ ブラックリストに入れました。

//—————————————————————
追記:2018.03.27
2018.03.26 ohno氏からの情報で eSPI の新しいバージョン(2018.03)に於いて
画面が表示されないとの報告がありました。2018.03.27日のバージョンにて
確認した所、ご指摘の様に画面が全く表示されませんでした。
対策は 古いバージョン(2017)を使用し正常に表示されたとの事です。
私は この記事の時に使用したバージョンのライブラリー
(ハードディスクに記載されている 追加、変更日:2017年07月15日)
とバージョン(2017)(追加、変更日:2017年11月29日)で 動作することを
確認致しました。
古いバージョンは https://github.com/Bodmer/TFT_eSPI/archive/v0.17.12.zip
から ダウンロード 出来ると教えて頂きました。
貴重な情報を頂いた ohno氏に感謝致します。

尚、2018.03.27 のバージョンは ESP32_PARALLEL や M5STACK 、ePaper 等
が追加されています。

追記:2018.03.28 ( コメント蘭も参照ください)
新バージョン(2018.03) で動作させる方法!
2018.03.28 :ohno氏から 新バージョン(2018.03)の動作報告がありました。
eSPI.cpp 29-35行目の以下を eSPI.h の24行目に移動します。
eSPI.cpp の以下 29-35行目はコメントアウト(//)してください。
原因は 数 tft_Write_8(C) が正しく動作していない事によるものでした。
原因を追求し解決策を頂いた ohno氏に感謝致します。

// If it is a 16bit serial display we must transfer 16 bits every time
#ifdef RPI_ILI9486_DRIVER
  #define SEND_16_BITS
  #define CMD_BITS 16-1
#else
  #define CMD_BITS 8-1
#endif

ニュース:TFT_eSPI 2018.03.27 のバージョンは M5STACK に対応済みです。
_ M5STACK の Display は Memory Access Control の MADCTL の値が異なり
_ TFT_eSPI 等の外部のライブラリーを使用すると 画像表示が鏡面反転や
_ 表示範囲が狭い等 正常に表示しませんでした。
_ TFT_eSPIは この問題を解決し正しく表示する事ができる様になりました。
_ User_Setupの方法は User_Setups Folder の中にある Setup12_M5STACK
_ を使用します。
_ SPI_FREQUENCY は 27000000 ですが 40000000 でも動作し M5STACK
_ と同じ動作速度になります。
//—————————————————————-

TFT の種類と注意:
_ 幾つかの種類があります。SPI接続のものを使用します。
_ 3.5 inch RPi Display V3.0 と書かれた物が最新版です。
_ V3.0 と記載されていなくとも ICと配線は同一の物があり動作します。
_ コネクターは 26PIN ( 2 x 13 ) です。
_ 基板上のICが 74HC04,74HC4040,74HC4094,74HC4094 なら使用できます。
_ KeDei 製は 異なるICで構成されており そのままでは使用できません。
_ KeDei 製を使用する時は IC交換により高速で動きますが 改修は面倒です。


基板裏:左上から 74HC04, 74HC4040, 74HC4094, 74HC4094
ピン配置:Raspberry Pi ( Rev.2 ) と同等。



配線:配線は7本のみです。コネクターの向きは 上記写真と同じです。

 RPi Display  GND  CS  SCK  RST  MOSI  DC  5V
 RPi Display 25 24 23 22 19 18 2
 ESP32 GPIO  GND 5 18 RST 23 13 5V


TFT ライブラリー:Bodmer:TFT_eSPI。作成された Bodmer 氏に感謝致します。
_ TFT RPi touch Display のドライバーIC は ILI9486 (480 x 320) です。
_ TFT_eSPI が対応する ドライバーは ILI9486。ILI9341 (320 x 240),
_ ST7735(128 x 128 or 128 x 160), ILI9163(128 x 160), S6D02A1 も
_ 可能です。さらに 高速化も実施されています。

設定:「User_Setup.h」
_ ドライバー、GPIOピン、フォント、SPI周波数の設定は「User_Setup.h」
_ で行います。エデッターで編集し 保存して使用します。
_ この記述方法は メインのスケッチでGPIOピンの設定が不要で便利です。
_ これによりサンプルは変更する事無く直ぐ動作します。
_ 例:ESP32 MiniKit

#define RPI_ILI9486_DRIVER

#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS    5
#define TFT_DC   13
#define TFT_RST  -1

#define LOAD_GLCD
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF

#define SPI_FREQUENCY  20000000

サンプルスケッチ:examples「480 x 320 」は以下があり 即動作します。

 Cellular_Automata  Demo_3D_cube  Flash_Bitmap
 Free_Font_Demo  Graph_2  TFT_Char_times
 TFT_Ellipse  TFT_flash_jpg  TFT_graphicstest_one_lib
 TFT_Meter_4 TFT_Meters  TFT_Padding_demo
 TFT_Print_Test  TFT_Rainbow480  TFT_ring_meter
 TFT_String_Align  UTFT_Demo_480x320

 


ライブラリーの速度:TFT_eSPI は Adafruit や 他の ライブラリーより速いです。
_ Raytracing による比較:
_ ESP32 DEVKIT V1 + 320×240 SPI TFT Display  + Adafruit は 14 sec 。
_  Raytracing with ESP32
_ ESP32 MiniKit + 320 x 240 TFT SPI Display + TFT_eSPI は   6 sec 。
_ ESP32 MiniKit + 480 x 320 TFT SPI Display + TFT_eSPI は 11 sec 。
_ ESP32 VSPI(or HSPI)接続と TFT_eSPI ライブラリーによる効果です。


画像処理メモ:
マックで image.c 作成方法:Wine APP + ImageConverter565.exe で作ります。
Bodmer:JPEGDecoder を使用します。
QVGA:320 x 240
HVGA:480 x 320


ラズパイ用ケース:
BME280 センサーを接続し RPi Acrylic Case に収めました。
ESP32にBME280を接続し 温度、湿度、気圧 を Ring で表示しました。
USB 5V 消費電力:178mA


参考:
ILITEK:ILI9486:Application Notes
RPI Display 配線図:sainsmartschematicV2
Arduino FORUM:TFT_eSPIのハードとソフト、高速化等の情報。
_ New graphics library for NodeMCU (ESP8266) and SPI based TFT displays
Bodmer:TFT_eSPI:ライブラリーの説明と開発の経緯。
wdim0 :esp8266 with KeDei lcd module:KeDei LCD module の改修方法。
YouTube:ESP8266 with hacked 3.5″ KeDei LCD module (SPI, CLK 40 MHz)
_    SPI を 40MHz で高速動作させる改修方法。
YouTube:ESP8266 with hacked 3.5″ KeDei LCD module (SPI, CLK 20 MHz)
_    SPI 20MHz の場合 。


感想:
1.  念願の 3.5 inch 480 x 320 を ESP32 ( ESP8266 ) で使用する事ができました。
_  ESPでの 5 inch と 7 inch は 動作情報がありますが 公開されていません。
2.  480 x 320 TFT + Arduino DUE  で 32ch(Arinc 429) Logic Analyzer
_ を製作した事例があります。以下は  24bit を縦に表示したものです。

3.  ラズパイでの これ以上の画素はHDMI接続になりESPではできません。
4.  TFT_eSPI library を使いこなすには 設定の「User_Setup.h」を理解
_ すると解りやすいです。命令表は Keywords.txt に書かれています。
5.  少し大きいですが 手に収まる事と 480 x 320 の大きい画素数という
_  利点があり 多彩な表示が出来るかと思います。
6.  サンプルの「Cellular_Automata」はライフゲームです。ライフゲームに
_ 興味があり、早々に楽しんでいます。

7.  TFT LCD Display 価格調査:
_ ebay の 3.5inch 480×320 は 1266円。
_ 国内は 以下の様に 幾つも購入できる 高価格です。
_ aitendo:3.5 inch 480×320 は 3500円。
_ スイッチサイエンス:3.5 ” は無く 2.2″ 320×240 3499円。
_  2.8″ 320×240 4903円。2.8″ 320×240 6307円。
_ 秋月電子通商:2.8″ 320×240 5130円。
_ 千石電商  :2.8″ 320×240 4200円。
_ 日本アマゾン:3.5inch 480×320 は 幾つかの業者があり
_  Kuman=2280円, Elegoo=2300円, Elecrow=2499円,
_  cocopar=2999円。


Written by macsbug

8月 12, 2017 @ 11:16 am

カテゴリー: ESP32, ESP8266

4件のフィードバック

Subscribe to comments with RSS.

  1. いつも参考にさせていただいています。

    ほとんど同じ構成で試して、うまく表示されないので、しばらく
    悩んでいましたが、もしやと思って、古いバージョンにしたら、
    正常に動作しました。

    https://github.com/Bodmer/TFT_eSPI/archive/v0.17.12.zip

    ohno

    3月 26, 2018 at 9:06 pm

    • ohno さん 大変貴重な情報をありがとうございます。 2018.03.26
      eSPI は素晴らしいライブラリーです。
      新しいバージョンの説明は 幾つか注目される所があり 確認したいと思います。
      古いバージョンの場所も教えて頂き 大変助かります。
      ところで 最近 M5STACK ( 320×240, ILI9341 ) を使用している中で
      外部に 320×240 ILI9341 TFT Display を接続し M5STACK のライブラリーで動作させると
      画像表示の範囲が 240×240 程度しか表示せず どうしたものかと思っていた所です。
      そこで M5STACK で eSPI ライブラリー を使用すると 当然ですが正常に表示します。
      他、M5STACK に 先人の TFT ILI シリーズのゲームを移植してみると
      色連れや左右の画像が反転する場合があり M5STACK は なにか仕組んでいる感じがしています。
      1. M5STACK + M5STACK LIbrary -> 外部 320×240, ILI9341 -> 全体に表示されない(240X240?)。
      2. M5STACK + eSPI LIbrary -> 外部 320×240, ILI9341 -> 正常に表示される。
      想像ですが M5STACK は 何かの理由で ILI9341 の配線を変えて装備しているかもしれません。
      理由はプロテクションとか想像してしまいますが 先人の貴重なライブラリーやサンプルが使えません。
      疑問を抱いている所、eSPI の話は 何らかのヒントになりそうです。ありがとうございました。

      2018.03.27
      新バージョン(2018.03.27 DL)で画面が表示しないことを確認いたしました。
      新バージョンは 2018.03.26 の翌日 2018.03.27 にも変更がされていました。
      この記事掲載時の バージョン(HDの日付 2017年07月15日)と
      教えていただいた 2017バージョン(HDの日付 2017年11月29日) は
      正常に動作しました。
      新バージョンは パラレル や M5STACK、ePaper 等 かなりの対応が追加
      されている様です。例として TFT_Drivers は 16個から 26個に増えています。
      新バージョンがどこの部分で動かないのか調べましたが 私の力量では
      判明しませんでした。
      TFT_Drivers ( RPI_ILI9486_Defines.h , RPI_ILI9486_Init.h,
      RPI_ILI9486_Rotation.h ) は 問題無く、どうも 本体のTFT_eSPI.cpp
      の様な感じがします。新バージョンで使用できる様になるまで
      しばらく開発者側を注視した方が良いかと思いました。

      尚、ohno さんの新情報はブログへ「追記」として反映させていただきました。

      macsbug

      3月 26, 2018 at 11:23 pm

      • 御返信、ありがとうございました。

        少し調べて、最新版が動作するようになりました。結果的には、関数 tft_Write_8(C) が
        正しく動作していませんでした。

        ちょっとややこしいのですが、この関数は、TFT_eSPI.cpp から #include されている
        TFT_eSPI.h で定義されていますが、そこで、TFT_eSPI.cpp の中で「後で定義される」
        (SEND_16_BITS) が条件として使われてしまっているため、おかしくなっていました。

        ○ #define tft_Write_8(C) SPI.transfer(0); SPI.transfer(C)
        × #define tft_Write_8(C) SPI.transfer(C)

        ベストな修正方法かどうかは分からないのですが、TFT_eSPI.cpp の以下の部分を、
        TFT_eSPI.h に移動しました。

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

        これからも、よろしくお願いします。

        ohno(JR2QVA)

        3月 28, 2018 at 12:21 pm

      • ohnoさん、確かめました。
        素晴らしい! 動いています。ありがとうございます!!
        ここまで追求できるレベルに驚いています。
        私も調べていましたが 難しくて そこまで到達せずでした。
        早々に内容はブログに追加させていただきました。
        感謝致します。

        macsbug

        3月 28, 2018 at 6:32 pm


コメントを残す