見出し画像

[電子工作] Seeeduino XIAOでWaveshare 1.28インチ丸形LCDを駆動

https://www.waveshare.com/wiki/1.28inch_LCD_Module

Waveshare 1.28インチ丸形LCDは、SPIを使用して使用するものですが、上記リンクのサンプルソースコードに不具合があり、XIAOから、使えずにいました。色々、試行錯誤した結果、サンプルソースコードを動かすことに成功しました。
まず、XIAOとLCDとの結線は、下記とします。

XIAO Pin  3: CS
XIAO Pin  4: DC
XIAO Pin  5: DC
XIAO Pin  6: BL
XIAO Pin  8: CLK
XIAO Pin 10: DIN
XIAO 3V3: VCC
XIAO GND: GND

上記からダウンロードした…\Arduino\LCD_Module_code\Arduino\LCD_1inch28にあるサンプルソースコードの変更箇所は、下記になります

スケッチファイルLCD_1inch28.inoのsetup()関数内で、LCD_Init(); Config_Init();の順に呼んでいるのが逆で、Config_Init(); LCD_Init();の順に変更します。変更をしないと、SPI.begin()が、Config_Init();の中で呼ばれているため、LCD_Init()内で呼ばれるSPIのAPIの実行が、SPI.begin()が呼ばれる前に起てしまい、ハングするようです。但し、純正Arduinoだと、その辺は、いい加減なのかもしれません。

さて、DEV_Config.cppの中のマクロ定義を下記にします。

/** 
* GPIO config
**/
#define DEV_CS_PIN  3
#define DEV_DC_PIN  4
#define DEV_RST_PIN 5
#define DEV_BL_PIN  6

更に、同ファイルの関数Config_Init()に、下記の修正を行います。

void Config_Init()
{
  GPIO_Init();

  //Serial
  Serial.begin(115200);

  SPI.begin();  // 追加。SPIを呼び出す前に、これを呼び出す必要がある

  //spi
  SPI.setDataMode(SPI_MODE3);
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  //SPI.begin();   // コメントアウト
}

以上の修正で、下記写真の結果が得られました。

修正後の実行結果

TBD

この記事が気に入ったらサポートをしてみませんか?