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