【Arduino】複数のOLEDディスプレイをArduinoに接続しようとした記録

目次

概要

Arduinoと複数のOLEDディスプレイを接続し、別々の情報を表示しようと試みた記録です。今回は2つ以上のディスプレイを接続する方法を模索しましたが、結論できませんでした。
I2C通信の特性やハードウェアの制約により実現が難しいと分かりました。本記事では、試行錯誤の内容、遭遇したエラー、そして最終的な解決策をまとめます。


試行内容

目標

  • Arduino Nanoに2つの0.96インチOLEDディスプレイを接続。
  • 各ディスプレイに異なる数値を表示(例: 1つ目に「111」、2つ目に「222」)。

接続方法

以下のように、2つのOLEDディスプレイを**同じI2Cバス(A4, A5)**に接続しました。

OLEDピンArduinoピンディスプレイ1ディスプレイ2
VCC3.3V または 5VVCCVCC
GNDGNDGNDGND
SDAA4SDASDA
SCLA5SCLSCL

遭遇したエラーと原因

エラー1: 初期化の失敗

エラーメッセージ:

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

原因:

  • 2つのディスプレイが同じI2Cアドレス(0x3C)を使用しているため、競合が発生しました。

エラー2: アドレス変更が不可能

試行:

  • ディスプレイのアドレスを変更する方法を調べましたが、使用しているディスプレイには「ADDRピン」や「ジャンパーピン」がなく、ハードウェア的にアドレスを変更できませんでした。

エラー3: ソフトウェアI2Cでの問題

試行:

  • 1つのディスプレイをソフトウェアI2C(別のArduinoピンをI2C通信に利用)で接続することを試みました。
  • 以下のように、ソフトウェアI2Cを用いるコードを書きました。
#include <SoftWire.h>
SoftWire myWire(D2, D3); // ソフトウェアI2C (SDA=D2, SCL=D3)

Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &myWire, OLED_RESET);

エラーメッセージ:

SoftWire.h: No such file or directory

原因:

  • 必要なライブラリをインストールしたものの、Adafruit SSD1306ライブラリがソフトウェアI2Cに対応していないバージョンである可能性が高いことが分かりました。

結局どうしたか

最終的に、複数のOLEDディスプレイを接続する構想をあきらめ、1つのディスプレイに複数の要素を表示する方法に切り替えました

1つのディスプレイで複数の要素を表示する際には、setCursor() を使ってテキストを複数行に配置し、それぞれの要素を更新することで目的を達成しました。以下は実際の例です。

コード例: 1つのディスプレイに複数の要素を表示

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

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    while (1);
  }
  display.clearDisplay();
}

void loop() {
  display.clearDisplay();

  // 1行目にX軸の値を表示
  display.setCursor(0, 0);
  display.print("X: ");
  display.println(111);

  // 2行目にY軸の値を表示
  display.setCursor(0, 16);
  display.print("Y: ");
  display.println(222);

  // 3行目にZ軸の値を表示
  display.setCursor(0, 32);
  display.print("Z: ");
  display.println(333);

  display.display();
  delay(500);
}

まとめ

今回の試行を通じて、以下のことが分かりました。

  1. I2Cアドレスの競合が複数ディスプレイ接続の最大の課題。
  2. アドレス変更ができないハードウェアでは、1つのI2Cバスに複数のOLEDを接続することは不可能。
  3. ソフトウェアI2Cを使う方法もライブラリやハードウェアの制約で簡単ではない。

最終結論

初めの構想では、要素ごとにディスプレイを分けて表示するつもりでしたが、それをあきらめ、1つのディスプレイに複数の要素を表示する方法に切り替えました。この方法により、無駄なハードウェアを追加することなく、目標を達成することができました。

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

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

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

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

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

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

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

この記事を書いた人

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

目次