オプションとして追加搭載する表示デバイスのコードです。Adafruit 社が提供する Arduino 向けのライブラリを使用しています。
◀ この記事の前に: 複数のMCUをつなぐ
▶ この記事の次に:
プログラムの仕様
コーディングに必要な必要な仕様は以下のとおりです。
表示の概要
- 画素数: 96 × 64 dots( RGB )
- 表示色: 65,536 Colors
ポートの割り当て
名 称 | ESP32 Pin | ESP32 ポート | 使 途 |
---|---|---|---|
OLED-SLK | 8 | IO32 / HSPICLK | クロック |
OLED-SDA | 9 | IO33 / HSPID | データ |
OLED-DC | 27 | IO16 | データとコマンドの指示( 選択 ) |
OLED-RES | 26 | IO4 | リセット |
OLED-CS | ( 6 ) | ( IO34 ) | デバイスの選択 |
OLED に接続している SPIは OLEDのみのため、CSは Gndに固定しています。常に OLEDを選択している状態です。ESP32と接続していませんが、ダミーの出力として Pin.6 を指定しています。Pin.6 は電源電圧検出用のADC 入力で出力には影響がありません。●
コードの出力ポートの定義は、ESP32 ポートの番号で指定します。( 例:const uint8_t OLED_SLK = 32; )
Adafruit_SSD1331ライブラリの仕様
Adafruit_SSD1331( Adafruit_SSD1331 )ライブラリの仕様は以下のとおりです。
- SSD1331 OLED ディスプレイドライバ
- 128×96 ピクセルの解像度、16ビットカラー( RGB565フォーマット )
- SPI インタフェース
- グラフィックス表示用の Adafruit_GFXライブラリと連携
ライブラリ: Adafruit SSD1331 Arduino Library
ライブラリのインクルード
使用するライブラリは以下のとおりです。
Adafruit_GFX は Adafruit_SSD1331 から参照されるライブラリです。表示デバイスの抽象化をおこない、点や線、円などの描画、塗りつぶしなどを行います。テキストのフォントサイズの変更や色の変更もできます。Adafruit_SSD1331.h は前項のとおり、SPI.h は SPI通信を行うライブラリです。
ライブラリ: Adafruit-GFX-Library
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1331.h>
#include <SPI.h>
データの構造
データの構造は以下のとおりです。
グローバル定義
グローバル定義は以下のとおりです。
名 称 | 型 | 値 | 説 明 |
---|---|---|---|
OLED_HEIGHT | int | 64 | 表示のピクセル数( 縦方向 ) |
OLED_WIDTH | int | 96 | 表示のピクセル数( 横方向 ) |
コード
コードは以下のとおりです。
オブジェクト
SPI はピン割り当ての都合上、ハードウエア SPIを使用できませんのでソフトウエア SPIにします。そのため、オブジェクトの生成は以下のとおりです。ハードウエア SPIとソフトウエア SPIは、オブジェクト生成時の引数の取り方が異なります。ソフトウエア SPIはすべてのピンを引数で指定します。( ハードウエア SPIは、DC, CS, RES の制御線だけの指定です。)
//==============================================================================
// object
//==============================================================================
//---- OLED ----
Adafruit_SSD1331 display = Adafruit_SSD1332( OLED_CS, OLED_DC, OLED_SDA, OLED_SLK, OLED_RES );
内部関数
外部から直接アクセスできずモジュール( 特定のスコープ内 )で使用する関数です。
setup() 内
display.begin() で表示デバイスの使用開始で、以降はコマンド(メソッド)により表示をおこないます。
以下の例は、開始後に全面黒色として、後から display.drawRGBBitmap()で画像を表示しています。表示する画像は Img_TESTです。
void setup(void) {
・・・
/* Initialize Display */
display.begin();
display.fillScreen( BLACK );
・・・
display.drawRGBBitmap( 0, 0, Img_TEST, OLED_WIDTH, OLED_HEIGHT );
delay(1000);
}
描画
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- 表示デバイス( オプション ): 表示デバイス OLEDのハードウエアの仕様です。
他のWebサイト
- SSD1331: datasheet / SUNHOKEY Electronics Co.,Ltd.
- [SSD1331]SPI初期化処理: SSD1331 の詳細かつとても分かりやすい説明です / Analogic Intelligence
- ArduinoでOLEDディスプレイを試す: OLEDディスプレイをArduinoで使用する手順 / Qiita @jakalada
- ArduinoだけでOLED SSD1331に画像を表示する方法: OLED SSD1331を使用した事例 / Qiita @osobono
- Arduino UNOとカラーOLED SSD1331で遊ぶ: OLED SSD1331を使用した事例 / Qiita caa45040
- Adafruit_GFXのメソッド: Adafruit_GFXクラスのメソッドの一覧表 / PukiWiki 1.5.1
- フルカラー OLED SSD1331 を ESP32 ( ESP-WROOM-32 )で動かしてみた: mgo-tec
- SPI接続でフルカラーOLEDモジュールを使う(SSD1331): / たまねぎブログ