SPI 接続のLCDを使いたいので、ライブラリ Adafruit_ST7735 のソースコードを読んで使い方を調べてみました。
CからAPIを使いたい的な観点から調査しました。
まとめ
- ライブラリはC++のクラスとして実装
- Adafruit_ST7735クラスはAdafruit_GFXの派生クラスとなっており、ST7735特有の処理のみを実装している。
- Adafruit_GFXから呼ばれるのは
fillScreen(),drawPixel(),fillRect(),setRotation(), です。 - LCDライブラリとしては、点、矩形の描画APIを用意すれば良い。
- ビットマップ描画、斜め線の描画、フォント描画などは、点描画のAPIを使ってAdafruit_GFXで実装されている。
- ST7735の描画コマンドは、矩形選択と色設定を使う。
調査対象
- Adafruit-ST7735-Library
- https://github.com/adafruit/Adafruit-ST7735-Library
- LCD
- 1.8" Color TFT LCD display with MicroSD Card Breakout - ST7735R
- https://www.adafruit.com/product/358
APIリスト
- Adafruit_ST7735クラスはAdafruit_GFXの派生クラス
- コンストラクタ
- Adafruit_ST7735(int8_t CS, int8_t RS, int8_t SID, int8_t SCLK, int8_t RST = -1);
- Adafruit_ST7735(int8_t CS, int8_t RS, int8_t RST = -1);
- メソッド
- initR(uint8_t options = INITR_GREENTAB), // for ST7735R
- setAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1),
- pushColor(uint16_t color),
- fillScreen(uint16_t color),
- drawPixel(int16_t x, int16_t y, uint16_t color),
- drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
- drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
- fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
- setRotation(uint8_t r),
- invertDisplay(boolean i);
- uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
以下で各APIの説明をする。
Adafruit_ST7735()
- ピンの情報を設定してクラスを生成
initR()
- 初期化用のコマンドをSPIで送信して初期化する。
- optionsでLCDコントローラのタイプを指定可能。液晶保護シートに緑のタブが付いていたら、GREENTAB、黒のタブが付いていたらBLACKTABを指定する。
setAddrWindow()
- x0, y0, x1, y1 で矩形を設定
- ST7735_CASETコマンドとST7735_RASETで設定
- Adafruit_GFXからは呼ばれない。
pushColor()
- setAddrWindow()で指定した後で、その領域を色colorで描画
- 色の値はColor565()で取得
- Adafruit_GFXからは呼ばれない。
fillScreen()
- 画面全体を色colorに描画
- fillRectを呼んでいる。
void Adafruit_ST7735::fillScreen(uint16_t color) {
fillRect(0, 0, _width, _height, color);
}
drawFastVLine
- 座標 x, y に高さh、色colorの線を描画
- Adafruit_GFXからは呼ばれない。
drawFastHLine
- 座標 x,y に幅w、色colorの線を描画
- Adafruit_GFXからは呼ばれない。
fillRect
- 座標x0, y0, x1, y1 で色colorの矩形領域を描画
setRotation
- 画面を回転 0,1,2,3はそれぞれ0, 90, 180, 240度回転
invertDisplay
- 画像を反転
- Adafruit_GFXからは呼ばれない。
色の値
- R, G, Bから16bitの色の値を取得
斜めの線を描画するメソッドdrawLine()、などその他のメソッドはAdafruit_GFXで定義されている。
参考
- ST7735R の仕様書も読んだ方が良いです。 10 Command にコマンドの説明があります。
- https://cdn-shop.adafruit.com/datasheets/ST7735R_V0.2.pdf
- tutorial
- https://learn.adafruit.com/1-8-tft-display
- Adafruit_GFX
- https://github.com/adafruit/Adafruit-GFX-Library