02.T-Watch S3 plus + LVGL 9でタイルテスト
02.T-Watch S3 plus + LVGL 9でタイルテスト
T-Watch S3 plus で LVGL 9によるタイルのテストスケッチです。
四角が1画面で、→がスワイプで画面を移動します。
画面12で右端から左端まである程度ゆっくりスライドすると画面13が表示されます。
四角内の説明は仮につけた名前で、実際その動作はしません。
起動画面は12です。
┌────┐ ┌────┐ ┌────┐
│ 11 │←│ 12 │→│ 13 │
│アラーム│ │デジタル│ │明るさの│
│時刻設定│→│時計表示│←│ 設定 │
└────┘ └────┘ └────┘
↓↑
┌────┐ ┌────┐ ┌────┐
│ 21 │←│ 22 │→│ 23 │
│wifiで │ │手動で │ │アナログ│
│時刻設定│→│時刻設定│←│時計表示│
└────┘ └────┘ └────┘
スケッチ
// 起動時の画面は12で、横3x縦2の6画面タイルテスト
// (11) アラーム時刻設定 (12) デジタル時計表示 (13) 明るさの設定
// (21) wifiで時刻設定 (22) 手動で時刻設定 (23) アナログ時計表示
#include <LilyGoLib.h> // LilyGoLib 0.1.0(最新)を使用
#include <LV_Helper.h> // LVGL 9.2.2を使用
void setup() {
Serial.begin(115200); // シリアルモニタの通信速度
instance.begin(); // LilyGoLibを初期化
beginLvglHelper(instance); // LVGLを初期化
lv_obj_t* tv = lv_tileview_create(lv_screen_active()); // default displayにタイルを作成
// タイル11 アラーム時刻設定 ------------------------------
lv_obj_t* tileM11 = lv_tileview_add_tile(tv, 0, 0, LV_DIR_RIGHT); // 1行1列目 右のみに移動
// tileviewにtileを追加(tileviewオブジェクトへのpointer,タイルの列,行,次に進む方向)
// 戻り値:追加されたタイルobjへのpointer
lv_obj_t* btn = lv_button_create(tileM11);
// ボタンobjを作成(objへのpointer 新しいボタンの親)
// 戻り値:作成されたボタンへのpointer
lv_obj_t* label = lv_label_create(btn);
// ラベルobjを作成(objへのpointer 新しいラベルの親)
// 戻り値:作成されたボタンへのpointer
lv_label_set_text(label, "アラーム設定 右へ");
// ラベルの新しいtextを設定(ラベルobjへのpointer,\0の終端文字の文字列 NULLなら現在のテキストで更新)
lv_obj_set_size(btn, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
// オブジェクトのサイズを設定(オブジェクトへのポインタ,幅,高さ)
// 可能な値は px,LV_SIZE_CONTENT:指定方向のすべての子を巻込むサイズ,
// lv_pct(x):親のコンテンツエリアサイズ(パディングなしのサイズ)の割合 xは[0..1000]%
lv_obj_center(btn);
// objを親の中心に合わせます(objを合わせるためのpointer)
// タイル12 デジタル時計 ------------------------------
lv_obj_t* tileM12 = lv_tileview_add_tile(tv, 1, 0, (lv_dir_t)(LV_DIR_LEFT | LV_DIR_BOTTOM | LV_DIR_RIGHT)); // 1行2列目 左右下へ移動
label = lv_label_create(tileM12);
lv_label_set_text(label, "デジタル時計 左右下へ");
lv_obj_center(label);
// タイル13 明るさ設定 ------------------------------
lv_obj_t* tileM13 = lv_tileview_add_tile(tv, 2, 0, LV_DIR_LEFT); // 1行3列目 左のみに移動
lv_obj_t* list = lv_list_create(tileM13);
// リストobjを作成(objへのpointer 新しいリストの親)
// 戻り値:作成されたリストへのpointer
lv_obj_set_size(list, LV_PCT(100), LV_PCT(100));
lv_list_add_button(list, NULL, "255");
// リストにボタン追加(リストへのpointer 新しいボタンの親,ボタンのアイコンで、
// NULLの場合はアイコンなし,新ボタンのtextで、NULLの場合はtextは追加されません)
// 戻り値:作成されたボタンへのpointer
lv_list_add_button(list, NULL, "225");
lv_list_add_button(list, NULL, "200");
lv_list_add_button(list, NULL, "175");
lv_list_add_button(list, NULL, "150");
lv_list_add_button(list, NULL, "125");
lv_list_add_button(list, NULL, "100");
// タイル21 wifiで時刻設定 ------------------------------
lv_obj_t* tileM21 = lv_tileview_add_tile(tv, 0, 1, LV_DIR_RIGHT); // 2行1列目 右のみに移動
btn = lv_button_create(tileM21);
label = lv_label_create(btn);
lv_label_set_text(label, "wifiで時刻設定 右へ");
lv_obj_set_size(btn, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
lv_obj_center(btn);
// タイル22 手動で時刻設定 ------------------------------
lv_obj_t* tileM22 = lv_tileview_add_tile(tv, 1, 1, (lv_dir_t)(LV_DIR_LEFT | LV_DIR_TOP | LV_DIR_RIGHT)); // 2行2列目 左右上に移動
btn = lv_button_create(tileM22);
label = lv_label_create(btn);
lv_label_set_text(label, "手動で時刻設定 左右上へ");
lv_obj_set_size(btn, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
lv_obj_center(btn);
// タイル23 アナログ時計表示 ------------------------------
lv_obj_t* tileM23 = lv_tileview_add_tile(tv, 2, 1, LV_DIR_LEFT); // 2行3列目 左のみに移動
btn = lv_button_create(tileM23);
label = lv_label_create(btn);
lv_label_set_text(label, "アナログ時計 左へ");
lv_obj_set_size(btn, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
lv_obj_center(btn);
lv_tileview_set_tile_by_index(tv, 1, 0, LV_ANIM_OFF); // 起動時のタイル位置
instance.setBrightness(100); // 明るさ 0-255
}
void loop() {
lv_task_handler();// lvglタスク処理は、ループ内に書く
delay(5);// 5mS待つ
}
* flash memory(3.1Mbyte)のうち、スケッチが29%使用。RAM(327kbyte)のうち、global変数が7%使用、local変数で301kbyte使用可能。(1000byte=1kbyteで計算)次のVerを使用しています。
LilyGoLib 0.1.0
FFat 3.3.5
FS 3.3.5
Wire 3.3.5
SensorLib 0.3.3
SPI 3.3.5
RadioLib 7.1.0
TinyGPSPlus 1.1.0
ESP_I2S 3.3.5
XPowersLib 0.3.1
lvgl 9.2.2
esptool 5.1.0
