はじめてのMKR ZERO (7) 透過OLEDディスプレイ①
SpartFunのTransparent Graphical OLED Breakoutは、表示部分がほぼ透明なのが特徴のOLEDグラフィック表示器です。表示色は水色です。SPIとI2Cのインターフェースを搭載しています。
●Transparent Graphical OLED Breakoutのおもな特徴
- 電源電圧 1.65~3.3V
- 電流 全ドットON時400mA以下
- 表示ドット 128×64ピクセルのうち128×56が透過
- 表示面積 35.5×18mm
- インターフェース 400kHz I2C, 10MHz SPI
- I2Cスレーブ・アドレス 0x30(デフォルト)、0x31
●ドライバ、ライブラリの構成
三つのライブラリから構成されています。
- HyperDisplay Graphics Library
- SSD1309 HyperDisplay Mid Level Library
- Transparent Graphical Bottom Level Library
●接続
SPI接続を選びました。JP1~JP4は、デフォルトではすべてつながっていますが、ナイフの刃先で銅箔を切断しました。
OLED | MKRZERO |
---|---|
CS | 7 |
D/C | 6 |
SCLK | SCK |
MOSI | MOSI |
3V3 | Vcc |
GND | GND |
●ライブラリのダウンロード
からダウンロードします。解凍すると下記の三つのフォルダができます。
- SparkFun_HyperDisplay
- HyperDisplay_SSD1309_ArduinoLibrary
- HyperDisplay_UG2856KLBAG01_ArduinoLibrary
これらを、ドキュメント-Arduino-librariesフォルダにコピーします。Arduino IDEをいったん終了して再度起動します。
サンプル例は、SparkFun Transparent Graphical - Example1_DisplayTestを読み込みます。
CS_PINとDC_PINを接続したピン番号に変更し、USE_SPIを1にします。
コンパイル、実行すると、SpartFunのロゴを表示し、ラインや円、四角の描画のデモを繰り返します。
●独自にスケッチを書く
print()とcircle()を使いました。
// By: Owen Lyke SparkFun Electronics Date: February 26, 2019
#include "HyperDisplay_UG2856KLBAG01.h"
// Your library can be installed here: http://librarymanager/All#SparkFun_Transparent_Graphical_OLED
// The rest of the Layer Cake: http://librarymanager/All#SparkFun_HyperDisplay_SSD1309
// http://librarymanager/All#SparkFun_HyperDisplay
#define SERIAL_PORT Serial
#define WIRE_PORT Wire // Used if USE_SPI == 0
#define SPI_PORT SPI // Used if USE_SPI == 1
#define CS_PIN 7 // Used only if USE_SPI == 1
#define DC_PIN 6 // Used only if USE_SPI == 1
UG2856KLBAG01_SPI myTOLED; // Declare a SPI-based Transparent OLED object called myTOLED
uint8_t color = 0x01;
uint8_t noColor = 0x00;
void setup() {
Serial.begin(9600);
Serial.println("Example1_DisplayTest: Transparent Graphical OLED");
SPI_PORT.begin();
myTOLED.begin(CS_PIN, DC_PIN, SPI_PORT); // Begin for SPI requires that you provide the CS and DC pin numbers
myTOLED.clearDisplay();
}
int i = 0; int j = 0;
void loop() {
i += 1;
Serial.println(i);
myTOLED.setTextCursor(i,i);
myTOLED.print("AAAAAAAA");
myTOLED.circle(100-i, 50-j, 12, false, (color_t)&color);
delay(2);
myTOLED.circle(100-i, 50-j, 12, false, (color_t)&noColor);
delay(1);
if (i>32) {
i = 0; j += 1;
delay(1);
}
}
実行中の様子です。文字は表示できませんでした。HyperDisplayのコマンドはこちらのページが詳しいです。