ゆるく楽しむプログラミング

Seeeduino XIAOで「学校のチャイム」をタイマー制御してみる:OLED表示

ピン数の少ないSeeeduino XIAOで7セグメントLEDを使おうとすると周辺に制御用のICが必要で結果的にOLEDの方が安上りなので、今回はSSD1306 OLEDモジュールを使います。
このOLEDモジュールはI2Cインターフェイスで接続します。

I2Cインターフェイスって何ですか?

SCL(クロック)とSDA(データ)の二本の線で接続するシリアル通信インターフェイスです。
マスターとスレーブに役割が分かれておりArduinoがマスター、OLEDがスレーブになります。



スレーブにはアドレスが割り振られています。
OLEDユニットを操作するにはOLEDユニットのアドレスを知ることが必要です。
下図のように結線します。

ArduinoIDEの[スケッチ例]-[Wire]-[i2c_scanner]をSeeeduino XIAOに書き込んで[ツール]-[シリアルモニタ]を開くとOLEDのI2Cアドレスが表示されます。
私の使用したSSD1306 OLEDモジュールのアドレスは 0x3C でした。




SSD1306のライブラリを探してくる

自前でやろうと思うとI2C通信手順に従ってコマンドを送信して~とか結構面倒な事になるので、ここは先人の成果をまるっと利用させていただきます。
SSD1306はかなりメジャーなコントローラーらしく探せば色々見つかりますがその中から ACROBOTIC SSD1306 を使用しました。

ArduinoIDEの[スケッチ]-[ライブラリをインクルード]-[ライブラリを管理]からACROBOTIC SSD1306で検索してインストールします。


ArduinoIDEが普通にインストールされていればインストールした ACROBOTIC SSD1306 ライブラリは
C:\Users\ユーザ名\Documents\Arduino\libraries\ACROBOTIC_SSD1306
に展開されていると思います。

このライブラリのソースを見るとOLEDのI2Cアドレスは ACROBOTIC_SSD1306.h に 
#define SSD1306_Address 0x3C で定義されています。
I2Cアドレスが0x3C以外の場合はココを修正する必要があります。

ライブラリをインクルードするとスケッチ例に ACROBOTIC SSD1306 が増えますので HelloOLED とか DrawLogo を書き込んで動作を確認できます。
※ <>を全角<>に置き換えています。コピペの際は注意してください。

#include <Wire.h>
#include <ACROBOTIC_SSD1306.h>

void setup()
{
  Wire.begin();  

  oled.init();                      // Initialze SSD1306 OLED display
  oled.clearDisplay();              // Clear screen
  oled.setTextXY(1,2);              // Set cursor position, start of line 1
  oled.putString("-----------");
  oled.setTextXY(2,2);              // Set cursor position, start of line 2
  oled.putString("Hello World");
  oled.setTextXY(3,2);              // Set cursor position, start of line 3
  oled.putString("-----------");
}

void loop() {}