2.42インチOLED(有機ELディスプレイ)をSPI接続からI2C接続に変更

ネット通販で購入したSSD1309搭載の2.42インチOLED(有機ELディスプレイ)の接続インターフェースを基板裏面のランドパターンを使ってSPIからI2Cに変更した際のメモです。

目次

ネット通販で購入したOLEDの仕様

下記表No.1の2.42インチOLEDをSPI接続からI2C接続に変更しました。No.2は当サイトで利用実績のあるI2C接続の0.96インチOLEDです。

#サイズ
発光色
解像度接続方式ドライバーIC電源電圧
(V)
12.42インチ
黄色
128×64I2Cに設定変更
※デフォルトはSPI
SSD13093.3
20.96インチ
青色
128×64I2CSSD13063.3〜5.0

2.42インチOLEDをI2C接続に変更(R8、R9、R10、R11、R12)

2.42インチのOLEDはSPI接続がデフォルトでした。転送速度はSPIが高速ですが、時計や温度、気圧、CO2濃度などの表示用途なので、配線数が少ないI2C接続に変更しました。

購入したネット通販サイトではR3、R4、R5でSPIとI2Cを切り替えると説明書きがあったのですが、届いた基板裏面には切替用ランドパターンとしてSPI(R8)とI2C(R9)のシルク印刷が設けられていたので、旧製品?の説明と思われます。

基板裏面のシルク印刷通りにSPI側にはんだ付けされていた0Ωのチップ抵抗R8を取り外してI2C側にR9としてはんだ付けし直しました。しかし、これだけではI2Cアドレスは検出されず、スケッチを実行しても画面には何も表示できませんでした。

2.42インチOLED
(1)抵抗R8(0Ω)を I2C側のR9に移動

なお、0.96インチOLEDと一緒にI2Cバスにつないでスケッチを実行すると2.42インチOLED側にも表示できるのですが、時折ノイズを拾った時のように画面表示がちらつく(ジャンパーワイヤを指で強く掴むと治まる)など動作が不安定でした。

2.42インチOLED基板の裏面には白文字のシルク印刷で「IIC:R9、R10、R11、R12」と書かれていますが、フラットフレキシブルケーブル(FFC)の下に隠れているR10、R11、R12用のランドパターンには抵抗が実装されていません。

FFCをロックしている基板コネクタ両サイドの爪をスライドして(ロックを外して)FCCを引き出します。R10、R11、R12のランドパターンをはんだメッキ線をはんだ付けしてつなぎます。最後に、FFCを基板コネクタに差込んで両サイドの爪をスライドして元通りにFFCをロックして作業完了です。

I2Cアドレスを検知できるようになり、2.42インチOLED単独でも安定して画面表示できるようになりました。

この改造は自己責任で行いました。I2C接続で画面表示できるようになりましたが、今回の手順が正しい保証はありません。基板上のチップ抵抗両端のはんだを溶かして剝がすなど細かな作業となるので、先が細い半田こてやピンセットなどが必要です。

2.42インチOLED
(2)加えて、R10、R11、R12用のランドパターンをショート

2つのOLEDのI2Cアドレスを確認

ArduinoサイトにあるI2CアドレスをスキャンするスケッチArduino Playground – I2cScannerを実行したところ、0.96インチOLED、I2C接続に改造後の2.42インチOLEDともに「0x3C」でした。

u8gやu8g2のスケッチでは、ディスプレイのI2Cアドレスを明示しなくても動作します。リファレンスを読むと「デフォルトではU8g2はディスプレイの可能な限り低いI2Cアドレスを想定しています」との記載があります。指定する場合は、u8g2であれば「u8g2.setI2CAddress(0x3C *2);」のアドレス部分を変更します。

setI2CAddress | u8g2reference

https://github.com/olikraus/u8g2/wiki/u8g2reference#seti2caddress

各モジュールのI2CのアドレスとSCLとSDAのピン番号のメモです。

#モジュールI2C アドレスI2C ピンアサイン
SCL
I2C ピンアサイン
SDA
12.42インチ OLED
(I2Cに変更)
0x3C 印字(SCK)印字(SDA)
20.96インチ OLED0x3C※
(0x3Dに変更可能)
印字印字

※0.96インチOLEDのIPアドレスは、基板裏面のシルク印刷は 0x78 ですが、I2cScannerの実行結果は 0x3C でした。I2cScannerのスケッチには「見つかったデバイスの7-bitアドレスを16進数で表示」のコメントがあります。0111100(7-bit、0X3C)に(ReadかWriteを指定する)最下位ビットとして”0″を加えると 01111000(8-bit、0x78)。

本ブログ内のOLED対応スケッチ

本ブログ内のOLED対応スケッチにはu8gや後継のu8g2を使っています。今回使ったOLEDは解像度は低いものの、黒色がくっきりで表示が鮮明、広視野なので斜め方向からの視認性が良好です。

2.42インチOLED / 0.96インチOLED

あわせて読みたい
ESP32-DevkitCとRTC DS3231SN、OLED、u8g2で作る日本語表示の時計 ESP32-DevkitCとRTC、SSD1309搭載の2.42インチとSSD1306搭載の0.96インチのOLED(有機ELディスプレイ)で作った時計の時分秒や年月日、曜日といった文字をu8g2.drawXBM(...
あわせて読みたい
ArduinoとRTC DS3231SN、OLED、u8gで作る日本語表示の時計 Arduino Uno Rev3とRTC、SSD1309搭載の2.42インチとSSD1306搭載の0.96インチOLED(有機ELディスプレイ)で作った時計の時分秒や年月日、曜日といった文字をu8g.drawXBMP...
あわせて読みたい
ArduinoとBME280、OLED、u8gで作る日本語表示の気圧・温湿度計 Arduino Uno Rev3とBME280センサ、SSD1309搭載の2.42インチOLED(有機ELディスプレイ)で作った気圧・温湿度計の表示画面をu8g.drawXBMP()で日本語表記するスケッチ(プ...
あわせて読みたい
ArduinoとSCD30、OLED、u8g2で作る日本語表示のCO2濃度・温湿度計 Arduino Uno Rev3とSCD30センサモジュール、SSD1309搭載の2.42インチOLED(有機ELディスプレイ)で作ったCO2濃度・温湿度計の表示画面をu8g2.drawXBMP()で日本語表記す...

0.96インチOLED

あわせて読みたい
Arduinoと小型ディスプレイ(OLED)を使ってラックスマンFMチューナーキットLXV-OT8の受信中のFM局名を表示 音楽之友社のムック本付録のラックスマンFMチューナーキットにArduino Nano、OLEDとu8gライブラリを使って受信中のFM局名を表示するプチ改造を行いました。FM局名を表示...
あわせて読みたい
Arduinoと小型ディスプレイ(OLED)を使ってラックスマンFMチューナーキットLXV-OT8の受信中のFM局名を表... FM WIDE SELECTORスイッチの空き端子を使ってFM補完放送局(ワイドFM、AM放送がFMで聴けます)のFM局名表示を追加しました。この空き端子から分圧抵抗2個で信号レベルを...
よかったらシェアしてね!
  • URLをコピーしました!
目次