OLED-STATIONは様々な用途に応用できる1.3インチ128x64ピクセルのOLEDグラフィックディスプレイを装備し、I2CでArduinoやPICに接続できるグラフィック表示拡張ボードキットです。
OLED-STATIONはArduino の入門者にはもちろん、Arduino の基本機能を一通り習得し、応用に取り組みたい人が手元に置いておくと重宝するグラフィック表示拡張ボードです。
5Vと3.3Vの両方に対応しているので、以下のような多彩なMCUで利用できます。
OLED-STATIONの組み立て例
OLED-STATIONの特徴を以下に示します。
ネットショップ:
OLED-STATIONの組み立て例
接続端子:
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の内蔵プルアップ機能を利用するため、キットにはプルアップ抵抗は含まれていません。