macsbug

How to touch operation of the TFT LCD in ESP8266

with 3 comments

240 x 320 SPI TFT LCD の タッチパネルを ESP8266 で使用する方法。                  2016.04.25

タッチパネルの操作が可能になりました。 左は サンプルの「XPTPaint」です。
指やタッチペンで点や線を描く事ができ Clear ボタンを押すと画面がクリヤーされます。

キャリブレーション:左右のカーソルを押すと キャリブレーションの値がでます(右上)

タッチパネルから入力が可能になり多様な電子工作が出来る事になります。(スクリーン=パネル)
タッチパネルの Controll IC は XPT2046 で 今までこのライブラリーがありませんでした。
その中で NailBuster Software Inc. が:  で
解決した記事を掲載しました。この実例を基に 動作確認をした内容を備忘録としました。


準備:
1. ボード:D1 mini with TELEC240 x 320 SPI TFT LCD Touch Panel :1600円。
_  TFT LCDには付属品として小さなタッチペンがついてきます。
_  
_           tp_300_s
2. ライブラリー:ILI9341esp: NailBuster Software Inc に感謝。
3. ライブラリー:adafruit / Adafruit-GFX-Library: Adafruit に感謝。
4. ライブラリー:spapadim/XPT2046: Spiros Papadimitriou 氏に感謝。
5. 部品:LDO:NJM2845DL-33:秋月電子通商。発熱対策が必要な場合。


配線:14本です。
_ ライブラリー ILI9341esp と 2.8″ Touch LCD SPI for esp8266 (nodemcu) に基づき
_ 配線も同様に行いました。ただし、T_CS は 4番から16番へ変更しました。
_ 理由は I2C信号を使用する為に 4番 を I2CのSCL に使用した為です。
_ ライブラリーとの関係もありますので大幅な配線の変更は実施しませんでした。

LED 3.3V 電源:D1 mini のLDO 3.3V の負担を軽くする為 LDO(NJM2845DL-33) で
_  5V から 3.3V を作り TFT LCD の LED電源にします。LDO の GND は SD の
_ 金属部分に半田付けします。金属カバーの変形と樹脂の溶解に注意する事。
_ 熱くなる事はありませんので他の場所でも可能です。
_ 補足:D1 mini の3.3V でも動作しますが U1(RT9013)LDO がかなり熱くなります。
_    U1 は左上の5本足のICです。LEDの電源に5Vを使用してはいけません。

注:端子の変更について:15番、0番は書込みで使用する為 出力信号へ接続しない事。
_ 16番は CS 以外の出力信号は接続しない事。接続すると動かなくなります。

_    

実写の補足:D3(0)(SDA)、D2(4)(SCL) に I2C BME280(温度,湿度,気圧) を接続し
_ 動作しています。電源は USB 又は ワイヤレス給電 が可能です。
_ ワイヤレス給電の場合 コイルが熱を発生する為 センサー等は考慮が必要です。


使用方法:
サンプルは「XPTCalibrate」と「XPTPaint」があります。
初回はタッチパネルのキャリブレーションを行います。

XPTCalibrate:タッチパネルのキャリブレーションをするもので、左上と右下に
_ カーソルがでてきます。カーソルをプッシュすると4つの数値が出てきます。
_ この値がキャリブレーション・データーですのでメモをします。

XPTPaint:キャリブレーション・データーの値を「XPTPaint」の
_ touch.setCalibration(1825, 1771, 280, 260); の中に記載すると正しい位置で
_ 「XPTPaint」が使用できる様になります。

冒頭の各設定は以下の様になります。( touch_CS 16 は 基記事から変更の部分)


#include <SPI.h> 
#include "Adafruit_ILI9341esp.h"
#include "Adafruit_GFX.h"
#include "XPT2046.h"
#define TFT_DC     2
#define TFT_CS    15
#define touch_CS  16
#define touch_IRQ  5
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
XPT2046 touch(touch_CS, touch_IRQ);  


参考:
NailBuster Software Inc.:2.8″ Touch LCD SPI for esp8266 (nodemcu)
3D Print Circuits and Mount for Your Own Arduino Compatibl:320×240 Touchscreen
XPT2046:Arduino library for XPT2046 / ADS7843 touchscreen driver
adafruit / Adafruit GFX Graphics Library / Overview
adafruit-gfx-graphics:using-fonts
adafruit-gfx-graphics:graphics-primitives
adafruit-gfx-graphics:coordinate-system-and-units
adafruit-gfx-graphics:rotating-the-display
2016.04.30 追記:
SMART PLUG:WeMos D1 mini と TFT LCD の豊富な記事がある。
SMART PLUG:Make Meteocons font file for ESP8266 Arduino UTFT library
SMART PLUG:ESP8266 UTFT 320×240 LCD Display Arduino Code
SMART PLUG:ESP8266 240×320 LCD Brain Stroke Index
SMART PLUG:[ESP8266] Display 2.8 inch Touch LCD with WeMos D1 mini board
Pavlův blog :ESP8266 + 2.8“TFT + TOUCH PANEL = ZÁKLAD PRO MALÝ HMI


