You are here

OLED-STATION

OLED-STATIONの概要

OLED-STATIONは様々な用途に応用できる128x64ピクセルのOLEDグラフィックスディスプレイを装備した、I2CでArduinoやPICに接続できる文字表示拡張ボードキットです。
OLED-STATIONはArduino の入門者にはもちろん、Arduino の基本機能を一通り習得し、応用に取り組みたい人が手元に置いておくと重宝するグラフィックスシールドです。

5Vと3.3Vの両方に対応しているので、以下のような多彩なMCUで利用できます。


  • 5Vと3.3VのArduinoボード
  • 5Vと3.3VのPIC16/18/24/32
  • ESP-WROOM-02/32

OLED-STATIONの組み立て例

OLED-STATIONの特徴を以下に示します。


  • コンパクトな基板上に一通りの入出力装置を搭載しています。
  • 2本のI2Cインターフェースと1本の圧電サウンダー用信号のみで制御できます。
  • OLEDディスプレイは128x64ピクセルのグラフィックス表示が可能です。
  • 6個のタクトスイッチを搭載しています。
  • 2個のLEDを搭載しています。
  • 圧電スピーカーを装備し、ビープ音などの電子音の出力を行えます。
  • 環境センサーBME280、加速度・ジャイロセンサーMPU6050、リアルタイムクロックDS3231の接続端子を装備しています。
  • I2Cの信号を5Vと3.3Vで変換する回路を内蔵しており、3.3VのI2Cデバイスを安全に接続できます。
  • 電子工作で広く利用されているArduinoのシールドとして開発されており、手軽に利用できるArduinoのIDEを利用して独自のスケッチを行えます。

ネットショップ:


OLED-STATIONの利用法

OLED-STATIONの組み立て例

接続端子:


  1. GND
  2. 5V(信号電圧が3.3Vの場合には、3.3V)
  3. SDA
  4. SCL
  5. NC: 無接続

OLEDディスプレイは、U8g2ライブラリを使用します。
https://github.com/olikraus/u8g2

スイッチとLEDを使用するためには、MCP23008ライブラリを使用します。
ライブラリに関しては以下のページを参照しダウンロードしてください。

ライブラリの利用例として、タクトスイッチを押すと、対応するLEDが点灯したり、文字液晶ディスプレイに対応する数値が表示されるスケッチを示します。

#include <U8g2lib.h>
#include <MCP23008.h>

U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0) ;
MCP23008 gpio(4) ; // I2Cアドレスは0x24(4)

#define LED1  6
#define LED2  7
#define SOUNDER 8 // 接続に合わせて設定

void setup()
{
  u8g2.begin() ;  

  gpio.begin(MCP23008_OLED) ; // OLED_STATION用の初期化
}

void loop()
{
  u8g2.firstPage();
  do {
    // タクトスイッチ2-5の変化は文字液晶に
    for (uint8_t i = 0; i < 4; i++) {
      if (gpio.digitalRead(i + 2))
        u8g2.drawRFrame(32 * i, 16, 30, 24, 5);
      else
        u8g2.drawRBox(32 * i, 16, 30, 24, 5);
    }
    u8g2.setFont(u8g2_font_ncenB10_tr);
    u8g2.drawStr( 15, 62, "Push Button");
  } while ( u8g2.nextPage() );

  // タクトスイッチ0,1の変化はLEDに
  gpio.digitalWrite(LED1, !gpio.digitalRead(0));
  gpio.digitalWrite(LED2, !gpio.digitalRead(1));

  if (~gpio.readPORT() & 0x3F)
    tone(SOUNDER, 400) ;
  else
    noTone(SOUNDER) ;
    
  delay(100) ;
}

上記のスケッチは、Arduinoの多くのボードの他、ESP-WROOM-02/32上のArduinoスケッチでも稼働します。
しかしながら、上記のスケッチでは、メモリの少ないArduino UNOにも対応できるように、OLEDを制御しているU8g2ライブラリは、少ないメモリで動く様にページバッファモードを使用してプログラミングしています。

ESP-WROOM-02/32やArduino MEGAは、Arduino UNOよりも多くのメモリを内蔵しており、フルバッファモードを使用して効率の良いプログラムを作成することができます。

下記のスケッチは、OLEDの制御を行うU8g2ライブラリをフルバッファモードで使用した例です。
フルバッファモードを使用するためには、フルバッファモードに対応したコンストラクタを使用する必要があり、下記のスケッチでは、その様なコンストラクタを使用しています。

#include <U8g2lib.h>
#include <MCP23008.h>

U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0) ;
MCP23008 gpio(4) ; // I2Cアドレスは0x24(4)

#define LED1  6
#define LED2  7
#define SOUNDER 15 // 接続に合わせて設定

void setup()
{
  u8g2.begin() ;

  gpio.begin(MCP23008_OLED) ; // OLED_STATION用の初期化
}

void loop()
{
  u8g2.clearBuffer() ;

  // タクトスイッチ2-5の変化は文字液晶に
  for (uint8_t i = 0; i < 4; i++) {
    if (gpio.digitalRead(i + 2))
      u8g2.drawRFrame(32 * i, 16, 30, 24, 5);
    else
      u8g2.drawRBox(32 * i, 16, 30, 24, 5);
  }
  u8g2.setFont(u8g2_font_ncenB10_tr);
  u8g2.drawStr( 15, 62, "Push Button");

  u8g2.sendBuffer() ;

  // タクトスイッチ0,1の変化はLEDに
  gpio.digitalWrite(LED1, !gpio.digitalRead(0));
  gpio.digitalWrite(LED2, !gpio.digitalRead(1));

  if (~gpio.readPORT() & 0x3F)
    tone(SOUNDER, 400) ;
  else
    noTone(SOUNDER) ;

  delay(100) ;
}

OLED-STATIONの回路図を示します。

OLED-STATIONの回路図

回路図ではタクトスイッチにプルアップ抵抗が配置されていますが、通常利用ではMCP23008の内蔵プルアップ機能を利用するため、キットにはプルアップ抵抗は含まれていません。