NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

3.5インチLCDの使い方(WT32-SC01 Plus)

WT32-SC01 Plus 3.5 
 マルツの2023/3/30メールマガジン広告を見て、無意識にポチってしまった「WT32-SC01 Plus」を試しに動かしてみました(;'∀')USBに繋ぐだけで直ぐにタッチDispのGUI作れて超便利!(税込¥12,500!?)
 
1.1 「WT32-SC01 Plus」の概要
 「WT32-SC01 Plus」とは、3.5インチLCDカラーディスプレイとArduinoIDEで開発可能なマイコン「ESP32-S3」が搭載されたIoT機器開発ボードです。
 「WT32-SC01 Plus」の特徴として、従来の「WT32-SC01」に比べ、CPUがESP32からESP32-S3に、ディスプレイインターフェースがSPIから8ビットパラレルに変更されたことにより、表示速度が大幅に改善されています。※左記Youtubeリンク先を見て買うのを決めました(*'▽')いい
 また、SDカードスロットが追加され、周辺機器どうしを接続できるOTG(On-The-Go)にも対応したことにより使い勝手が大幅に向上したとの事。
図1:「WT32-SC01 Plus」の外観写真
1.2 「WT32-SC01 Plus」の仕様
 「WT32-SC01 Plus」の仕様を表1と図2に、「WT32-SC01 Plus」と「WT32-S3-WROVER-N16R2」のピンアサインを図3に示します。
 
表1:WT32-S3-WROVER-N16R2の仕様
項目 内容
CPU Dual core X tensa 32 bit LX 17 MCU
メモリ フラッシュ:最大16MB、PSRAM:最大 8MB
WIFI 2.4GHz Wi-Fi(802.11b/g/n) (日本国内技適認証済み)
Bluetooth Bluetooth 5(LE) module (日本国内技適認証済み)
表示LCD IPS 3.5 LCD 320×480ピクセル / Display Driver IC:ST7796U
タッチスクリーン 静電容量型 / Touch Screen IC:FT6336U
電源入力 DC5V/500mA (USB Type-C 経由)
アンテナ 内蔵型
Interface RS485 / USB / Speaker / SD_Card / Extendet_IO_port
寸法 本体約92mm×60mm×10.8mm
重量 本体約 100g
 

図2:「WT32-SC01 Plus」の I/F及び、グレー部の搭載マイコンWT32-S3-WROVER-N16R2
PinNoは、左上をPin1として反時計回りにPin41
図3:「WT32-SC01 Plus」 I/Fと、搭載マイコンWT32-S3-WROVER-N16R2」のピンアサイ
1.3 「WT32-SC01 Plus」の回路図
 「WT32-SC01 Plus」の回路図を図4に示します。

図4:「WT32-SC01 Plus」 の回路図

2.実験!

 実際に「WT32-SC01 Plus」をPCに接続すると、図5左図のプリインストールされたGUIが表示されます。
 今回はGIT HUBに「sukesh-ak/WT32-SC01-Plus_ESP32-S3.ino」として公開されているソースコードをそのまま使用させて頂き、「WT32-SC01 Plus」画面をタッチしてお絵描き出来るシンプルアプリを書き込んでみました!!(^^)!図5右の通りお絵描き出来ました!
図5:左:before(プリインストールGUI) 、右:after(タッチお絵描きアプリ)
2.1 準備
 USB-TypeCケーブルで「PC」と「WT32-SC01 Plus」 を接続し、以下ArduinoIDE(無ければココからダウンロード)にボードやらライブラリやらをインストールすれば準備完了です!

図6:ArduinoIDE(rev2.0.4)を開き、メニュー → ファイル → 基本設定 → 追加のボードマネージャーのURLに「https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json」入力 → OKクリック
たまねぎブログさん記事「ESP32-S3-DevkitC-1」を参考にさせて頂きました。

図7:ArduinoIDE(rev2.0.4)左側に「ボードアイコン」を押し、ボードマネージャーで一応「esp32 by Espressif Systems・・・」をrev2.0.7にしてインストールをクリック

図8:USB-OTGに対応している為か分かりませんが、ボードが自動で「TAMC Termod S3」を選択

図8:ArduinoIDE左側「ライブラリアイコン」を押し、ライブラリマネージャーのTextBoxに「LovyanGFX」と入力/検索し、「LovyanGFX by loviyan03」Ver1.1.5をインストール。

図9:「LovyanGFX」ライブラリは、プログラム中の先頭で「#define LGFX_AUTODETECT」としておくと、パネルIDから自動認識してくれるので、上記「1_simple_use」がそのまま動くかと思いましたが、「core0 panic」無限再起動となってしまいました(;'∀')残念!

※補足:LovyanGFXライブラリとは?

 ESP32とSPI, I2C, 8ビットパラレル接続のディスプレイ / ESP8266とSPI接続のディスプレイ / ATSAMD51とSPI接続のディスプレイの組み合わせで動作するグラフィックライブラリです。AdafruitGFX や TFT_eSPI と互換性をある程度持ちつつ、より高機能・高速動作