表示例:BME280 温度、湿度、気圧センサー による表示。USB5Vの消費電流は 190mAです。


感想:
ライブラリーの公開:
Arduino では TFT LCD 表示の為の UTFT ライブラリーが有名です。
その LCD に タッチパネルを使用し入力装置にするものが UTouch です。
しかし ESP8266 が販売されてから このライブラリーはありませんでした。
約1年位でしょうか 先駆者により TFT LCD と TOUCH が使用可能になりました。
これで表示装置をそなえた ESP8266 の最小基本構成ができた訳です。

ESP8266の困難:
GPIOの数が少なくTOUCH PANELも含めた構成は困難でした。
この解決方法は2つの信号を共通で使用する事で実現しています。
結果 GPIOは2個の空きポートができ I2C用に使用できます。

ESP8266の弱点:
GPIO数が少なく パラレルI/Oを使用する大きな解像度は使用できません。
望みがあるのはシリアル信号を使用した 4本線の Nextionです。
NailBusterではかなり苦労した形跡があり 配線変更時は丁寧に調べてください。

SD CARD:
SDは CS,MOSI,MISO,SCKの4本が必要でGPIOの余りが無い為に使用できません。
これが使用できる様になるとデーターの保存や取得、画像の活用が出来ます。
使用できる方法ができましたら素晴らしいですね。

ESP8266の最小基本構成:
これで ESP8266 に TFT LCD と タッチパネル が実現し道具がそろいました。
ソフトでスイッチを作り 物理的なスイッチの購入や工作が不要になります。
価格も1600円で出来る事で 気楽に物作りが出来る条件が整いました。
ESP8266の出現時と比べると 画期的な事です。
更なる低価格の為に WeMos社から TELEC Version が販売される事を期待します。
D1 mini of TELEC Version expects that comes out.


Written by macsbug

4月 25, 2016 @ 4:48 am

カテゴリー: ESP8266

3件のフィードバック

Subscribe to comments with RSS.

  1. こんにちは。

    タッチ入力できるようになるのはすごいですね。
    タッチ入力をうまく処理すれば色々な入力を使用している4つのGPIOのみで処理できるようになりそうですね。
    あとは、D1 miniのメモリがどれくらい使用できるか気になります。

    メニューで「データ送信先IPアドレス」入力欄を用意し、それを設定した後でネットワークにつながっているudpLoggerでファイル保存する、という構成を作れように思います。
    http://qiita.com/7of9/items/0f74ba674fa8dfe02a04

    7of9

    4月 26, 2016 at 11:27 pm

    • こんにちは。
      タッチ入力のスケッチをArduinoで作った経験があり、スケッチの殆どがテンキールーチンになりました。
      少し応用機能を入れるとArduini UNOではメモリー不足になりました
      結果、容量の大きいArduino DUEで解決しました。
      まして文字入力になると大変で、工夫がいるかなと思っています。

      >D1 miniのメモリがどれくらい使用できるか気になります。
      そうなりますね。今の所一番大きなスケッチでの表示は最大容量が1MByteで245Kbyte、23%使用と表示されています。

      >「データ送信先IPアドレス」入力欄、udpLoggerでファイル保存する
      なるほど、そういう方法があるのですね。勉強になります。

      リンク先を拝見させていただきました。ありがとうございます。
      おおっ、こういう方法がある事と問題点をこういう風に解決するのだと感心致しました。
      凄いハイレベルの事をやっておられるのですね。
      レベルが高いので私が使えるまでには時間がかかりそうですがヒントを頂き助かります。

      今回の TFT LCD + TOUCH + SD ではGPIO数が少なくSDが使用できない感じがありますが、I2Cを使用しなければ SD は配線数では間に合いそうです。時間を置いて検討しようかなと思っています。

      macsbug

      4月 29, 2016 at 2:57 am

      • こんにちは。

        テンキールーチンはArduinoでも経験済みだったのですね。文字入力までとなるとメモリの使用に工夫がいるのですね。なるほどです。
        D1 miniで23%使用、というのもテンキーから機能を増やした時に注意が必要でしょうね。

        I2C不使用の場合は、TFT LCD + TOUCH + SDとして実装できる可能性があるのですね。この組合せでどういう用途のものを作るかですね。

        僕の記事についてハイレベルと書かれていて恐縮です。ほとんどが先陣が開いた道を後からたどっているばかりです。そういう実装でも一応自分のやりたいことはできている、というレベルです。今後はもっときちんとした実装をできるように腕を上げていきたいと思っています。

        7of9

        5月 8, 2016 at 8:04 am


コメントを残す