AmazonでCSピンが無いLCD(ST7789)を購入したのですが、Raspberry Pi Pico(Arduino環境 earlephilhower版)で動かすのに少し苦労したので共有します。
↓Amazonのリンク
購入時は¥899でした。AliExpressでは同様の製品がもっと安く売っていますが、日本のAmazonで比較的安く購入できて喜んでいました。
Amazonでは他にも同じものとみられるLCDが800円以下で販売されていますが、上記はAmazon発送となっているので若干安心です。
※2024年8月30日時点、在庫無しになってますね。。。
※2024年9月7日時点、在庫ありです。¥899です。
仕様は240×240 1.3inch、ドライバICはST7789、CS無しです。
CSピンがないので、SPIに複数台の接続ができないのは認識していましたが、ドライバICがST7789ですので、ArduinoのAdafruitライブラリで簡単に動かせると思ったのですが、若干苦労しました。
以下が必要なライブラリになります。詳しいインストール方法などはネットにたくさん情報があるので「ST7789 Arduino」等で検索してください。
Adafruit GFX Library by Adafruit
Adafruit ST7735 and ST7789 Library by Adafruit
【接続】
LCD Pico GND - GND(38) VCC - 3.3V(36) SCL - GP18(24) SDA - GP19(25) RES - GP22(29) DC - GP28(34) BLK - 3.3V(36)
【ソース】
LCDに温度を表示します。
/*
ST7789でCSが無いLCDをRaspberry Pi Picoで動かす
LCDは以下で購入した
240x240 1.3inch CS無し
【接続】
LCD Pico
GND - GND(38)
VCC - 3.3V(36)
SCL - GP18(24)
SDA - GP19(25)
RES - GP22(29)
DC - GP28(34)
BLK - 3.3V(36)
*/
#include "Adafruit_GFX.h"
#include "Adafruit_ST7789.h"
#include "SPI.h"
#define TFT_CS -1 // CSを使用しないので-1を指定
#define TFT_RST 22
#define TFT_DC 28
Adafruit_ST7789 tft = Adafruit_ST7789(&SPI, TFT_CS, TFT_DC, TFT_RST);
int number = 0;
void setup() {
Serial.begin(115200);
delay(500);
tft.init(240, 240, SPI_MODE3); // SPI_MODE3を指定しないと動かなかった
delay(1000);
//tft.setRotation(3);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
char buf[16];
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 50);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(6);
sprintf(buf, "No.%d", number);
tft.println(buf);
double temperature = analogReadTemp();
sprintf(buf, "%.1f", temperature);
tft.println(buf);
digitalWrite(LED_BUILTIN, number % 2);
number++;
delay(1000);
}
以下の2行がポイントでした。
#define TFT_CS -1 // CSを使用しないので-1を指定
tft.init(240, 240, SPI_MODE3); // SPI_MODE3を指定しないと動かなかった