Arduinoの基礎 - ST7735
ナビゲーションに移動
検索に移動
概要
接続
ArduinoとST7735の一般的な接続方法を以下に示す。
SCLとSDAはハードウェアSPIを使用するため、指定のピンを使用する必要がある。
RESET、D/C、CSは任意のデジタルピンに接続可能であるが、下表上に示すような組み合わせが一般的である。
もし、ST7735に背景光用のLEDピンがある場合、適切な抵抗を介して任意のデジタルピンに接続できる。
ST7735 | Arduino R3 / R4 | 補足 |
---|---|---|
SCL (SCLK) | Pin 13 | SPI SCK |
SDA (MOSI) | Pin 11 | SPI MOSI |
RESET | Pin 9 | 任意のデジタルピン |
D/C | Pin 8 | データ / コマンド、任意のデジタルピン |
CS | Pin 10 | SS、任意のデジタルピン |
回路図
必要なライブラリ
ST7735を動作させるのに必要なライブラリを以下に示す。
- Adafruit ST7735 and ST7789 Library
- Adafruit GFX Library
- Adafruit BusIO
上記のライブラリのインストール手順を以下に示す。
- Arduino IDEのメインメニューから[ツール] - [ライブラリを管理...]を選択する。
- ライブラリマネージャーの検索欄にそれぞれ、"Adafruit ST7735"、"Adafruit GFX"、"Adafruit BusIO"と入力する。
- 各ライブラリの[インストール]ボタンを押下する。
- 依存ライブラリのインストールが求められる場合は、[すべてインストール]を選択する。
使用例
ピンの定義
// ライブラリのインクルード
#include <Adafruit_GFX.h> // グラフィックス描画用ライブラリ
#include <Adafruit_ST7735.h> // ST7735専用のドライバライブラリ
#include <SPI.h> // SPI通信用ライブラリ
// ピンの定義
#define TFT_CS 10 // チップセレクト用ピン (任意のGPIOピン)
#define TFT_RST 9 // リセット用ピン (任意のGPIOピン)
#define TFT_DC 8 // データ / コマンド切り替え用ピン (任意のGPIOピン)
ディスプレイオブジェクトの初期化
// ディスプレイオブジェクトの初期化
// 引数 : CS, DC, RSTの各ピン番号
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// カラー定義 (一般的に使用される色)
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
ディスプレイの初期化
下表に、Adafruit_ST7735::initR
メソッドで使用できる引数を示す。
もし、不確かな場合は、各引数を試して正しい表示になるものを選択することもできる。
誤った引数を使用する場合、色の反転、あるいは、表示位置がずれる可能性がある。
引数 | ディスプレイタイプ | 補足 |
---|---|---|
INITR_BLACKTAB | 1.8インチ (黒タブ) | 一般的な1.8インチディスプレイ |
INITR_GREENTAB | 1.8インチ (緑タブ) | 色の初期化が異なる1.8インチディスプレイ |
INITR_REDTAB | 1.8インチ (赤タブ) | オフセット設定が異なる1.8インチディスプレイ |
INITR_MINI160x80 | 0.96インチ | 160x80ピクセルの小型ディスプレイ |
INITR_MINI160x80_PLUGIN | 0.96インチ | プラグイン基板用の160x80ピクセル |
識別方法 1
- ディスプレイの背面やフレキケーブルの色 (タブの色) を確認
- ディスプレイサイズを測定 (0.96インチ、1.8インチ等)
- 解像度を確認 (160x80、160x128等)
// シリアル通信の開始 (デバッグ用)
Serial.begin(9600);
// ディスプレイの初期化
// 1.8インチ黒タブの場合
tft.initR(INITR_BLACKTAB); // ディスプレイタイプの設定
// 0.96インチの場合
// tft.initR(INITR_MINI160x80);
// 画面の向きを設定 (必要に応じて)
tft.setRotation(1); // 0〜3の値で90度ずつ回転
// 画面クリアと背景色の設定
tft.fillScreen(BLACK);
// 初期テキスト設定
tft.setTextColor(WHITE);
tft.setTextSize(1);
テキストの表示
// テキストの表示
tft.setCursor(0, 0);
tft.println("Hello World!");
図形の描画
// 四角形の描画
tft.drawRect(10, 30, 50, 30, WHITE); // 空の四角形
tft.fillRect(70, 30, 50, 30, RED); // 塗りつぶされた四角形
// 円の描画
tft.drawCircle(35, 90, 20, BLUE); // 空の円
tft.fillCircle(95, 90, 20, GREEN); // 塗りつぶされた円
// 線の描画
tft.drawLine(10, 120, 110, 120, YELLOW); // 直線
// 1秒待機
delay(1000);
ヘルパー関数の定義
ST7735を使用する上で、ヘルパー関数を定義すると便利である。
// テキストの表示
void displayText(const char* text, uint16_t x, uint16_t y, uint16_t color)
{
tft.setCursor(x, y);
tft.setTextColor(color);
tft.println(text);
}
// 画面の消去 (背景色を黒色で消去する場合)
void clearScreen()
{
tft.fillScreen(BLACK);
}
// 四角形内にテキストを中央揃えで表示
void drawCenteredText(const char *text, int x, int y, int w, int h, uint16_t color)
{
int16_t x1,
y1;
uint16_t w1,
h1;
tft.getTextBounds(text, 0, 0, &x1, &y1, &w1, &h1);
tft.setCursor(x + (w - w1) / 2, y + (h - h1) / 2);
tft.setTextColor(color);
tft.print(text);
}