TFTタッチシールド(ESP32)
ESP32

概要

Adafruitの2.8" TFT Touch Shield for Arduino with Resistive Touch Screenを使った実験です。この実験はESP-WROOM-32を接続したものです。利用するライブラリは、Arduino Unoと同じものが使えます。Arduino Unoを接続した実験はこちら

ライブラリのインストール

ライブラリのインストールは、こちらを参照してください。

実験

接続

ESP32 DevkitCは、Arduinoのピン配置ではないので、Arduino Unoのときとは異なり、そのままシールドを差し込むということができません。このため、ESP32とシールドとを自分で接続する必要があります。Arduino Unoでの実験の際に、そのままでは使えないと書いた、touchpaint_featherwingを見ると、ESP32用の定義が書いてあったので、それを参考に接続しました。SDカードは試していないので、間違えているかもしれません。

CIPO/COPI/SCKは、SPI接続のために必要なピンで、すべての機能に共通です。電源は、3.3Vでも5Vでも動作しますが、タッチシールド側は、Arduino Unoでいう5Vのピンに接続する必要があるようです。

ESP32のピン 意味 タッチシールドのピン (番号は、Arduino Unoのピン番号と同じ読み方をしています)
15 TFT用CS 10
33 TFT用D/C 9
32 タッチセンサ用CS 8
14 SDカード用CS 4
19 CIPO 12
23 COPI 11
18 SCK 13
3.3V 電源 5V
GND GND GND

スケッチ例

スケッチ例は、touchpaint_fetherwingを利用しました。ただし、少し修正が必要でした。

修正箇所は以下の通りです。63行目あたりの定数を変更します。

オリジナルの定義

63
64
65
66
67
// This is calibration data for the raw touch data to the screen coordinates
#define TS_MINX 3800
#define TS_MAXX 100
#define TS_MINY 100
#define TS_MAXY 3750

修正後の定義

63
64
65
66
67
// This is calibration data for the raw touch data to the screen coordinates
#define TS_MINX 150
#define TS_MINY 130
#define TS_MAXX 3800
#define TS_MAXY 4000

SPI接続

ESP-WROOM-32で、ハードウェアSPIとソフトウェアSPIの性能差を見てみました。tftを生成する際のコンストラクタの違いで、ハードウェアの機能を利用するのか、ソフトウェアで処理するのかを選ぶことができます。通常は、ソフトウェアSPIを利用する理由はないと思いますが。

59
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);   // hard SPI
59
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, COPI, SCK, -1, CIPO);   // soft SPI

ここでは、graphicstest_featherwingを利用しました。結果を以下に示します。左側が、ハードウェアSPI、右側がソフトウェアSPIです。5倍から12倍程度、ハードウェアSPIのほうが早いという結果になりました。

バージョン

Hardware:ESP-WROOM-32
Software:Arduino 1.8.4/Arduino core for the ESP32

最終更新日

March 6, 2023

inserted by FC2 system