概要
Arduinoと複数のOLEDディスプレイを接続し、別々の情報を表示しようと試みた記録です。今回は2つ以上のディスプレイを接続する方法を模索しましたが、結論できませんでした。
I2C通信の特性やハードウェアの制約により実現が難しいと分かりました。本記事では、試行錯誤の内容、遭遇したエラー、そして最終的な解決策をまとめます。
試行内容
目標
- Arduino Nanoに2つの0.96インチOLEDディスプレイを接続。
- 各ディスプレイに異なる数値を表示(例: 1つ目に「111」、2つ目に「222」)。
接続方法
以下のように、2つのOLEDディスプレイを**同じI2Cバス(A4, A5)**に接続しました。
OLEDピン | Arduinoピン | ディスプレイ1 | ディスプレイ2 |
---|---|---|---|
VCC | 3.3V または 5V | VCC | VCC |
GND | GND | GND | GND |
SDA | A4 | SDA | SDA |
SCL | A5 | SCL | SCL |
遭遇したエラーと原因
エラー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);
}
まとめ
今回の試行を通じて、以下のことが分かりました。
- I2Cアドレスの競合が複数ディスプレイ接続の最大の課題。
- アドレス変更ができないハードウェアでは、1つのI2Cバスに複数のOLEDを接続することは不可能。
- ソフトウェアI2Cを使う方法もライブラリやハードウェアの制約で簡単ではない。
最終結論
初めの構想では、要素ごとにディスプレイを分けて表示するつもりでしたが、それをあきらめ、1つのディスプレイに複数の要素を表示する方法に切り替えました。この方法により、無駄なハードウェアを追加することなく、目標を達成することができました。
ここまで読んでいただきありがとうございました。
スクールの紹介
最後に宣伝をさせてください。
技術で未来を切り拓く―あなたの夢を現実にするプログラミングスクール
Webデザインやプログラミングで成功を目指している方々にとって、このオンラインスクールは夢を叶えるための最適な場所です。皆さんのキャリアを次の段階へと引き上げるためにデザインされたこのスクールは、一人ひとりの成功を心から願い、それを実現するための全てを提供しています。ここでは、このスクールの魅力について詳しくご紹介します。
◆圧倒的な費用対効果
このオンラインプログラミングスクールは、Web系教育において最高の費用対効果を提供しています。多くの高額スクールが存在する中で、ここではリーズナブルな価格で、質の高い教材、無限のサポート、そして実際に市場で求められるスキルの習得機会を提供しています。
◆現役フリーランスの講師陣
講師たちは全員、現役のフリーランスプロフェッショナルです。市場で活躍している講師から直接、最新のトレンドや実践的なスキルを学べるのは、このスクールの大きな特徴です。
◆柔軟な学習コース
固定のコースがなく、学習者の興味やニーズに応じて自由に学習できます。進路変更も自由で、最低契約期間は1ヶ月という柔軟性を持っています。自分のペースで、自分に合った学習が可能です。
◆無制限の添削とサポート
理解できるまで、そして満足するまで、無制限に添削と質問への回答を提供しています。進路相談や技術面以外の相談にも対応しており、全面的にサポートします。
◆社長から学べる貴重な機会
デザイナー、プログラマー、ディレクター、マーケターとして豊富な経験を持つ社長から直接学べるのも、このスクールの特別な点です。他のスクールでは得られない、貴重な機会です。
◆実績作りへの徹底的なサポート
就職、転職、フリーランスとして成功するためには、高品質な実績が必要です。生徒の作品レベルを最大限に高め、市場で求められる実績を作り上げることに力を入れています。案件を取得できない生徒には、直接案件を提供することもあります。
◆メッセージからの約束
高額な授業料を支払わせて結果を出せないスクールとは違い、物理的なサポートは提供できないかもしれませんが、継続的な努力を通じて最高の結果を出せるようにサポートします。一緒に不正なスクールを撲滅し、あなたの夢を実現しましょう。
このプログラミングスクールは、Webデザインやプログラミングでの成功を目指す方々に必要な全てを備えています。今こそ、このコミュニティに参加し、あなたのキャリアを加速させる時です。
詳しくはこちら↓