いんくらyochさんの日記

興味あることの忘備録

タコメータのつづき

前回のタコメータ動作は、png画像を60枚用意して、切り替える方法で表示させていたが、いろいろ調べるとスプライトやLVGLを利用すると文字盤と針だけで動作できることがわかった。
そこで新たにLVGLを使って表示させるのを試してみた。
LVGLはSquareLine Studioを使うと簡単そうに見えたので、こちらを使用した。
SquareLine Studioを起動させ、新規プロジェクトでArduinoを選択、画面サイズを240x240のCircleとし、AssetsにInkscapeからエクスポートした文字盤を針を放り込むと、ドラッグ&ドロップでSCREENに重ねるだけ。

あとはテンプレートプロジェクトでエクスポートするとArduinoのライブラリとコードが出力されて、びっくりするほど簡単だった。
ビルドはArduinoIDEはコンパイルが遅いので、VSCodeでPlatformIOを使用している。
PlatformIOでエクスポートしたコードを取り込むには、PlatformIOのインポートプロジェクトでボード選択後にinoファイルを取り込み、生成されたプロジェクトフォルダのlibにライブラリを移すのみ。
WaveShareのボードは出てこないので、ユーザフォルダにある.platformio内にあるjsonファイルを複製後修正したのを利用した。
あと、TFT_eSPIの定義ファイルも、WaveShareのWikiだと古いバージョンのzipを使用する手順になっていたので、最新版でUser_Setup.hを修正して利用した。
■User_Setup.hの変更場所

//#define ILI9341_DRIVER       // Generic driver for common displays
#define GC9A01_DRIVER

#define TFT_WIDTH  240 // ST7789 240 x 240 and 240 x 320
#define TFT_HEIGHT 240 // GC9A01 240 x 240

#define TFT_MISO -1
#define TFT_MOSI 11
#define TFT_SCLK 10
#define TFT_CS   9  // Chip select control pin
#define TFT_DC   8  // Data Command control pin
#define TFT_RST  12
#define TFT_BL	40
#define TFT_BACKLIGHT_ON HIGH

// #define SPI_FREQUENCY  27000000
#define SPI_FREQUENCY  80000000

#define USE_HSPI_PORT

ui.inoは、loopのところでlv_img_set_angleで針のオブジェクトと角度を指定してやると、動かすことができた。
角度の指定は0.1度単位となっている。

左が前回、右がLVGLでの表示

Arcを設定して目盛りの帯も付けてみた。
帯はlv_arc_set_valueでオブジェクトと値を指定する。