LoginSignup
3
2

ILI9431液晶を LovyanGFX v2 で使ってみる

Posted at

「ILI9431液晶を LovyanGFX で使ってみる」https://qiita.com/nanbuwks/items/5db51632ff0db894a062
の記事を書きましたが、2024年6月12日現在では通らない感じ。
LovyanGFX Ver.2 になったからかな?

改めて、作り直してみます。

インストール

Arduino ライブラリマネージャから LovyanGFX ライブラリを読み込みました。

LCD

このLCDです。
「ESP32で ILI9341 TFT液晶を動かす」
https://qiita.com/nanbuwks/items/72503cf93c5f2ed0deeb
タッチスクリーンなしのタイプです。

プログラム

LovyanGFX は自動認識機能があり、V2になって更に高度になっているようです。
しかしながらメーカー製の液晶一体タイプのようなものを使っていないときのプログラムとして、

「ファイル」-「スケッチ例」-「カスタムライブラリのスケッチ例」-「LovyanGFX 」-「HowToUse」-「2_user_setting」
を試してみます。

動きました。

#include <LovyanGFX.hpp>

// ESP32でLovyanGFXを独自設定で利用する場合の設定例

/// 独自の設定を行うクラスを、LGFX_Deviceから派生して作成します。
class LGFX : public lgfx::LGFX_Device
{
  lgfx::Panel_ILI9341     _panel_instance;
  lgfx::Bus_SPI        _bus_instance;
  lgfx::Light_PWM     _light_instance;
public:
  LGFX(void)
  {
    {
      auto cfg = _bus_instance.config();
      cfg.spi_host = VSPI_HOST;
      cfg.spi_mode = 0;
      cfg.freq_write = 40000000;
      cfg.freq_read  = 16000000;
      cfg.spi_3wire  = true;
      cfg.use_lock   = true;
      cfg.dma_channel = SPI_DMA_CH_AUTO;
      cfg.pin_sclk = 18;
      cfg.pin_mosi = 23;
      cfg.pin_miso = 19;
      cfg.pin_dc   = 17;
      
      _bus_instance.config(cfg);
      _panel_instance.setBus(&_bus_instance);
      }

    {
      auto cfg = _panel_instance.config();
      cfg.pin_cs           =    5;
      cfg.pin_rst          =    16;
      cfg.pin_busy         =    -1;
      
      cfg.panel_width      =   240;
      cfg.panel_height     =   320;
      cfg.offset_x         =     0;
      cfg.offset_y         =     0;
      cfg.offset_rotation  =     0;
      cfg.dummy_read_pixel =     8;
      cfg.dummy_read_bits  =     1;
      cfg.readable         =  true;
      cfg.invert           = false;
      cfg.rgb_order        = false;
      cfg.dlen_16bit       = false;
      cfg.bus_shared       =  true;
      
      _panel_instance.config(cfg);
    }

    {
      auto cfg = _light_instance.config();
      cfg.pin_bl = 4                                              cfg.invert = false;
      cfg.freq   = 44100;
      cfg.pwm_channel = 7;
      
      _light_instance.config(cfg);
      _panel_instance.setLight(&_light_instance);
      }
    setPanel(&_panel_instance);
}
};

LGFX display;

void setup(void)
{
  display.init();

  display.setTextSize((std::max(display.width(), display.height()) + 255) >> 8);


  display.fillScreen(TFT_BLACK);
}

uint32_t count = ~0;
void loop(void)
{
  display.startWrite();
  display.setRotation(++count & 7);
  display.setColorDepth((count & 8) ? 16 : 24);

  display.setTextColor(TFT_WHITE);
  display.drawNumber(display.getRotation(), 16, 0);

  display.setTextColor(0xFF0000U);
  display.drawString("R", 30, 16);
  display.setTextColor(0x00FF00U);
  display.drawString("G", 40, 16);
  display.setTextColor(0x0000FFU);
  display.drawString("B", 50, 16);

  display.drawRect(30,30,display.width()-60,display.height()-60,count*7);
  display.drawFastHLine(0, 0, 10);

  display.endWrite();

  int32_t x, y;
  if (display.getTouch(&x, &y)) {
    display.fillRect(x-2, y-2, 5, 5, count*7);
  }
}

これで動きました。

3
2
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
3
2