2020年4月19日日曜日

SSD1309な2.42インチOLEDモジュールのI2C版

2.42インチのSSD1309なOLEDモジュールがAliexpressでやすかったのでポチってみた。
SSD1309なOLEDモジュールはSPI接続が多くてI2Cで使う場合はジャンパで変更したり改造したりしないといけないイメージだけど、最初からI2Cなやつが売っていた。
1.3インチとかだと袋だったりするけど、2.42インチはケースに入って送られてきた。まぁお値段も倍以上するしな…
付属のピンヘッダをハンダしてみた。縦置きと横置きのどちらでも使えるようにピンヘッダを取り付けるところは2箇所あるっぽい。このモジュールはI2Cのみ対応なので4Pinしかない。
裏面にはI2Cアドレス変更ジャンパが存在する。
Arduinoのライブラリだと0x78にジャンパをセットすると0x3C、0x7Aにセットすると0x3Dになる。
あとD2のところに「ACK responseが必要なときはD2をショートしてください」と書かれてる。前回改造した1.54インチOLEDモジュールは普通にジャンパしていたところだとおもうけど…

とりあえずそのままの状態でArduinoで試してみた。
使用したライブラリはThingPulse OLED SSD1306ライブラリ
SSD1309とSSD1306は制御コマンドが同じなのでSSD1306のライブラリがそのまま使用できる。

この状態ではサンプルが動かない…
ということで先程のACK応答が出る仕様に改造してみた。
D2のダイオードを取り外して、かわりに75Ωの抵抗を実装してみた。ショートと書いてあるので0Ωの抵抗とかでも大丈夫だと思う。逆に抵抗値が高すぎるとうまく動かなそうなので無難にショートの方がいいかも。

そうすると先程のライブラリで画面が映るようになった!
ACK応答を見ないでじゃんじゃんデータを送るようなプログラムだと多分この改造がいらないのかもしれない。

ちなみにThingPulseのライブラリで他のI2Cデバイスと共存させたい場合は初期化のところを
SSD1306Wire display(0x3c, SDA, SCL, GEOMETRY_128_64, I2C_ONE, -1);
にしておくといいかも。
その場合は
display.init();
の前に
Wire.begin(SDA,SCL);
も忘れずに。(SDAとSCLを変更する場合はdefineも忘れずに)
これならESP32でHW I2Cを使ってLCDとその他センサ類を共存できた。

やっぱり2.42インチ、大きくて見やすい。この解像度で0.96から2.42まであるけど2.42まで行くとドットのあらさが目立つようになるのでフォントもそれに合わせて選定するとよりかっこいいかも。

ちなみにI2C版のモジュールも何種類か存在するみたいで、今回購入したのはRESET回路が内蔵されているタイプだったけど、RESETピンが出てる5ピンタイプも存在してた。この場合はマイコンからリセットするか、リセット回路を内蔵すれば良さそう。SSD1309って結構リセットがシビアな感じがするのであえて外に出しているのかな…

0 件のコメント:

コメントを投稿