Arduinoでディスプレイ表示!OLED LCDディスプレイSSD1306を使ってみた!

こんにちは。ケンチーです。

今回の記事では、Arduinoを使ってディスプレイ表示を方法を初心者にも分かりやすく解説したいと思います!

今回使用したディスプレイはこちら↓約800円で買えるディスプレイです↓

私自身、他のサイトの通りにやっても上手くできませんでしたが、試行錯誤した結果、ディスプレイ表示に成功することができました。

そのプロセスを解説していきたいと思います。

用意するもの

今回ディスプレイ表示をするために使用したのはこちら

・Arduino UNO
・ジャンパーワイヤー(オス-オス)×4
・ブレッドボード

Arduino display

そして、今回使用するディスプレイです。(OLED LCDディスプレイSSD1306)

もちろんパソコンやケーブルも必要ですが、そこはArduinoで必ず必要になるモノなので割愛します。

Arduinoが初めてで基本も分からないという方は下記で基本的な扱い方を紹介しているので、参考にしてみてください!

回路のつなぎ方

上記の用意するものを使って以下のように回路を繋いでみてください。

OLED LCDディスプレイ Arduino
OLED LCDディスプレイ側    Arduino側    
SDASDA
SCLSCL
VCC5V
GNDGND

互換品のArduinoには「SDA」、「SCL」と書いていないものがあるようですが、上図と同じ位置に配線にすれば上手くできます。

実際の写真だとこんな感じです。

Arduino display

ライブラリをインストール

OLED LCDディスプレイに表示させるには、3つのライブラリをインストールする必要があります。(実際にはライブラリ無しでもできますが、上級者向けなので今回は紹介しません。)

では順番にライブラリをインストールしましょう。

①Arduinoを開く

②「ツール」→「ライブラリを管理」を選択

Arduino display

③出てきたウィンドウの右上の検索窓で「Adafruit GFX Library」を検索し、インストール。

Arduino display

④同様に「Adafruit BusIO」、「Adafruit SSD1306」をインストール。

Arduino display
Arduino display

私はすでにインストールしていたので、上の画像ではインストールボタン押せなくなっていますが、皆さんはインストールできるはずです。

プログラム入力!

ではプログラムを打ち込んでいきましょう。サンプルプログラムを作ったのでコピーして使ってください。

それぞれのコードの右側に簡単な解説を書いておきました。


#include<Wire.h>             //
#include<Adafruit_GFX.h>     //ダウンロードしたライブラリをインクルード
#include<Adafruit_SSD1306.h> //
int n = 0;    //カウントする変数nを定義
Adafruit_SSD1306 display(-1);    //ディスプレイ変数の宣言
void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);    //ディスプレイの初期化
}
void loop() {
  display.clearDisplay();    //ディスプレイをクリア
  display.setTextSize(1);    //文字サイズを設定
  display.setTextColor(WHITE);    //文字色を設定
  display.setCursor(0, 0);    //文字の開始位置を設定
  display.print(n);    //変数nをディスプレイ出力するよう設定
  display.display();    //上記条件でディスプレイ表示
  delay(1000);    //1秒間待つ
  n++;    //nに1を足す
}

約1秒ごとにディスプレイに映る数字に1が足されていくプログラムです。

以上が基本的な使い方になります。

ここからは応用した使い方を紹介していきたいと思います。

決まった文字列を表示させたいとき

変数ではなく、決まった文字を表示させたい場合は「display.print(n);」の部分を

display.print("Hello, world!");

のように文字列を「””(ダブルクォーテーション)」で囲めば表示することができます。

Arduino Hello world

ちなみに日本語の表示は私の知識では出来ず、他のサイト等で調べてみたのですが、かなり難易度が高そうなので諦めました。

文字列を改行させたいとき

長い文字列を表示したいときは、改行がしたいですよね。

そんな時は「display.print」ではなく「display.println」を使いましょう。

サンプルプログラムの「display.print(n);」を以下に変えてみてください。

display.println("Hello, world!");
display.print("Thank you!");

2行に分けて表示することができます。「println」とすることで、改行することができるんですね。

Arduino Hello world

ちなみにこのディスプレイだと最大4行まで表示可能です。

文字サイズの変更

文字サイズの設定はサンプルコードの

display.setTextSize(1);

の部分で行っています。()の中に整数を入れることでその大きさに応じた文字サイズになります。

文字サイズ1〜5までで以下のようにそれぞれ比較してみました。

このディスプレイだと、文字サイズは1にするのが基本で良いと思います。

1で小さければ文字サイズ2にし、文字サイズ3、4だと少しの文字しか書けません。

文字サイズ5以上になるともう高さが足りていないことが分かります。

文字の開始位置を変更

文字の開始位置の設定はサンプルプログラムの

display.setCursor(0, 0);

の部分で行っています。(0, 0)であれば文字開始位置は左上端になります。

(x, y)のxが大きくなれば文字開始位置が右側に、yが大きくなれば下側になります。

では(20, 0)、(40, 0)、(60, 0)の場合を比較してみましょう。

x = 60の時に開始位置はほぼ画面中央になることが分かります。少し左にズレているような気がしますが、そこは微調整できます。

次にyについて、(0, 8)、(0, 16)、(0, 24)の場合を比較していきましょう。

文字サイズが1だと、y = 8が2行目、y = 16が3行目、y = 24が4行目ということが分かります。

真ん中に表示したい時はy = 12にすればいいですね。

次に文字配置位置を何回も設定するとどうなるかみてみましょう。

#include<Wire.h>
#include<Adafruit_GFX.h>
#include<Adafruit_SSD1306.h>
Adafruit_SSD1306 display(-1);
void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}
void loop() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  
  display.setCursor(0, 0);
  display.print("Kenchi-blog");
  display.setCursor(30, 12);
  display.print("Kenchi-blog");
  display.setCursor(60, 24);
  display.print("Kenchi-blog");
  display.display();
}

文字位置を設定し、書きたい文字を設定。の繰り返し。

そして最後に

display.display();

でディスプレイ表示をさせれば完了です。Arduinoに書き込めば…

Arduino display

こんな感じで不規則に並べることができます。自由度が一気に高まりますね。