I2CバスでOLED(有機EL)のドットディスプレイを Arduinoに接続したが、まったく何も表示されず、画面は真っ暗なままだった。
こういうとき、一番考えられるのは、I2Cのアドレスが一致していないことである。
スケッチのコードを見ると…
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
となっていて、プログラムではアドレスが0x3Dが指定されている。
デバイス側のI2Cのアドレスが3Dであるかどうかを確認しなくてはならない。
確認方法は色々考えられる。
2.が正統派と思うが、ここでは、知っておくと非常に便利なI2Cのアドレス・スキャナについて説明しよう。
そのものズバリの、 i2c_scanner というとても便利なツールが用意されているので、とりあえず入れておこう。
Scanning... I2C device found at address 0x3C ! done
ということで、デバイスのアドレスは3Cであったので、プログラム側のアドレス指定を3Cに変更して動かしたのであった。
じつは、もう1つ入手していたので、2つ並べてI2Cバスに繋いで動かしてみたら、こうなった。
購入したままの状態で、2つのアドレスはどちらも3Cになっているため、まったくおなじ表示になった。
さて、せっかく2つあるのだから、それぞれ別々の内容を表示しなければ面白くない。
ということで、1つのアドレスを3Dに変更することにした。
デバイスの裏側は、こんな風になっていた。
左上に、IIC ADRESS SELECT とあって、 左側に0x78、右側に0x7Aと印刷されている。
3つに分かれていて、この写真では、0x78側と中央が小さな部品で繋がれているように見える。
あまりにも小さい部品であるが、これが「チップ抵抗」のはずで、ジャンパになっているため相当抵抗値は低いはずだ。
それで、つい測定してみたら4.7kΩで、チップ抵抗の数字 472 と一致した。
これを右にずらして、ハンダ付けしなおした。
あまりにも小さいので、上手にやらないといけない。
抵抗の両端のハンダを溶かした状態のままハンダゴテで右に押して移動してから上手に離すと何とかなる。
あまりにも小さい部品なので、落としたりすると探すのが大変になりそうだ。