部品屋根性(107) SSD1315制御のOLEDのArduino Uno R4/R3接続

Joseph Halfmoon

別シリーズでルネサスマイコン搭載のArduino Uno R4を使用中。自発光の小型ディスプレイを接続したくなり長らく眠っていたOLEDの小基板を取り付けることに。まずはUno R3で動作確認作業を行おうとしてハマリました。最初からUno R4でやってればよかったんであります。R3でトラブルような周辺装置もあるのだと。

※「部品屋根性」投稿順Indexはこちら

OLEDコントローラ SSD1306とSSD1315

ターゲットボードに取り付ける小型ディスプレイ、長いこと反射型のLCDパネルに頼っていたのですが、いよいよ見ずらくなってまいりました。老人の目はHDR(ハイ・ダイナミック・レンジ)ではなくロウ・ダイナミック・レンジ化しとります。そんなときバックライトも良いですが、自発光のOLEDパネルであれば見やすいです。

さてそのような小規模のOLEDパネルを制御する定番のICにSSD1306があります。128×64サイズのモノクロームOLEDを制御するのに適したICです。Arduinoなど「電子工作業界」御用達。ソフトのコミュニティサポートも充実。香港の半導体会社、

SOLOMON-SYSTECH

が発売元です。SSD1306だけでなく後継機種なども着々ととりそろえているみたい。その中にSSD1315という機種あり。SSD1306とソフトウエア的な互換性もとりつつ、電気的には「いろいろ改良」されているみたい。知らんけど。

今回、引き出しの奥底から取り出したディスプレイ基板は、以下のような素性のものです。

    • ボード自体はみんな大好きSeeed Studio製。Groveコネクタ搭載。
    • OLEDパネルはZJY technology Inc.製。
    • OLEDは128×64ドット、モノクローム(白発光)
    • コントローラはSSD1315

Groveコネクタは電源、グラウンドを除けば信号線は2端子のみです。今回はI2CのSCL、SDAの2本のみ。I2Cだったら適当につなげば動くじゃん、などと考えてハマリました。

今回の結論

今回、この小ボードを前にしばらく七転八倒した結論が以下に

    1. Arduino Uno R3(ATmega328搭載機)の場合、ハードウエアI2Cでは動作しない。デフォルトのSCL、SDA端子に接続するときもソフトI2C設定にすると動作する。
    2. Arduino Uno R4(ルネサスRA4M1搭載機)の場合、ハードウエアI2Cで動作する。勿論、ソフトウエアI2Cでも動作する。

なおこの小ボードは『SWITCH SCIENCE』様でも販売されております。上記が身に染みた後でそこに衝撃の記述があることにようやく気づきました。

Grove – 0.96インチ OLEDディスプレイ(SSD1315)

1文引用させていただきます。

ATmega328を搭載した基板をお使いの場合、U8g2ライブラリの使用にはソフトI2Cへの変更が必要です。

まさにこれね。トホホ。。。

Arduino側のドライバソフトウエア

Arduino IDEでライブラリ検索すればOLED制御用のドライバは多数見つかります。ただし多くがSSD1306用で、SSD1315とは書かれてないみたいです(でも今回SSD1306の「つもり」でSSD1315が動いてます。)

ソフトが多数あるなか、定番は上記の引用にも書かれている以下のライブラリだと思います。

u8g2

実に多数のコントローラ、パネルに対応してます。多すぎてどれを選んだら良いか困る、というのが難点かもしれませぬ。

インストールそのものは簡単。Arduino IDEのライブラリ画面から以下で入ります。U8g2

そしてインストール後に、以下のように充実したサンプルコードも使えるようになっとります。HelloWorld

小さいながらも高精細なグラフィック描画も出来るディスプレイですが、今回の主目的はテキスト表示なので、u8x8というカテゴリを選択します。ここが文字表示用に特化した部分。その中で吉例「HelloWorld」をビルドして動かしてみます。

ここで選択を一つ迫られます。サンプルプログラムを開くと分かりますが、非常に大量のディスプレイが列挙されており、適切なものを選択(列挙されているものはコメントアウトされているので、適切な一つのコメントアウトをやめる)必要があります。

    • UNO R3でもUNO R4でも動作する選択(デフォルト端子)
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
    • UNO R4では動作するが、UNO R3では動作しない選択(デフォルト端子)
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);

こういうことで。

実機動作

Arduino UNO R4に接続して動作しているところが以下に。OLED_DUT

勿論、ソフトI2CにしておけばUNO R3でも動作しました。

部品屋根性(106) Sharp GP1UXC41QSで赤外リモコンの波形を再取得 へ戻る

部品屋根性(108) サイリスタ(SCR)、ST社 X02Series、お手軽テスト へ進む