LILYGO TTGO T-Watch-2020が届いたので開発環境を作って動かしてみた


LILYGO TTGOからT-Watch-2020が登場。

販売ページ「LILYGO® TTGO T-Watch-2020 ESP32 Main Chip 1.54 Inch Touch Display Programmable Wearable Environmental Interaction
資料「https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library

発売直後に注文入れたのですが、発送される前に値下がりしてたり、中継地点のシンガポールにつくまで1ヶ月以上音沙汰がなかったりと、約2ヶ月かかるとは思いませんでした。

画像
画像

中身は本体とmicroUSBケーブルだけでした。

初代T-WatchはType-Cコネクタでしたが、microUSBだとは・・・

画像

横についているボタンを押しても電源が入らなかったので、microUSBで電源供給してみたところテストプログラムが実行されました。

画像

とりあえずは問題ないようです。

では、開発環境を作って書き換えましょう。

ドキュメントとして「https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library」と「T-Watch Document」が書かれていますが、後者の記述は微妙なので無視ですね。

初期設定

(1) Arduino IDEをインストール

Arduino IDEをダウンロードしてインストール。うちの環境はWindows10なので Microsoft Storeからインストールしました。

(2) TTGO_TWatch_Library ライブラリをインストール

https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library の「Clone or download」から「Download Zip」を選択してzipファイルをダウンロード。

Arduino IDEの[スケッチ]-[ライブラリをインクルード]-[ZIP形式のライブラリをインストール]にてダウンロードしたzipファイルを指定してインストール。

追加が成功すると画面下部に以下が表示されます。

また「ドキュメント\Arduino\libraries」に「TTGO_TWatch_Library-master」が作成されます。

(3) Arduino IDE Boards Managerにespressif社のURLを登録

Arduino IDEの[ファイル]-[環境設定]の「追加ボードマネージャのURL」に「https://dl.espressif.com/dl/package_esp32_index.json」を追加する。

(3) T-Watchを選択する

Arduino IDEの[ツール]-[ボード]-[ESP32 Arduino]-[TTGO T-Watch]を選択する。(下の方に登録されている)

(4) スケッチ例からSimple Watchを呼び出す

Arduino IDEの[ファイル]-[スケッチ例]-[TTGO T-Watch]-[lvgl]-[Simple Watch]を選択する。

(5-1) Simple WatchをT-Watch-2020用に書き換える(2020/06/28以降のTWatch_Libraryの場合)

2020/06/28以降のlvgl 7.0.0対応のTWatch_Libraryの場合、SimpleWatchを選択した場合にタブで表示される「config.h」にて使用するT-Watchのバージョンを選択するようになった。
T-Watch-2020を使用する場合は、下記の様に「//define LILYGO_WATCH_2020_V1」のコメントを削除する。

// => Hardware select
// #define LILYGO_WATCH_2019_WITH_TOUCH     // To use T-Watch2019 with touchscreen, please uncomment this line
// #define LILYGO_WATCH_2019_NO_TOUCH          // To use T-Watch2019 Not touchscreen , please uncomment this line
#define LILYGO_WATCH_2020_V1             //To use T-Watch2020, please uncomment this line


// => Function select
#define LILYGO_WATCH_LVGL                   //To use LVGL, you need to enable the macro LVGL

#include <LilyGoWatch.h>

(5-2) Simple WatchをT-Watch-2020用に書き換える(2020/06/28より前のTWatch_Libraryの場合)

2020/06/28より前のTWatch_Libraryの場合、「SimpleWatch」のファイル冒頭に「// #define LILYGO_TWATCH_2020_V1 // If you are using T-Watch-2020 version, please open this macro definition」とあるように、T-Watch-2020を使う場合はここのコメントを外す必要がある。

/*
Copyright (c) 2019 lewis he
This is just a demonstration. Most of the functions are not implemented.
The main implementation is low-power standby. 
The off-screen standby (not deep sleep) current is about 4mA.
Select standard motherboard and standard backplane for testing.
Created by Lewis he on October 10, 2019.
*/

#define LILYGO_TWATCH_2020_V1        // If you are using T-Watch-2020 version, please open this macro definition

#include <TTGO.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/timers.h"
<以下略>

こんな感じに書き換える。

(6) Simple Watchを日本時間対応にする

SimpleWatchの「gui.cpp」というタブ内で、時刻表示が「CST-8」と設定されているので、それを「JST-9」に書き換えます。

<略>
#include "FS.h"
#include "SD.h"

#define RTC_TIME_ZONE   "JST-9"


LV_FONT_DECLARE(Geometr);
<略>

こんな感じです。

また、「gui.cpp」ではNTPサーバの接続先も設定されています。標準は「pool.ntp.org」ですが、日本国内の「ntp.jst.mfeed.ad.jp」(INTERNET MULTIFEED運営)や「ntp.nict.jp」(NICT運営)に書き換えてください。

