タコメータのつづき (original) (raw)

前回のタコメータ動作は、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でオブジェクトと値を指定する。