秋月電子で購入したRGB-OLEDをRaspberry Piから動かして遊んでみました。
コントローラーであるSSD1331のライブラリが公開されていますが、コマンドを直接叩いて動かしてみたので纏めてみます。
http://akizukidenshi.com/catalog/g/gP-14435/
akizukidenshi.com
データシートは上記の商品ページからダウンロードしました。
以前調べたSSD1306と同じように、座標を指定した後にデータを送信することで表示が行われますがデータは1画素につき1~2Byteとなっています。
データのフォーマットは0xa0番地のbit[7:6]で指定しますが、設定値1の65K format1で行いました。
1Byte目がR-5bitとG-上位3bit、2Byte目がG-下位3bitとB-5bitの2Byte構成になっています。
図中のCBAがRGBに対応しており、0xa0番地の[2]=1で反転してCBA=BGRにすることもできます。
8章からコマンドが記載されています。
コマンドはたくさんありますが、理解できたコマンドのみ記載します(笑)
表示する座標の設定
- 0x15 : Set Column Address
- 0x75 : Set Row Address
wd[0] = 0x15;
wd[1] = 0;
wd[2] = 95;
wiringPiSPIwdRW(SPI_CHANNEL, wd, 3);
wd[0] = 0x75;
wd[1] = 0;
wd[2] = 63;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 3);
データフォーマット、パネルの設定
- 0xa0 : Remap & Color Depth setting
wd[0] = 0xa0;
wd[1] = 0x60;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 2);
wd[0] = 0xa0;
wd[1] = 0x62;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 2);
wd[0] = 0xa0;
wd[1] = 0x72;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 2);
- 0x81 : Set Contrast for Color "A"
- 0x82 : Set Contrast for Color "B"
- 0x83 : Set Contrast for Color "C"
wd[0] = 0x81;
wd[1] = 255;
wd[2] = 0x82;
wd[3] = 0;
wd[4] = 0x83;
wd[5] = 0;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 6);
wd[0] = 0x81;
wd[1] = 0;
wd[2] = 0x82;
wd[3] = 255;
wd[4] = 0x83;
wd[5] = 0;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 6);
wd[0] = 0x81;
wd[1] = 0;
wd[2] = 0x82;
wd[3] = 0;
wd[4] = 0x83;
wd[5] = 255;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 6);
パネルに供給する電流値の設定
- 0x87 : Master Current Control
wd[0] = 0x87;
wd[1] = 0;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 2);
表示モード
- 0xa4 ~ 0xa7 : Set Display Mode
0xa4 : 通常表示
0xa5 : 全表示
wd[0] = 0xa5;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 1);
0xa6 : 表示OFF
0xa7 : 色反転表示
wd[0] = 0xa7;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 1);
調光モード設定
wd[0] = 0xab;
wd[1] = 0x00;
wd[2] = 10;
wd[3] = 10;
wd[4] = 10;
wd[5] = 10;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 6);
wd[0] = 0xac;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 1);
表示On/Off
- 0xac ~ 0xa7 : Set Display ON/OFF
0xac : Display ON in dim mode
0xae : Display OFF (sleep mode)
0xaf : Display ON in normal mode
調光ウィンドウ設定(画面内の一部分のみ調光)
wd[0] = 0x24;
wd[1] = 10;
wd[2] = 10;
wd[3] = 85;
wd[4] = 53;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 5);
クリアウィンドウ設定(画面内の一部分のみクリア)
wd[0] = 0x25;
wd[1] = 10;
wd[2] = 10;
wd[3] = 85;
wd[4] = 53;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 5);
直線と四角形を表示するコマンドが予め用意されています。
直線表示
wd[0] = 0x21;
wd[1] = 0;
wd[2] = 15;
wd[3] = 75;
wd[4] = 63;
wd[5] = 0x3e;
wd[6] = 0x00;
wd[7] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 8);
wd[0] = 0x21;
wd[1] = 0;
wd[2] = 0;
wd[3] = 95;
wd[4] = 63;
wd[5] = 0x00;
wd[6] = 0x3f;
wd[7] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 8);
wd[0] = 0x21;
wd[1] = 20;
wd[2] = 0;
wd[3] = 95;
wd[4] = 50;
wd[5] = 0x00;
wd[6] = 0x00;
wd[7] = 0x3e;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 8);
四角形表示と塗りつぶし
- 0x22 : Drawing Rectangle
- 0x26 : Fill Enable / Disable
wd[0] = 0x26;
wd[1] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 2);
wd[0] = 0x22;
wd[1] = 0;
wd[2] = 0;
wd[3] = 95;
wd[4] = 63;
wd[5] = 0x3e;
wd[6] = 0x00;
wd[7] = 0x00;
wd[8] = 0x00;
wd[9] = 0x00;
wd[10] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 11);
wd[0] = 0x22;
wd[1] = 10;
wd[2] = 10;
wd[3] = 85;
wd[4] = 53;
wd[5] = 0x00;
wd[6] = 0x3f;
wd[7] = 0x00;
wd[8] = 0x00;
wd[9] = 0x00;
wd[10] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 11);
wd[0] = 0x22;
wd[1] = 20;
wd[2] = 20;
wd[3] = 75;
wd[4] = 43;
wd[5] = 0x00;
wd[6] = 0x00;
wd[7] = 0x3e;
wd[8] = 0x00;
wd[9] = 0x00;
wd[10] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 11);
wd[0] = 0x26;
wd[1] = 0x01;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 2);
wd[0] = 0x22;
wd[1] = 0;
wd[2] = 0;
wd[3] = 95;
wd[4] = 63;
wd[5] = 0x3e;
wd[6] = 0x00;
wd[7] = 0x00;
wd[8] = 0x0e;
wd[9] = 0x00;
wd[10] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 11);
wd[0] = 0x22;
wd[1] = 10;
wd[2] = 10;
wd[3] = 85;
wd[4] = 53;
wd[5] = 0x00;
wd[6] = 0x3f;
wd[7] = 0x00;
wd[8] = 0x00;
wd[9] = 0x0f;
wd[10] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 11);
wd[0] = 0x22;
wd[1] = 20;
wd[2] = 20;
wd[3] = 75;
wd[4] = 43;
wd[5] = 0x00;
wd[6] = 0x00;
wd[7] = 0x3e;
wd[8] = 0x00;
wd[9] = 0x00;
wd[10] = 0x0e;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 11);
コピー
wd[0] = 0x26;
wd[1] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 2);
wd[0] = 0x23;
wd[1] = 0;
wd[2] = 0;
wd[3] = 40;
wd[4] = 40;
wd[5] = 50;
wd[6] = 15;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 7);
wd[0] = 0x26;
wd[1] = 0x10;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 2);
wd[0] = 0x23;
wd[1] = 0;
wd[2] = 0;
wd[3] = 40;
wd[4] = 40;
wd[5] = 50;
wd[6] = 15;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 7);
スクロール設定
- 0x27 : Continuous Horizontal & Vertical Scrolling Setup
- 0x2e : Deactivate scrolling
- 0x2f : Activate scrolling
データシートに記載されているサンプル設定で動かしてみました。
wd[0] = 0x27;
wd[1] = 0x01;
wd[2] = 0x28;
wd[3] = 0x18;
wd[4] = 0x00;
wd[5] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 6);
wd[0] = 0x2f;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 1);
wd[0] = 0x27;
wd[1] = 0x00;
wd[2] = 0x00;
wd[3] = 0x40;
wd[4] = 0x01;
wd[5] = 0x00;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 6);
wd[0] = 0x2f;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 1);
wd[0] = 0x27;
wd[1] = 0x01;
wd[2] = 0x00;
wd[3] = 0x40;
wd[4] = 0x01;
wd[5] = 0x01;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 6);
wd[0] = 0x2f;
wiringPiSPIDataRW(SPI_CHANNEL, wd, 1);
[参考記事]