(7) T-Watch-2020をパソコンにつなげます

microUSBケーブルを使ってT-Watch-2020をつなげます。

USBシリアルCP2104用のドライバがインストールされていない場合は https://t-watch-document-en.readthedocs.io/en/latest/download/index.htmlCP2104の公式ページなどからSilicon Labs Virtual COM Port (VCP) Universal Driverを入手してインストールします。

(8) T-Watch-2020が接続されたCOMポートを指定します。

Arduino IDEの[ツール]-[シリアルポート]にてCOMポートを指定します。

Arduino IDEの[ツール]-[Upload Speed]は「1152000」と指定しています。この速度はT-Watchのサンプルコードのシリアル入出力で見かける速度指定なので使っています。

それ以外の項目は特に変えていません。

ちなみに「PortPop」というアプリをインストールしておくと、デバイスをつなぎWindows上でCOMポートとして認識した時点で、何番として認識されたのかを教えてくれるので便利です。

(9) コンパイルと書き込み

Arduino IDEの[スケッチ]-[マイコンボードに書き込み]を選択して、コンパイルと書き込みを実行します。

(10) 完成

WiFiをスキャンしてSSID一覧を作り、そこから接続先を選択し、キーを入力することで、ネットワークに接続し、NTPサーバから時刻同期を行う、ということが可能となりました。

画像
画像
画像

Simple Watchの操作は「画面タッチ」です。横の丸ボタンは画面ON/OFFのみのようです。

また、WiFi以外に「Settings」「SDcard」「Camera」などのメニューがありますが、現状未実装です。押しても何も発生しません。

次に作るものは、と製品紹介ページに載っている下記画像を実現できるソースコードを探してみたところ・・・

画像

LilyGoGui」でした。

画像

が・・・時間が変わらないのでおかしいな、とソースを見てみると、画面表示のサンプルなだけで、全てが固定表示だったという・・・

そっか・・・時計実装は自前でやらなきゃならないのか・・・

aliexpressでBT5.0と称するBluetoothアダプタを買ってみたら4.0でしか動かなかった


aliexpressにてとても安いBluetooth 5.0アダプタがあったので2種類買ってみた。

2個あわせて4.52ドルというお値段なので、BT5.0ってほんとなの?と思いつつ発注。

画像

届いたので、Windows10 1909にさして、Microsoftの「PC に搭載されている Bluetooth のバージョンを確認する」に書かれている通りに確認してみると・・・

画像

LMPはどちらも6.x

画像

ということで、LMP6.xなのでBluetooth 4.0とのこと。

パッケージに書かれているURL https://launchstudio.bluetooth.com/ListingDetails/75270 を見てみると、Barrot というメーカのBR80xx系のチップを使っているらしい。

チップとしてはBluetooth 5.0で動いてもよさそうな雰囲気はあるものの、「Supported Layers  4.0 Host Controller Interface」って5.0で設定されてないのでは?疑惑。

そもそも製造メーカが「Barrot」じゃなくて「Cambridge Silicon Radio」として認識されるのおかしくない?

Ubuntuにさしてみると、どっちもUSBデバイスとして認識するが、Bluetoothが動作しない。

画像

hciconfig hci1 upとかやっても起動してくれない。

調べて見ると「Unable to power up Bluetooth dongle」「Bug 60824 – [PATCH][regression] Cambridge Silicon Radio, Ltd Bluetooth Dongle unusable」Linuxでの動作はいろいろ問題を抱えているらしい。

いろいろ調べて見ると同じような見た目だけどBluetooth 5.0として認識されている事例を発見

拆解$19的Bluetooth 5.0 Dongle」(下記画像は引用したもの)

うちの小さい方のパッケージと同じで、中身がでっかい方と同じに見える、というもの。

これは「HCI 9.2064 / LMP 9.8978」で認識されているようだ。そして、デバイス名が「CSR8510 A10」で認識されている。

私のデバイスの「HCI 6.12576 / LMP 6/8891」でデバイス名は「BT DONGLE10」で認識されている。

書かれているfirmware的なものが違うんだろうか?

とりあえず、aliexpressには払い戻し申請中です。

双方向対応USB Type-C用電圧電流測定機RD TC66Cが届いた


USB Type-Cで充電していると、いったい何Vで充電されているのかが気になります。

でも、大抵のデバイスでは正確な値は教えてくれません。

そこでUSB Type-C用の電圧電流測定機を使います。

いろんなタイプがあり、うちでは2018年8月に買った「USB Type-C用の電圧電流計RD TC64」をメインで使っていました。(その他に「Power-Z KM-001」というのもありますが、これは機能は多いのですが大きいというのと測定時にType-Cケーブルを2本使う必要があるのであまり使っていません)

