01.T-Watchをインストールと日本語表示


01.T-Watchをインストールと日本語表示

LILYGO T-Watch 2020 v3 を購入しました。約6000円でした。
LovyanGFXで日本語を表示させます。

種類

同系の腕時計では以下の3種類があります。
・T-Watch2020v1
・T-Watch2020v2:GPSあり 容量半分
・T-Watch2020v3
T-Watch2020v1
・静電容量式タッチスクリーン(240x240px)
・3軸加速度計
・スピーカー
・振動モーター
・バッテリー
・IR LED
・リアルタイムクロック
T-Watch2020v2
・MAX98357a I2Sアンプを取り外す
・DVR2605L触覚振動制御者を追加
・L76K GPSを追加
・TFカードホルダーを追加
T-Watch2020v3
・v1と非常によく似ているが、PDMマイクを追加

概略仕様

・ESP32-D0WDQ6-V3
・フラッシュ:16MB
・SRAM:520kB, SRAM/PSRAM:8MB
・電源ボタン:2秒on, 6秒off ボタンはプログラム出来ない
・1.54インチ, 240x240
・FT6236U:容量性タッチスクリーン
・ST7789V:モニタドライバ
・BMA423:3軸加速度センサ
・AXP202:電源管理
・PCF853:RTC(Real-Time Clock)
・MAX98357:PCM D級アンプ I2Sおよび8ch TDMデータに対応
・1Wスピーカー
・振動モーター
・赤外線信号送信機
・PDMマイク
・リチウム電池 3.8V 470mAh
https://www.lilygo.cc/products/t-watch-2020-v3

紹介
https://t-watch-document-en.readthedocs.io/en/latest/introduction/product/2020.html

Github inoのサンプル
https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library
APIの説明はなく、サンプルを見てくださいとのことです。
サンプルは何十もあります。各スケッチにはconfig.hがあり
#define LILYGO_WATCH_2020_V3
についている注釈の//を外して使用します。V3が無ければ使用できないスケッチです。

インストール

1.Arduino-IDE 2.3.2 を起動

2.TTGO_TWatch_Library ライブラリをインストール
2-1. https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library にて、コード > "ZIPをダウンロード" (解凍はしない)

2-2.Arduino-IDE > スケッチ > ライブラリをインクルード > ZIP形式のライブラリをインストール > 先にダウンロードしたTTGO_TWatch_Library-master.zipを指定 > 開く

2-3.(確認) Arduino-IDE > スケッチ > ライブラリをインクルード > (提供されたライブラリに) TTGO_TWatch_Library
が出来ています。

3.ボードの登録
3-1.json
Arduino-IDE > ファイル > 基本設定 > 設定(タブ) > 追加のボードマネージャのURLに https://dl.espressif.com/dl/package_esp32_index.json を記入

3-2.ボードをインストール
Arduino-IDE > ツール > ボード > ボードマネージャ > 検索欄="esp32"と入力 > esp32 by Espressif SYstems 2.0.11 (3.0.0-rc1 は大量のエラーで止まる)をインストール

4.ボードの選択
Arduino-IDE > ツール > ボード > eso32 > TTGO T-Watch
メニューの表示では、
・ボード:TTGO T-Watch
・ポート:COM4
・Core Debug Level:None (/Error,Warm,Info,Debug,Verbose)
・Erase All Flash Before Sketch Upload:Disabled (/Enabled)
・Partition Scheme: "Default 2x6.5MB app,3.6MB SPIFFS (/Large SPIFFS 7MB)
・PSRAM:Enabled (/Disabled)
・Board Revision:T-Watch Base (/T-Watch-2020-V1,-V2,-V3)
・Upload Speed:115200 (/2M/1152k,921.6k,256k,230.4k,512k)
としました。

5.ポートを選択
COM4にしました。

日本語表示

固定幅 ゴシック体 サイズ28

固定幅 ゴシック体 サイズ8

固定幅 ゴシック体 サイズ40

日本語を表示させるだけなら
#include <LilyGoWatch.h>
は必要ありませんでした。

LovyanGFXのGithub
https://github.com/lovyan03/LovyanGFX
の基本的な使い方のスケッチには
#define LGFX_TTGO_TWATCH
があったので使えることがわかります。スケッチは、
LovyanGFX入門 その2 フォント描画系
https://lang-ship.com/blog/work/lovyangfx-2-font/

LovyanGFX入門 その3 日本語フォント描画系
https://lang-ship.com/blog/work/lovyangfx-3-ja-font/
を参照しました。

(明朝,ゴシック)x(固定幅,プロポーショナル)x(サイズ:8,12,16,20,24,28,32,36,40)=2x2x9種類
あります。ここでは固定幅のゴシック体
 フォント:(&fonts::lgfxJapanGothic_□)
について、スケッチのサイズ部分を8,12,16,20,24,28,32,36,40に書き直して実行します。

字x行      サイズ
06字x06行(= 36) size=40 490kB
06字x06行(= 36) size=36 430kB
08字x08行(= 64) size=28 308kB 半角1行15dotx8x2=240
10字x10行(=100) size=24 256kB
12字x12行(=144) size=20 198kB
15字x15行(=225) size=16 145kB
20字x18行(=360) size=12  99kB
30字x26行(=780) size=08  62kB

また、英数字では
種類 文字幅 dot横x縦 指定するFont
英数 固定長 06x08 &fonts::Font0
〃  可変長 08x16 &fonts::Font2
〃   〃  14x26 &fonts::Font4
数字 固定長 27x48 &fonts::Font6
〃   〃  32x48 &fonts::Font7 時計風
〃   〃  55x75 &fonts::Font8
が使えます。

スケッチ


// LovyanGFX日本語
#define LGFX_AUTODETECT         // 機種の自動認識
#include <LovyanGFX.hpp>        // ヘッダをinclude
#include <LGFX_AUTODETECT.hpp>  // クラス"LGFX"を用意
static LGFX lcd;                // LGFXのインスタンスを作成。

void setup(void) {
  lcd.init();                               // 初期化
  lcd.setRotation(2);                       // 回転 0-3 (4-7で上下反転)
  lcd.setBrightness(128);                   // バックライトの輝度 0-255
  lcd.fillScreen(TFT_LIGHTGREY);            // 全画面塗潰し
  lcd.setCursor(0, 0);                      // カーソル位置設定
  lcd.setFont(&fonts::lgfxJapanGothic_40);  // 固定幅ゴシック体 8,12,16,20,24,28,32,36,40
  lcd.setTextColor(TFT_WHITE, TFT_BLACK);   // (白字,黒地)
  lcd.setTextSize(1);                       // 文字サイズ1倍
  lcd.setTextWrap(true);                    // 自動折返し

  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");  //70文字
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
  lcd.print("日日日日日日日日日日本本本本本本本本本本語語語語語語語語語語フフフフフフフフフフォォォォォォォォォォンンンンンンンンンントトトトトトトトトト");
}
void loop() {}
* flash memory(6.5Mbyte)のうち、スケッチが14%使用。RAM(4.5Mbyte)のうち、global変数が0%使用、local変数で4.5Mbyte使用可能。(1000byte=1kbyteで計算)
* サイズ40の時の値です。文字サイズでスケッチサイズが変わります。