LoginSignup
2
0

More than 1 year has passed since last update.

Waveshare RP2040-LCD-1.28でLovyanGFXを使う方法

Last updated at Posted at 2023-03-10

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が動くので表示はすごく簡単で便利です。
ウェアラブルなどの開発が捗りそうですな。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0