RD社の製品はいろいろ使っているのですが、この度発売されたRD TC66Cというのを「Aliexpressにある公式ショップで$24.50」買いました。なお、$19.50で販売している方はRD TC66というものでこちらは機能削減版です。

この製品のトピックは「双方向測定可能」と「microUSB接続でWindowsパソコンとつなぎ測定データ取得可能」「Bluetooth接続でAndroid/iOSとつなぎ測定データ取得可能(RD66Cのみ)」という点です。

「双方向測定」というのはUSB Type-C充電の測定で結構重要です。USB Type-Cの充電ではどちらが電源供給サイドになるかはコネクタを見ただけではわからず、実際に接続しコネクションが行われてから確定します。なので、どちらの方向に電流が流れているかを確認するためには「双方向測定」である必要があります。

「microUSB接続」でパソコンに繋ぐ場合は「https://pan.baidu.com/s/1sxlqFnTYEN2TcyLiTA5EQA#list/path=%2F」か「https://www.mediafire.com/folder/pqn0ybytqpy7n/TC66」から「RuiDengUSBMeter.rar」をダウンロードして使います。(2019/04/15 21:00時点ではmediafireにはアップロードされていません 4/18にアップロードしてもらいました)

「Bluetooth接続」は「Android用アプリTC66C」/「iOS用アプリTC66C」で利用できます。上記のbaiduとmediafireにapkファイル単体もアップロードされています。

英語版のマニュアルは「https://pan.baidu.com/s/1sxlqFnTYEN2TcyLiTA5EQA#list/path=%2F」か「https://www.mediafire.com/folder/pqn0ybytqpy7n/TC66」 にpdfでアップロードされています。中国語版マニュアルはhttp://www.ruidengkeji.com/inst/TC66.pdfにあります。

さて、実際に使ってみます。

とりあえず、RD TC64(赤い方)と、RD TC66C(黒い方)を並べて見る。ちょっとTC66Cが大きい。

DELL Venue10 Pro 5056を繋いで測定。

黒いTC66Cの方は「→」と「←」で電流の方向を表しています。

表示内容自体はTC64とTC66Cはほぼ同じ感じですね。

RD TC66C/TC66の側面には押しボタンスイッチが2つ(AとB)、スライドスイッチ(CとD)、あとmicroUSBコネクタ(E)があります。

Aキーで表示の切り替えを行い、Bキーを長押ししてSETTINGメニューに入り、SETTINGメニュー内の項目移動はBキーの短い押しで行う。SETTINGの各項目値の変更はAキーの短い押しで行う。

標準設定ではUSB接続とBluetooth接続が有効になっていました。

前述のAndroid TC66CアプリをSoCにSnapdragon採用している端末にインストールして実験・・・MediaTek端末だとBLEがうまく動かないようでTC66Cデバイスを認識してくれませんでした。

アプリを起動・・・

「スキャン」をクリックして、スキャン開始

「TC66C」の横の「接続」をクリックすると接続されます。

こんな感じで測定時のグラフが表示されます。下にある「前のページ」「画面回転」「次のページ」はTC66Cの液晶画面操作です。

.この他にもいろいろ機能はありますが、面倒なので、とりあえずこの程度で

2019/04/20時点ではTC66 / TC66C のfirmwareアップデートが提供されています。

WindowsアプリのRuiDengUSBMeterをインストールして、TC66/TC66Cの一番左側のスイッチを押しながらmicroUSBを繋ぐとBOOTLOADERモードで起動するので、アップデートができるようになります。


RD TC66Cのfirmwareをアップデート」にてfirmwareアップデートについて詳細を記載しています。

64×64 フルカラーLEDバックパックを買った


twitter見てたらスイッチサイエンスの人が興味深いバックパックを紹介していた。

メーカー名っぽい「KWQ」をキーワードに探していったところ「Wifi Dynamic LED Backpack」という部類でいろいろあるのを発見。
入手しやすい場所を探してしては、Gearbestで「Fashion WIFI Version Smart Led Dynamic Backpack として売っていたので即発注。

発注から8日で到着。

早速開梱してみると、中身は「バックパック」と「LED板」に分かれていました。

電源を繋ぐと、Welcomeメッセージが表示されました。(なお、初期化すると違う文字列になります)

Androidでは「LED Space」をインストールすると、表示内容の設定や、LEDの明るさ設定を変更することができます。

一度転送した情報は電源を抜いても記憶しているので、ON/OFFは単純にUSBコネクタの抜き挿しでOKです。

逆に現在登録されている内容を消したい時はアプリから消す必要があります。初期化した後は下記のテキストデモが表示されます。

ただし、2018/12/03リリースのV1.0.1ではバグなようで、Imageメニューからの画像設定に失敗します。

GIFアニメ設定メニューからgif画像を設定すると動くんですけどね・・・

