Arduino-有機ELディスプレイ「SO1602AW」の使い方
当記事では、Arduinoで有機ELディスプレイ「SO1602AW」を使う方法を詳しく解説します。
有機ELディスプレイ「SO1602AW」はI2Cで制御するため、ArduinoのWireライブラリを使ったプログラムで動作させます。
なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。
有機ELディスプレイ「SO1602AW」の基本スペック
「SO1602AW」はI2C制御で、内部に登録済みの任意の文字を表示させることができる有機ELディスプレイです。液晶ディスプレイと違い文字が光るので暗い場所での視認性が良いです。
当記事では、基板にモジュール化された秋月電子通商の「有機ELキャラクタディスプレイモジュール 16×2行 白色」を使用して、サンプルプログラムを解説していきます。
(白色の他に、同じタイプで黄色や緑色の有機ELキャラクタディスプレイモジュールも販売されています。)
基本スペック | SO1602AW |
---|---|
電源 | Typ.3.3V (2.4~3.6V) |
消費電流 | Typ.50mA (Max.80mA) |
表示色 | 黄/緑/白 |
表示部 | 16文字 x 2行 |
キャラクタ・ドット構成 | 縦7ドット × 横5ドット |
明るさ | Typ.150cd/m2 (Min.120cd/m2) |
コントローラ | US2066または互換品 |
寸法 | 80.0 x 36.0 x 8.5mm |
SO1602AWのより詳細なスペックを確認したい場合は、以下のリンク先にあるデータシートをご覧ください。
サンプルプログラム(サンプルスケッチ)
- 有機ELキャラクタディスプレイモジュール 16×2行 白色
- I2Cバス用双方向電圧レベル変換モジュール(PCA9306)
- Arduino Uno
- USBケーブル
- ブレッドボード
- ジャンパ線
- PC(プログラム書き込み・シリアルモニタ表示)
サンプルプログラム(サンプルスケッチ)で、ブレッドボードを使います。ブレッドボードの詳しい使い方は、以下の記事をご覧ください。
ディスプレイに「Hellow!Arduino!」表示
#include <Wire.h>
#define SO1602_ADDR 0x3C
#define CMD 0x00
#define DATA 0x40
unsigned int i;
char character_1[8]="Hellow!", character_2[9]="Arduino!";
void setup()
{
//I2C初期化
Wire.begin();//I2Cを初期化
delay(100);
//SO1602初期化
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x01);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x02);
Wire.endTransmission();
delay(2);
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x0f);
Wire.endTransmission();
delay(2);
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x01);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x2a);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x79);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x81);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0xff);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x78);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x28);
Wire.endTransmission();
//カーソル・セット
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x08 + 0x04 * 0x01 + 0x02 * 0x00 + 0x01);
Wire.endTransmission();
delay(100);
//ブリンク・セット
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x08 + 0x04 * 0x01 + 0x02 * 0x01 + 0x00);
Wire.endTransmission();
delay(100);
}
void loop()
{
//「Hellow!」をディスプレイに表示
for (i=0; i<7; i++){
Wire.beginTransmission(SO1602_ADDR);
Wire.write(DATA);
Wire.write(character_1[i]);
Wire.endTransmission();
}
//カーソル移動(2列目、左から1番目)
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x00 + ( 0x01 * 0x20 ) + 0x80);
Wire.endTransmission();
delay(100);
//「Arduino!」をディスプレイに表示
for (i=0; i<8; i++){
Wire.beginTransmission(SO1602_ADDR);
Wire.write(DATA);
Wire.write(character_2[i]);
Wire.endTransmission();
}
while(1);
}
サンプルプログラムでは、セットアップで初期化をした後、ループで「Hellow!Arduino!」を有機ELディスプレイに表示します。
シリアルモニタで入力した文字をディスプレイに表示
#include <Wire.h>
#define SO1602_ADDR 0x3C
#define CMD 0x00
#define DATA 0x40
unsigned int i, count;
char character_1[8]="Hellow!", character_2[9]="Arduino!", data[50];
void setup()
{
//シリアル通信初期化
Serial.begin(9600);//シリアル通信を9600bpsで初期化
//I2C初期化
Wire.begin();//I2Cを初期化
delay(100);
//SO1602初期化
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x01);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x02);
Wire.endTransmission();
delay(2);
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x0f);
Wire.endTransmission();
delay(2);
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x01);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x2a);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x79);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x81);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0xff);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x78);
Wire.endTransmission();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x28);
Wire.endTransmission();
//カーソル・セット
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x08 + 0x04 * 0x01 + 0x02 * 0x00 + 0x01);
Wire.endTransmission();
delay(100);
//ブリンク・セット
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x08 + 0x04 * 0x01 + 0x02 * 0x01 + 0x00);
Wire.endTransmission();
delay(100);
}
void loop()
{
if(Serial.available() > 0)//受信したバイト数が0を超える場合、以下を実行
{
//カーソル移動(1列目、左から1番目)
Wire.beginTransmission(SO1602_ADDR);
Wire.write(CMD);
Wire.write(0x00 + ( 0x00 * 0x20 ) + 0x80);
Wire.endTransmission();
delay(100);
count = Serial.available();
//文字列「data」をディスプレイに表示
for(i=0; i<count; i++){
data[i] = Serial.read();
Wire.beginTransmission(SO1602_ADDR);
Wire.write(DATA);
Wire.write(data[i]);
Wire.endTransmission();
}
delay(1000);
}
}
サンプルプログラムでは、セットアップで初期化をした後、ループでシリアルモニタからの送信を待ちます。
シリアルモニタから文字データを送信すると、有機ELディスプレイに表示されます。
おすすめのArduinoボードはどれ?
当記事『Arduino-有機ELディスプレイ「SO1602AW」の使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。
やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。
電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。
また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。
このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。