TFT display for Raspberry pi with ESP32
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円。
いつも参考にさせていただいています。
ほとんど同じ構成で試して、うまく表示されないので、しばらく
悩んでいましたが、もしやと思って、古いバージョンにしたら、
正常に動作しました。
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