RP2040と1.28インチの丸型液晶が載った「Waveshare RP2040-LCD-1.28」でLovyanGFXを動かしてみます。
製品情報はこちら
ドライバ:GC9A01A
インターフェース:SPI
こちらのボード情報を設定しておけば、Waveshare RP2040 LCD 1.28がサポートされてるので便利
LovyanGFXを使ってみる
GC9A01ドライバに対応するLGFX作ります。
以下のベースを参考にすると楽になります。
変更点
パネルを、GC9A01に変更
// 接続するパネルの型にあったインスタンスを用意します。
lgfx::Panel_GC9A01 _panel_instance;
バスにSPIを指定
バスは、SPIを指定
lgfx::Bus_SPI _bus_instance; // SPIバスのインスタンス
各種パラメータを合わせる
ポート番号
GPIO | TYPE | REMAKRS |
---|---|---|
GP6 | IMU_SDA | I2C SDA |
GP7 | IMU_SCL | I2C SCL |
GP8 | LCD_DC | LCD Command/Data Selection |
GP9 | LCD_CS | LCD Chip Selection |
GP10 | LCD_CLK | LCD CLK |
GP11 | LCD_DIN | LCD MOSI |
GP12 | LCD_RST | LCD Rest |
GP25 | LCD_BL | LCD Backlight Control |
GP29 | BAT_ADC | Battery Voltage Acquition Pin |
バス制御の設定
auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します
cfg.pin_sclk = 10;
cfg.pin_miso = -1;
cfg.pin_mosi = 11;
cfg.pin_dc = 8;
表示パネル制御の設定
画面の解像度は、240 x 240
auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。
cfg.pin_cs = 9; // CSが接続されているピン番号 (-1 = disable)
cfg.pin_rst = 12; // RSTが接続されているピン番号 (-1 = disable)
cfg.panel_width = 240; // 実際に表示可能な幅
cfg.panel_height = 240; // 実際に表示可能な高さ
バックライト制御の設定
auto cfg = _light_instance.config();
cfg.pin_bl = 25;
cfg.pwm_channel = 1;
LGFXクラス(Waveshare RP2040-LCD-1.280)
LCDのポート等を設定したLGFXクラスは以下の通り
class LGFX : public lgfx::LGFX_Device
{
lgfx::Panel_GC9A01 _panel_instance;
lgfx::Bus_SPI _bus_instance; // SPIバスのインスタンス
lgfx::Light_PWM _light_instance;
public:
LGFX(void)
{
{ // バス制御の設定を行います。
auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。
cfg.spi_host = 1;
cfg.spi_mode = 0;
cfg.freq_write = 80000000;
cfg.pin_sclk = 10;
cfg.pin_miso = -1;
cfg.pin_mosi = 11;
cfg.pin_dc = 8;
_bus_instance.config(cfg);
_panel_instance.setBus(&_bus_instance);
}
{ // 表示パネル制御の設定を行います。
auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。
cfg.pin_cs = 9; // CSが接続されているピン番号 (-1 = disable)
cfg.pin_rst = 12; // RSTが接続されているピン番号 (-1 = disable)
cfg.panel_width = 240; // 実際に表示可能な幅
cfg.panel_height = 240; // 実際に表示可能な高さ
cfg.offset_x = 0; // パネルのX方向オフセット量
cfg.offset_y = 0; // パネルのY方向オフセット量
cfg.readable = true; // データ読出しが可能な場合 trueに設定
cfg.invert = true; // パネルの明暗が反転してしまう場合 trueに設定
_panel_instance.config(cfg);
}
{
auto cfg = _light_instance.config();
cfg.pin_bl = 25;
cfg.pwm_channel = 1;
_light_instance.config(cfg);
_panel_instance.setLight(&_light_instance);
}
setPanel(&_panel_instance); // 使用するパネルをセットします。
}
};
※同じメーカーのこちらが大変参考になりました。
https://github.com/lovyan03/LovyanGFX/blob/develop/src/lgfx_user/LGFX_RP2040_096_Waveshare_sample.hpp
動かしてみる
あとは、LovyanGFXのサンプルと上記クラスを組み合わせたらこんな感じに。
まとめ
LGFXクラスができるまで少し詰まりましたが、できたらLovyanGFXが動くので表示はすごく簡単で便利です。
ウェアラブルなどの開発が捗りそうですな。