Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
TFTタッチシールドの実験

概要

Adafruitの2.8" TFT Touch Shield for Arduino with Resistive Touch Screenを使った実験です。Arduino UnoとESP-WROOM32をそれぞれ接続してみました。

目的

Adafruitの2.8" TFT Touch Shield for Arduino with Resistive Touch Screenの動作確認です。Arduino Unoで動作するのは当たり前ですが、ESP-WROOM-32でも動作するかを確認します。確認には、Arduinoソフトウェアについてくるスケッチ例を利用しました。

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

製造元のAdafruitがライブラリを配布しています。デフォルトでは、このタッチシールド用のライブラリはインストールされていないので、インストールします。

TFT液晶用のライブラリと、タッチセンサ用のライブラリをそれぞれインストールします。

TFT液晶用ライブラリは、「Adafruit ILI9341」です。また、タッチセンサ用ライブラリは、「Adafruit STMPE610」です。

Arduinoソフトウェアを立ち上げて、上部のメニューから、「スケッチ > ライブラリをインクルード > ライブラリを管理」を選択すると、ライブラリマネージャが起動します。その後、上記のライブラリを探して、クリックすると、「インストール」というボタンが出てくるので、クリックしてインストールします。

ライブラリマネージャが起動します。ライブラリの数が大変多いので、ILI9341等で絞り込みます。インストールしたいライブラリを選択すると、インストールというボタンが出てくるので、クリックします。

インストールが完了すると、ライブラリ名の横に、バージョン番号と、「INSTALLED」が表示されます。

同じ要領で、「Adafruit STMPE610」もインストールします。

Arduino Uno

接続

本機はシールドなので、Arduino Unoに差し込むだけです。

スケッチ例

Arduinoソフトウェアから、「ファイル > スケッチ例 > Adafruit ILI9341」とたどっていき、適当なスケッチを選択します。私は、TFT液晶もタッチセンサも両方利用できるtouchpaintを利用してみました。

なお、_featherwing が名前の後ろについているスケッチ例は、ピン定義が少し異なるので、そのままでは動きませんでした。

ESP-WROOM-32

ESP-WROOM-32(ESP32 DevkitC)から利用できることも確認しました。

接続

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

MISO/MOSI/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 MISO 12
23 MOSI 11
18 SCK 13
3.3V 電源 5V
GND GND GND

スケッチ例

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

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

オリジナルの定義

// 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

修正後の定義

// 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を利用する理由はないと思いますが。

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);   // hard SPI
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, MOSI, SCK, -1, MISO);   // soft SPI

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

バージョン

Arduino 1.8.4/Arduino Uno/ESP-WROOM-32



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2017 garretlab all rights reserved.
inserted by FC2 system