【Arduino】ArduinoとOLEDディスプレイを使って数値を表示する方法

目次

概要

ArduinoとOLEDディスプレイを使えば、センサーから取得したデータや任意の数値を簡単に表示することができます。本記事では、Arduino Nanoと0.96インチのOLEDディスプレイを接続し、数値をディスプレイに表示する手順を紹介します。基本的なピンの接続方法からコードの実装、発生しやすいエラーとその解決方法について解説します。


ピンの配置

必要な部品

  • Arduino Nano × 1
  • 0.96インチOLEDディスプレイ(SSD1306) × 1
  • ジャンパーワイヤー × 数本
  • ブレッドボード(必要に応じて)

配線図

OLEDディスプレイピンArduino Nanoピン説明
VCC3.3V または 5V電源供給
GNDGNDグラウンド
SDAA4I2Cデータライン
SCLA5I2Cクロックライン

コード

以下のコードは、OLEDディスプレイに「100」という数値を表示するサンプルプログラムです。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// OLEDディスプレイの設定
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  // シリアルモニタの初期化
  Serial.begin(9600);

  // OLEDディスプレイの初期化
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // I2Cアドレス 0x3C を使用
    Serial.println("ディスプレイの初期化に失敗しました。接続を確認してください。");
    while (1); // 初期化に失敗した場合は停止
  }

  // 画面をクリア
  display.clearDisplay();

  // ディスプレイに「100」を表示
  display.setTextSize(2);                // テキストサイズを設定
  display.setTextColor(SSD1306_WHITE);  // テキストの色を設定
  display.setCursor(10, 20);            // テキストの表示位置を設定
  display.println("100");               // 表示する内容
  display.display();                    // 内容を画面に反映
}

void loop() {
  // ループ処理はなし(1度だけ表示)
}

A4、A5ピンをコード内に明記しない理由

Arduinoでは、I2C通信を行うピンがマイコンボードの設計によってあらかじめ決まっています。以下の理由により、コード内でA4とA5ピンを明記する必要がありません。

  1. WireライブラリがハードウェアI2Cを管理するため:
    • ArduinoのWireライブラリは、I2C通信を行うピンを自動的に認識します。NanoではI2C通信に使われるピンがA4(SDA)とA5(SCL)に固定されています。
  2. I2Cのピンがボードごとに異なる:
    • Arduino UnoやNanoではA4とA5がI2Cピンですが、Arduino MegaやESP32では異なるピンが割り当てられています。
    • Wireライブラリはこれを適切に処理するため、コードを書き換える必要がありません。
  3. コードの移植性が高くなる:
    • ハードウェアピンを明記しないことで、別のArduinoボードにコードを移植する際も動作が保証されます。

エラーと解決方法

1. ディスプレイの初期化に失敗する

エラーメッセージ:

ディスプレイの初期化に失敗しました。接続を確認してください。

原因と解決方法:

  • 原因: I2Cアドレスが異なる可能性があります。ディスプレイのデフォルトアドレスは 0x3C または 0x3D です。
  • 解決方法: 以下のI2Cスキャナコードを使い、接続されているデバイスのアドレスを確認してください。
#include <Wire.h>

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.println("I2Cアドレスをスキャン中...");

  for (byte address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0) {
      Serial.print("デバイスが見つかりました: 0x");
      Serial.println(address, HEX);
    }
  }
}

void loop() {}

2. 表示が乱れる(砂嵐のようになる)

原因: ディスプレイが正しくクリアされていない可能性があります。
解決方法: display.clearDisplay(); を各描画前に呼び出して、ディスプレイの内容をリセットしてください。

まとめ

ArduinoとOLEDディスプレイを接続することで、簡単に数値や情報を表示することができます。I2C通信では、Wireライブラリを使うことでピンの設定を自動管理できるため、コードが簡潔になります。本記事を通じて、基本的な接続方法やコードの実装、トラブルシューティングを学べたのではないでしょうか。

IT・ガジェット・電子工作の知識をこれひとつで

画像に alt 属性が指定されていません。ファイル名: KU-Assocb-2017810-640x100._V518059506_.jpg

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。

PCアプリの操作解説、最新のガジェット情報、そして電子工作の専門書まで。 Kindle Unlimitedなら、あらゆるジャンルのIT・デジタル関連書籍が読み放題です。

「仕事の効率化」から「趣味の深掘り」まで、高価な専門書をわざわざ買わずに、必要な情報をその場で引き出せるのが最大のメリット。 現在は30日間の無料体験や、対象者限定の「3ヶ月499円」プランなどが用意されています。まずはご自身のアカウントでお得なオファーが表示されるかご確認ください。

[Kindle Unlimited 読み放題プランをチェックする]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次