Sync風gifアニメ画像を組み込んでみるとこんな感じです。

 下記はgif画像をgifアニメとして組み込んだ例です。

また、64×64の区画を分割することができます。

下記は「64×52」のgifアニメ領域と「64×12」のテキストスクロール領域を設定した場合の例です。

消費電力的はどれだけLEDを光らすかが重要です。

まず、明るさをLv0~Lv15(最大輝度)まで設定できます。Lv10ぐらいないと目立たないです。

画像を表示する場合、「黒」が消灯です。なので、背景は黒にしましょう。逆に白めの画像は消費電力が高くなります。

Steamlink launcher for OSMCをラズパイ3のOSMCに導入


ラズパイ3をメディアプレイヤーとして置こうと思うんだけど、そこに「Steam Link now in BETA on Raspberry Pi」をインストールして、Steam Linkの端末としても使いたい。

そういうことができるのかを調べて見た。すると、「Release: Steamlink Launcher for Kodi (OSMC only)」というのを発見。ソフトウェアの配布は「https://github.com/swetoast/steamlink-launcher」で行われている。

ラズパイをメディアプレイヤーとして使うディストリビューションとして「LibreELEC」とか「OSMC」がある。

今回のプラグインはOSMC用ということなので、OSMCのSDカードイメージで起動してみる・・・が・・・「Install failed: can’t mount root」というエラー。

SDカード内にある「install.log」にログがある、というので確認してみると・・・

Thu Jan 1 00:00:07 1970 Starting OSMC installer
Thu Jan 1 00:00:13 1970 Detecting device we are running on
Thu Jan 1 00:00:13 1970 Mounting boot filesystem
Thu Jan 1 00:00:13 1970 Trying to mount to MNT_BOOT (/mnt/boot)
Thu Jan 1 00:00:13 1970 Using device-&amp;amp;gt;boot: /dev/mmcblk0p1 and FS: fat32
Thu Jan 1 00:00:13 1970 No preseed file was found
Thu Jan 1 00:00:13 1970 Creating root partition
Thu Jan 1 00:00:13 1970 From a root partition of /dev/mmcblk0p2, I have deduced a base device of /dev/mmcblk0
Thu Jan 1 00:00:10 1970 Determined 255 MB as end of first partition
Thu Jan 1 00:00:10 1970 Calling mkpart for device: /dev/mmcblk0 and fs: ext4 with start 257M and end 100%
Thu Jan 1 00:00:11 1970 Calling fmtpart for partition /dev/mmcblk0p2 and fstype ext4
Thu Jan 1 00:01:23 1970 Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=2 blocks, Stripe width=1024 blocks
969136 inodes, 3869440 blocks
193472 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3963617280
119 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables:   0/119       done                            
Writing inode tables:   0/119       done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:   0/119  2/119  4/119  6/119 50/119       done


Thu Jan 1 00:01:23 1970 Mounting root
Thu Jan 1 00:01:23 1970 Trying to mount to MNT_ROOT (/mnt/root)
Thu Jan 1 00:01:23 1970 Using device-&amp;amp;gt;root: /dev/mmcblk0p2
Thu Jan 1 00:01:23 1970 Error occured trying to mount root of /dev/mmcblk0p2
Thu Jan 1 00:01:23 1970 Halting Install. Error message was: can't mount root

たいしたことは書かれてない感じで・・・なぜ?

違うmicroSDカードを使ったところ、正常に起動が完了した。

まずは、Bluetoothコントローラのペアリング設定は「My OSMC」の「Network」でBluetoothを有効にしてから行う。

次に、sshでログイン(OMSCのUsernames and passwords)して、

$ sudo apt update
$ sudo apt install xz-utils
$ curl -#Of http://media.steampowered.com/steamlink/rpi/steamlink_1.0.7_armhf.deb
$ sudo dpkg -i steamlink_1.0.7_armhf.deb
$ steamlink

「steamlink」を実行するとしばらく追加のソフトインストールとかが実行されたあと、HDMI出力にsteamlinkの画面が出てくるのが確認できる。

で・・・この後、kodiのアドオンとして「Steamlink Launcher for OSMC」をインストールするわけなんだけど・・・うちではこのアドオンがうまくインストールできたように見えない・・・どうすれば


v0.0.4がリリースされたので試してみたところ、やはりうまくプラグインがインストールできた様子がない・・・ただ、v0.0.3からの変更点を見るとzipファイル内のディレクトリ構造を変えたとある。

試しに他のpluginの構造を調べて見るとzipファイル内にはプラグイン名のディレクトリを作る必要があるにも係わらず、v0.0.4のzipファイルではディレクトリが存在していない。

というわけで、zipファイルを作成しなおしたところ、問題なく動作するようになりました。

このことを報告したところ送ったzipファイルがそのまま採用されました。

2018/12/29配布のv0.0.4aは正常に動作します。