Skip to main content

Grove - OLED ディスプレイ 0.96 インチ

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

pir

Grove - OLED ディスプレイ 0.96" モジュールは、Grove 4ピン I2C インターフェースを備えた OLED モノクロ 128×64 ドットマトリックスディスプレイモジュールです。LCD と比較して、OLED スクリーンは高輝度、自発光、高コントラスト比、薄型設計、広視野角、広い温度範囲、低消費電力など、多くの利点を持つため、より競争力があります。このモジュールは、OLED 96×96 よりも大きな画面を持ち、より多くのコンテンツを表示することができます。

pir

バージョン

製品バージョン変更点リリース日
Grove - OLED ディスプレイ 0.96 インチ V1.1初版2015年10月

特徴

  • Grove 互換インターフェース
  • 通信モード: I2C
  • 低消費電力
  • 表示色: 白
  • 動作温度範囲: -20℃~70℃
  • I2C アドレス 0x3C
note
複数の I2C デバイスを使用したい場合は、[ソフトウェア I2C](https://wiki.seeedstudio.com/ja/Arduino_Software_I2C_user_guide/) を参照してください。
danger
注意: OLED に強い衝撃やストレスを与えると、画面が破損する可能性があります。
tip
Grove モジュールの詳細については、[Grove システム](https://wiki.seeedstudio.com/ja/Grove_System/) を参照してください。

仕様

項目最小値標準値最大値単位
電源電圧 (VCC)3.35.05.5V
ドライバ IC-SSD1308Z--
表示色---
ドットマトリックス-128×64--
パネルサイズ-26.7(W)×19.26(H)-mm
アクティブエリア-21.74(W)×11.175(H)-mm
ドットピッチ-0.17(W)×0.175(H)-mm
ドットサイズ-0.15(W)×0.15(H)-mm
動作温度範囲--20~70-
tip
Grove モジュールの詳細については、[Grove システム](https://wiki.seeedstudio.com/ja/Grove_System/) を参照してください。

対応プラットフォーム

ArduinoRaspberry Pi

pir

pir

caution
上記で対応していると記載されているプラットフォームは、モジュールのソフトウェアまたは理論的な互換性を示しています。ほとんどの場合、Arduinoプラットフォーム向けのソフトウェアライブラリやコード例のみを提供しています。すべての可能なMCUプラットフォーム向けにソフトウェアライブラリやデモコードを提供することは不可能です。そのため、ユーザー自身でソフトウェアライブラリを作成する必要があります。

はじめに

note
Arduinoを初めて使用する場合は、開始前に[Arduinoの使い方](https://wiki.seeedstudio.com/ja/Getting_Started_with_Arduino/)を必ずご覧ください。

Arduinoで遊ぶ

デモンストレーション

OLED128*64はSSD1308チップのすべてのピンを使用します。デフォルトの原点は左上隅にあります。プログラムを調整することで原点を変更し、希望するパターンを表示することもできます。詳細については、SSD1308_1.0.pdfおよびLY190-128064.pdfをご参照ください。

ハードウェア

  • ステップ1. 以下のものを準備してください:
Seeeduino V4Base ShieldGrove - OLED Display 0.96inch

pir

pir

pir

今すぐ購入今すぐ購入今すぐ購入
  • ステップ2. Grove OLED Display 128*64をGrove Base ShieldのI2Cポートに接続します。
  • ステップ3. Grove Base ShieldをSeeeduinoに接続します。
  • ステップ4. USBケーブルを使用してSeeeduinoをPCに接続します。

pir

note
Grove Base Shieldがない場合は、以下のようにGrove - OLED Display 0.96インチをSeeeduinoに直接接続することもできます。
SeeeduinoGrove - OLED Display 0.96 inch
5V
GND
SDA
SCL黄色

ソフトウェア

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // SSD1306とSSD1308Zは互換性があります

// U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); //低速I2C

void setup(void) {
u8g2.begin();
}

void loop(void) {
u8g2.clearBuffer(); // 内部メモリをクリア
u8g2.setFont(u8g2_font_ncenB08_tr); // 適切なフォントを選択
u8g2.drawStr(0,10,"Hello World!"); // 内部メモリに文字列を記入
u8g2.sendBuffer(); // 内部メモリをディスプレイに転送
delay(1000);
}

  • ステップ3. 画面に「Hello World!」が表示されます。

Raspberry Piで遊ぶ (Grove Base Hat for Raspberry Piを使用)

ハードウェア

  • ステップ1. このプロジェクトで使用するもの:
Raspberry piGrove Base Hat for RasPiGrove - OLED Display 0.96 inch

pir

pir

pir

今すぐ購入今すぐ購入今すぐ購入
  • ステップ 2. Grove Base Hat を Raspberry に接続します。
  • ステップ 3. OLED ディスプレイを Base Hat の I^2^C ポートに接続します。
  • ステップ 4. Raspberry Pi を USB ケーブルを使用して PC に接続します。

    pir

ソフトウェア

note
 **Raspberry Pi OS >= Bullseye** を搭載した Raspberry Pi を使用している場合は、**Python3** のみでこのコマンドラインを使用する必要があります。
  • ステップ 1. ソフトウェアの設定 に従って開発環境を構成します。
  • ステップ 2. grove.py ライブラリをクローンしてソースファイルをダウンロードします。
cd ~
git clone https://github.com/Seeed-Studio/grove.py

  • ステップ 3. 以下のコマンドを実行してコードを実行します。
cd grove.py/grove
python3 grove_oled_display_128x64.py

以下は grove_oled_display_128x64.py のコードです。


import time

from grove.i2c import Bus

_COMMAND_MODE = 0x80
_DATA_MODE = 0x40
_NORMAL_DISPLAY = 0xA6

_DISPLAY_OFF = 0xAE
_DISPLAY_ON = 0xAF
_INVERSE_DISPLAY = 0xA7
_SET_BRIGHTNESS = 0x81


BasicFont = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x00],
[0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x00],
[0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x55, 0x22, 0x50, 0x00, 0x00],
[0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00],
[0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00],
[0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00],
[0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00],
[0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x00],
[0x00, 0x62, 0x51, 0x49, 0x49, 0x46, 0x00, 0x00],
[0x00, 0x22, 0x41, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x00],
[0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x00],
[0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00, 0x00],
[0x00, 0x01, 0x71, 0x09, 0x05, 0x03, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00],
[0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x51, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7E, 0x09, 0x09, 0x09, 0x7E, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x51, 0x72, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00],
[0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x00, 0x00],
[0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x00],
[0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x00],
[0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x00],
[0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x00],
[0x00, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00],
[0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x00],
[0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
[0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x00, 0x00],
[0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x28, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x00, 0x00],
[0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00],
[0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x00, 0x00],
[0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x80, 0x84, 0x7D, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x7C, 0x08, 0x04, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00],
[0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00],
[0x00, 0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7C, 0x08, 0x04, 0x00, 0x00, 0x00],
[0x00, 0x48, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x7F, 0x44, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x00],
[0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00],
[0x00, 0x1C, 0xA0, 0xA0, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00],
[0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x00],
[0x00, 0x02, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00]]


class GroveOledDisplay128x64(object):
HORIZONTAL = 0x00
VERTICAL = 0x01
PAGE = 0x02

def __init__(self, bus=None, address=0x3C):
self.bus = Bus(bus)
self.address = address

self.off()
self.inverse = False
self.mode = self.HORIZONTAL

self.clear()
self.on()

def on(self):
self.send_command(_DISPLAY_ON)

def off(self):
self.send_command(_DISPLAY_OFF)

def send_command(self, command):
self.bus.write_byte_data(self.address, _COMMAND_MODE, command)

def send_data(self, data):
self.bus.write_byte_data(self.address, _DATA_MODE, data)

def send_commands(self, commands):
for c in commands:
self.send_command(c)

def clear(self):
self.off()
for i in range(8):
self.set_cursor(i, 0)
self.puts(' ' * 16)

self.on()
self.set_cursor(0, 0)

@property
def inverse(self):
return self._inverse

@inverse.setter
def inverse(self, enable):
self.send_command(_INVERSE_DISPLAY if enable else _NORMAL_DISPLAY)
self._inverse = enable

@property
def mode(self):
return self._mode

@mode.setter
def mode(self, mode):
self.send_command(0x20)
self.send_command(mode)
self._mode = mode

def set_cursor(self, row, column):
self.send_command(0xB0 + row)
self.send_command(0x00 + (8*column & 0x0F))
self.send_command(0x10 + ((8*column>>4)&0x0F))

def putc(self, c):
C_add = ord(c)
if C_add < 32 or C_add > 127: # 非表示可能なASCII文字を無視
c = ' '
C_add = ord(c)

for i in range(0, 8):
self.send_data(BasicFont[C_add-32][i])

def puts(self, text):
for c in text:
self.putc(c)

def show_image(self, image):
from PIL import Image
import numpy as np

im = Image.open(image)

bw = im.convert('1')
pixels = np.array(bw.getdata())
page_size = 128 * 8

self.set_cursor(0, 0)
for page in range(8):
start = page_size * page
end = start + page_size

for i in range(start, start + 128):
data = np.packbits(pixels[i:end:128][::-1])[0]
self.send_data(data)


def main():
display = GroveOledDisplay128x64()

display.set_cursor(0, 0)
display.puts('hello')
display.set_cursor(1, 4)
display.puts('world')

if __name__ == "__main__":
main()


ターミナルでは何も起こらないように見えますが、OLEDを確認するとサイバー世界で最も有名な文章が表示されていることに気付くでしょう。😄

note
    GroveモジュールのI2CアドレスをスキャンするためにI2Cツールを使用すると、2つ以上のアドレスが見つかる場合があります。0x04は*Grove Base Hat for Raspberry Pi*のアドレスです。

Raspberry Piで遊ぶ (GrovePi_Plusを使用)

以下のBeagleBone Green用のPythonスクリプトはRaspberry Piでも動作します。ただし、I2Cバスが異なります。Raspberry Pi 2/3ではI2Cバスは1です。スクリプト内のbus=2bus=1に変更すればPiで動作します。

ハードウェア

  • ステップ 1. 以下のものを準備してください:
Raspberry PiGrovePi_PlusGrove - OLED Display 0.96 inch

pir

pir

pir

今すぐ購入今すぐ購入今すぐ購入
  • ステップ 2. GrovePi_PlusをRaspberryに接続します。
  • ステップ 3. Grove - OLED Display 0.96 inchをGrovePi_PlusのI2C-2ポートに接続します。
  • ステップ 4. USBケーブルを使用してRaspberryをPCに接続します。

pir

ソフトウェア

  • ステップ 1. ソフトウェアの設定に従って開発環境を構成します。

  • ステップ 2. デモのディレクトリに移動します:

cd yourpath/GrovePi/Software/Python/
  • ステップ 3. コードを確認します:
nano Grove-OLED_Display_0.96inch.py   # "Ctrl+x"で終了 #
import time
import smbus2 as smbus

_COMMAND_MODE = 0x80
_DATA_MODE = 0x40
_NORMAL_DISPLAY = 0xA6

_DISPLAY_OFF = 0xAE
_DISPLAY_ON = 0xAF
_INVERSE_DISPLAY = 0xA7
_SET_BRIGHTNESS = 0x81


BasicFont = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x00],
[0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x00],
[0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x55, 0x22, 0x50, 0x00, 0x00],
[0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00],
[0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00],
[0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00],
[0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00],
[0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x00],
[0x00, 0x62, 0x51, 0x49, 0x49, 0x46, 0x00, 0x00],
[0x00, 0x22, 0x41, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x00],
[0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x00],
[0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00, 0x00],
[0x00, 0x01, 0x71, 0x09, 0x05, 0x03, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00],
[0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x51, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7E, 0x09, 0x09, 0x09, 0x7E, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x51, 0x72, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00],
[0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x00, 0x00],
[0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x00],
[0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x00],
[0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x00],
[0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x00],
[0x00, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00],
[0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x00],
[0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
[0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x00, 0x00],
[0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x28, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x00, 0x00],
[0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00],
[0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x00, 0x00],
[0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x80, 0x84, 0x7D, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x7C, 0x08, 0x04, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00],
[0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00],
[0x00, 0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7C, 0x08, 0x04, 0x00, 0x00, 0x00],
[0x00, 0x48, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x7F, 0x44, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x00],
[0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00],
[0x00, 0x1C, 0xA0, 0xA0, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00],
[0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x00],
[0x00, 0x02, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00]]


class GroveOledDisplay128x64(object):
HORIZONTAL = 0x00
VERTICAL = 0x01
PAGE = 0x02

def __init__(self, bus=2, address=0x3C):
self.bus = smbus.SMBus(bus)
self.address = address

self.off()
self.inverse = False
self.mode = self.HORIZONTAL

self.clear()
self.on()

def on(self):
self.send_command(_DISPLAY_ON)

def off(self):
self.send_command(_DISPLAY_OFF)

def send_command(self, command):
self.bus.write_byte_data(self.address, _COMMAND_MODE, command)

def send_data(self, data):
self.bus.write_byte_data(self.address, _DATA_MODE, data)

def send_commands(self, commands):
for c in commands:
self.send_command(c)

def clear(self):
self.off()
for i in range(8):
self.set_cursor(i, 0)
self.puts(' ' * 16)

self.on()
self.set_cursor(0, 0)

@property
def inverse(self):
return self._inverse

@inverse.setter
def inverse(self, enable):
self.send_command(_INVERSE_DISPLAY if enable else _NORMAL_DISPLAY)
self._inverse = enable

@property
def mode(self):
return self._mode

@mode.setter
def mode(self, mode):
self.send_command(0x20)
self.send_command(mode)
self._mode = mode

def set_cursor(self, row, column):
self.send_command(0xB0 + row)
self.send_command(0x00 + (8*column & 0x0F))
self.send_command(0x10 + ((8*column>>4)&0x0F))

def putc(self, c):
C_add = ord(c)
if C_add < 32 or C_add > 127: # 非表示ASCII文字を無視
c = ' '
C_add = ord(c)

for i in range(0, 8):
self.send_data(BasicFont[C_add-32][i])

def puts(self, text):
for c in text:
self.putc(c)

def show_image(self, image):
from PIL import Image
import numpy as np

im = Image.open(image)

bw = im.convert('1')
pixels = np.array(bw.getdata())
page_size = 128 * 8

self.set_cursor(0, 0)
for page in range(8):
start = page_size * page
end = start + page_size

for i in range(start, start + 128):
data = np.packbits(pixels[i:end:128][::-1])[0]
self.send_data(data)


if __name__ == "__main__":
display = GroveOledDisplay128x64(bus=1)

display.set_cursor(0, 0)
display.puts('hello')
display.set_cursor(1, 4)
display.puts('world')
  • ステップ 4: smbus2ライブラリをインストールします sudo pip install smbus2

  • ステップ 5: コードを実行します。Grove - OLEDが「Hello World」と出力することが確認できます。

sudo python Grove-OLED_Display_0.96inch.py

Beaglebone Greenで遊ぶ

BBG上のプログラムを編集するには、Cloud9 IDEを使用し、Beaglebone Green Wikiを参照してください。

以下は、OLEDに「Hello World」を表示する手順です。

ハードウェア

  • ステップ 1. Grove - OLEDをBBGのGrove I2Cソケットに接続します。
  • ステップ 2. SeeeduinoをUSBケーブルでPCに接続します。

ソフトウェア

  • ステップ 1: 右上の「+」をクリックして新しいファイルを作成します。

pir

pir

  • ステップ 2: 以下のコードを新しいタブにコピー&ペーストします。
import time
import smbus2 as smbus

_COMMAND_MODE = 0x80
_DATA_MODE = 0x40
_NORMAL_DISPLAY = 0xA6

_DISPLAY_OFF = 0xAE
_DISPLAY_ON = 0xAF
_INVERSE_DISPLAY = 0xA7
_SET_BRIGHTNESS = 0x81


BasicFont = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x00],
[0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x00],
[0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x55, 0x22, 0x50, 0x00, 0x00],
[0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00],
[0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00],
[0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00],
[0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00],
[0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x00],
[0x00, 0x62, 0x51, 0x49, 0x49, 0x46, 0x00, 0x00],
[0x00, 0x22, 0x41, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x00],
[0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x00],
[0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00, 0x00],
[0x00, 0x01, 0x71, 0x09, 0x05, 0x03, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00],
[0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x51, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7E, 0x09, 0x09, 0x09, 0x7E, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x51, 0x72, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00],
[0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x00, 0x00],
[0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x00],
[0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x00],
[0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x00],
[0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x00],
[0x00, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00],
[0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x00],
[0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
[0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x00, 0x00],
[0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x28, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x00, 0x00],
[0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00],
[0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x00, 0x00],
[0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x80, 0x84, 0x7D, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x7C, 0x08, 0x04, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00],
[0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00],
[0x00, 0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7C, 0x08, 0x04, 0x00, 0x00, 0x00],
[0x00, 0x48, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x7F, 0x44, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x00],
[0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00],
[0x00, 0x1C, 0xA0, 0xA0, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00],
[0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x00],
[0x00, 0x02, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00]]


class GroveOledDisplay128x64(object):
HORIZONTAL = 0x00
VERTICAL = 0x01
PAGE = 0x02

def __init__(self, bus=2, address=0x3C):
self.bus = smbus.SMBus(bus)
self.address = address

self.off()
self.inverse = False
self.mode = self.HORIZONTAL

self.clear()
self.on()

def on(self):
self.send_command(_DISPLAY_ON)

def off(self):
self.send_command(_DISPLAY_OFF)

def send_command(self, command):
self.bus.write_byte_data(self.address, _COMMAND_MODE, command)

def send_data(self, data):
self.bus.write_byte_data(self.address, _DATA_MODE, data)

def send_commands(self, commands):
for c in commands:
self.send_command(c)

def clear(self):
self.off()
for i in range(8):
self.set_cursor(i, 0)
self.puts(' ' * 16)

self.on()
self.set_cursor(0, 0)

@property
def inverse(self):
return self._inverse

@inverse.setter
def inverse(self, enable):
self.send_command(_INVERSE_DISPLAY if enable else _NORMAL_DISPLAY)
self._inverse = enable

@property
def mode(self):
return self._mode

@mode.setter
def mode(self, mode):
self.send_command(0x20)
self.send_command(mode)
self._mode = mode

def set_cursor(self, row, column):
self.send_command(0xB0 + row)
self.send_command(0x00 + (8*column & 0x0F))
self.send_command(0x10 + ((8*column>>4)&0x0F))

def putc(self, c):
C_add = ord(c)
if C_add < 32 or C_add > 127: # Ignore non-printable ASCII characters
c = ' '
C_add = ord(c)

for i in range(0, 8):
self.send_data(BasicFont[C_add-32][i])

def puts(self, text):
for c in text:
self.putc(c)

def show_image(self, image):
from PIL import Image
import numpy as np

im = Image.open(image)

bw = im.convert('1')
pixels = np.array(bw.getdata())
page_size = 128 * 8

self.set_cursor(0, 0)
for page in range(8):
start = page_size * page
end = start + page_size

for i in range(start, start + 128):
data = np.packbits(pixels[i:end:128][::-1])[0]
self.send_data(data)


if __name__ == "__main__":
display = GroveOledDisplay128x64(bus=2)

display.set_cursor(0, 0)
display.puts('hello')
display.set_cursor(1, 4)
display.puts('world')
  • ステップ 3: ディスクアイコンをクリックして、ファイルを .py 拡張子で保存します。

  • ステップ 4: smbus2 ライブラリをインストールします。
    sudo pip3 install smbus2

  • ステップ 5: コードを実行します。Grove - OLED が "Hello World" を出力することが確認できます。

sudo python3 Grove-OLED_Display_0.96inch.py

オンライン回路図ビューア

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品をスムーズにご利用いただけるよう、さまざまなサポートをご用意しています。お客様のご希望やニーズに応じた複数のコミュニケーションチャネルをご利用いただけます。

Loading Comments...