◇既存のライブラリに対して、以下のアドバンテージがあります。
・ArduinoESP32 / ESP-IDF 対応
・16bit / 24bitカラーモード両対応(実際の色数はディスプレイの仕様によります)
・DMA転送を用いた通信動作中の別処理実行
・オフスクリーンバッファ(スプライト)の高速な回転/拡縮描画
・複数ディスプレイの同時利用
・モノクロディスプレイに対する減色描画の自動処理
OpenCV,SDL2を描画先として利用でき、PC上で動作可能
コンポジットビデオ信号(NTSC,PAL)を出力できます (ESP32のみ)
・#define LGFX_AUTODETECT // 自動認識 (パネルID読取りが出来ない物は自動認識対象外)

 

2.2 プログラム
 図5右で動いている、「sukesh-ak/WT32-SC01-Plus_ESP32-S3.ino」コードは以下の通りです。
/*
    Simple Touch Drawing sample for WT32-SC01-Plus_ESP32-S3
    Requirements:
    - Development board : WT32-SC01-Plus_ESP32-S3
    - Arduino Library - Display/Touch : LovyanGFX
    - Board selected in Arduino : ESP32S3 Dev Module

*/

#define LGFX_USE_V1         // set to use new version of library
#include     // main library

class LGFX : public lgfx::LGFX_Device
{

  lgfx::Panel_ST7796  _panel_instance;  // ST7796UI
  lgfx::Bus_Parallel8 _bus_instance;    // MCU8080 8B
  lgfx::Light_PWM     _light_instance;
  lgfx::Touch_FT5x06  _touch_instance;

public:
  LGFX(void)
  {
    {
      auto cfg = _bus_instance.config();
      cfg.freq_write = 20000000;    
      cfg.pin_wr = 47;             
      cfg.pin_rd = -1;             
      cfg.pin_rs = 0;              

      // LCD data interface, 8bit MCU (8080)
      cfg.pin_d0 = 9;              
      cfg.pin_d1 = 46;             
      cfg.pin_d2 = 3;              
      cfg.pin_d3 = 8;              
      cfg.pin_d4 = 18;             
      cfg.pin_d5 = 17;             
      cfg.pin_d6 = 16;             
      cfg.pin_d7 = 15;             

      _bus_instance.config(cfg);   
      _panel_instance.setBus(&_bus_instance);      
    }

    { 
      auto cfg = _panel_instance.config();    

      cfg.pin_cs           =    -1;  
      cfg.pin_rst          =    4;  
      cfg.pin_busy         =    -1; 

      cfg.panel_width      =   320;
      cfg.panel_height     =   480;
      cfg.offset_x         =     0;
      cfg.offset_y         =     0;
      cfg.offset_rotation  =     0;
      cfg.dummy_read_pixel =     8;
      cfg.dummy_read_bits  =     1;
      cfg.readable         =  true;
      cfg.invert           = true;
      cfg.rgb_order        = false;
      cfg.dlen_16bit       = false;
      cfg.bus_shared       =  true;

      _panel_instance.config(cfg);
    }

    {
      auto cfg = _light_instance.config();    

      cfg.pin_bl = 45;              
      cfg.invert = false;           
      cfg.freq   = 44100;           
      cfg.pwm_channel = 7;          

      _light_instance.config(cfg);
      _panel_instance.setLight(&_light_instance);  
    }

    { 
      auto cfg = _touch_instance.config();

      cfg.x_min      = 0;
      cfg.x_max      = 319;
      cfg.y_min      = 0;  
      cfg.y_max      = 479;
      cfg.pin_int    = 7;  
      cfg.bus_shared = true; 
      cfg.offset_rotation = 0;

      cfg.i2c_port = 1;
      cfg.i2c_addr = 0x38;
      cfg.pin_sda  = 6;   
      cfg.pin_scl  = 5;   
      cfg.freq = 400000;  

      _touch_instance.config(cfg);
      _panel_instance.setTouch(&_touch_instance);  
    }
    setPanel(&_panel_instance); 
  }
};

static LGFX lcd;            // declare display variable

// Variables for touch x,y
static int32_t x,y;

void setup(void)
{
  lcd.init();

  // Setting display to landscape
  if (lcd.width() < lcd.height()) lcd.setRotation(lcd.getRotation() ^ 1);

  lcd.setCursor(0,0);
  lcd.printf("Ready to touch & draw!");
}

void loop()
{
  if (lcd.getTouch(&x, &y)) {
    lcd.fillRect(x-2, y-2, 5, 5, TFT_RED);
    lcd.setCursor(380,0);
    lcd.printf("Touch:(%03d,%03d)", x,y);
  }
}

イメージ 1
図10:プログラム例

3.まとめ!

 「WT32-SC01 Plus」 のタッチ入力から画面への表示が出来るようになりました!(^^)! 今回は使っていませんが、microSDカードスロットが折角有るのでそのうち動かしてみたいと思います(^^)/さて、この¥12,500のモノ買ったはいいが何に使うか・・・?

 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【NOBのArduino日記!】目次に戻る