Arduinoのサンプルプログラム

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のより詳細なスペックを確認したい場合は、以下のリンク先にあるデータシートをご覧ください。

サンプルプログラム(サンプルスケッチ)

用意するもの
  1. 有機ELキャラクタディスプレイモジュール 16×2行 白色
  2. I2Cバス用双方向電圧レベル変換モジュール(PCA9306)
  3. Arduino Uno
  4. USBケーブル
  5. ブレッドボード
  6. ジャンパ線
  7. 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ディスプレイに表示されます。

テキストのコピーはできません。