【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ライブラリを使うことでピンの設定を自動管理できるため、コードが簡潔になります。本記事を通じて、基本的な接続方法やコードの実装、トラブルシューティングを学べたのではないでしょうか。

ここまで読んでいただきありがとうございました。

スクールの紹介

最後に宣伝をさせてください。

技術で未来を切り拓く―あなたの夢を現実にするプログラミングスクール

Webデザインやプログラミングで成功を目指している方々にとって、このオンラインスクールは夢を叶えるための最適な場所です。皆さんのキャリアを次の段階へと引き上げるためにデザインされたこのスクールは、一人ひとりの成功を心から願い、それを実現するための全てを提供しています。ここでは、このスクールの魅力について詳しくご紹介します。

◆圧倒的な費用対効果
このオンラインプログラミングスクールは、Web系教育において最高の費用対効果を提供しています。多くの高額スクールが存在する中で、ここではリーズナブルな価格で、質の高い教材、無限のサポート、そして実際に市場で求められるスキルの習得機会を提供しています。

◆現役フリーランスの講師陣
講師たちは全員、現役のフリーランスプロフェッショナルです。市場で活躍している講師から直接、最新のトレンドや実践的なスキルを学べるのは、このスクールの大きな特徴です。

◆柔軟な学習コース
固定のコースがなく、学習者の興味やニーズに応じて自由に学習できます。進路変更も自由で、最低契約期間は1ヶ月という柔軟性を持っています。自分のペースで、自分に合った学習が可能です。

◆無制限の添削とサポート
理解できるまで、そして満足するまで、無制限に添削と質問への回答を提供しています。進路相談や技術面以外の相談にも対応しており、全面的にサポートします。

◆社長から学べる貴重な機会
デザイナー、プログラマー、ディレクター、マーケターとして豊富な経験を持つ社長から直接学べるのも、このスクールの特別な点です。他のスクールでは得られない、貴重な機会です。

◆実績作りへの徹底的なサポート
就職、転職、フリーランスとして成功するためには、高品質な実績が必要です。生徒の作品レベルを最大限に高め、市場で求められる実績を作り上げることに力を入れています。案件を取得できない生徒には、直接案件を提供することもあります。

◆メッセージからの約束
高額な授業料を支払わせて結果を出せないスクールとは違い、物理的なサポートは提供できないかもしれませんが、継続的な努力を通じて最高の結果を出せるようにサポートします。一緒に不正なスクールを撲滅し、あなたの夢を実現しましょう。

このプログラミングスクールは、Webデザインやプログラミングでの成功を目指す方々に必要な全てを備えています。今こそ、このコミュニティに参加し、あなたのキャリアを加速させる時です。

詳しくはこちら↓

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

この記事を書いた人

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

目次