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() {}