11_OLED
OLEDに文字を表示する
OLEDディスプレイに「Hello ESP32 CherryIoT」と表示します。
準備する
CherryIoTとモジュールを接続する
CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。
OLEDモジュール
接続先:A
Arduino IDEに必要なライブラリをインストールする
このサンプルでは、次のライブラリを追加する必要があります。
- Adafruit GFX Library
- Adafruit SSD1306
初めて使用する場合のみインストールしてください。
ライブラリをインストールするサンプルコード
GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。
GitHubからコードを読み込んでいます...プログラムを書き込む
上のサンプルコードをコピーし、Arduino IDEに貼りつけます。
ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。
初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。
動作確認
OLEDに「Hello」「ESP32」「CherryIoT」が3行で表示されるなら成功です。
コードの解説
Adafruit SSD1306ライブラリで画面を初期化し、文字サイズと位置を指定して描画します。
GitHubからコードを読み込んでいます...#include <Wire.h>OLEDとI2C通信を行うため、Wireライブラリを読み込みます。I2Cは、SDAとSCLの2本の信号線でデータをやり取りする通信方式です。
#include <Adafruit_GFX.h>OLEDへ文字や図形を描く基本機能を使うため、Adafruit GFXライブラリを読み込みます。
#include <Adafruit_SSD1306.h>SSD1306方式のOLEDを操作するため、Adafruit SSD1306ライブラリを読み込みます。
#define SCREEN_WIDTH 128OLEDの横幅128ピクセルを、SCREEN_WIDTHという名前で定義します。ピクセルは画面を構成する小さな点です。
#define SCREEN_HEIGHT 64OLEDの縦幅64ピクセルを、SCREEN_HEIGHTという名前で定義します。
#define OLED_RESET -1OLED専用のリセット端子を使わないことを示す-1を、OLED_RESETとして定義します。
#define SCREEN_ADDRESS 0x3COLEDのI2Cアドレス0x3Cを、SCREEN_ADDRESSとして定義します。I2Cアドレスは、通信相手を識別するための番号です。
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);画面サイズ、I2C通信に使うWire、リセット設定を指定し、OLEDを操作するdisplayオブジェクトを作ります。以降はdisplayに命令を書くことで画面を操作できます。
void setup()setup関数は電源を入れたときやリセットしたときに1回だけ実行されます。このサンプルでは、OLEDの初期設定と文字の表示をすべてsetup関数内で行います。
Wire.begin(1, 3);コネクタAのSDAに対応するGPIO1と、SCLに対応するGPIO3を指定してI2C通信を開始します。OLEDへ表示データを送るために必要です。
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {指定したI2CアドレスのOLEDを初期化します。先頭の!は結果を反転する記号で、初期化に失敗した場合に直後の処理を実行します。
for(;;);初期化に失敗した場合は、終了条件のないfor文で処理を止めます。OLEDを使用できない状態で、その先の表示処理へ進まないためです。
display.clearDisplay();メモリー上に用意されている画面データを消去します。前の表示内容が残らないよう、文字を書く前に画面を空にします。
display.setTextSize(2);表示する文字の大きさを2倍に設定します。
display.setTextColor(SSD1306_WHITE);文字色を白に設定します。白黒OLEDでは、白に指定した部分の画素が点灯します。
display.setCursor(0, 5);文字を書き始める位置を、画面左端から0ピクセル、上端から5ピクセルに設定します。
display.print(F("Hello"));現在の位置へ「Hello」と書き込みます。Fは文字列をプログラム用メモリーに置き、動作用メモリーの使用量を抑えるための指定です。
display.setCursor(0, 25);次の文字を書き始める位置を、左端から0ピクセル、上端から25ピクセルに移動します。
display.print(F("ESP32"));現在の位置へ「ESP32」と書き込みます。
display.setCursor(0, 45);3行目の文字を書き始める位置を、左端から0ピクセル、上端から45ピクセルに移動します。
display.print(F("CherryIoT"));現在の位置へ「CherryIoT」と書き込みます。
display.display();メモリー上に作成した画面データをOLEDへ送り、実際の画面に表示します。ここまでのprintだけではOLEDは更新されないため、この命令が必要です。
void loop()loop関数はsetup関数のあとに繰り返し実行されますが、このサンプルでは中に処理がありません。setup関数で表示した文字を、そのまま画面に残します。