著者:米田 聡
シェルスクリプトマガジンでは、小型コンピュータボード「Raspberry Pi」(ラズパイ)向けのセンサー搭載拡張ボード「ラズパイセンサーボード」を制作しました。第10 回では、I2C 接続のモノクロ有機ELディスプレイをGroveコネクタにつなぎ、ラズパイセンサーボードだけでセンサーから情報をディスプレイ上に表示します。
シェルスクリプトマガジン Vol.63は以下のリンク先でご購入できます。![]()
![]()
図6 有機ELディスプレイに日本語を表示するためのライブラリ(OLED.py)
import time
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
class OLED(Adafruit_SSD1306.SSD1306_128_64):
WIDTH = 128
HEIGHT = 64
# DEFAULT_FONT = '/usr/share/fonts/truetype/fonts-japanese-gothic.ttf'
DEFAULT_FONT = '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc'
FONT_SIZE = 12
_LINE_HEIGHT = 16
def __init__(self):
super().__init__(rst=24)
self._image = Image.new('1', (self.WIDTH, self.HEIGHT) ,0)
self._draw = ImageDraw.Draw(self._image)
self._font = ImageFont.truetype(self.DEFAULT_FONT, self.FONT_SIZE, encoding='unic')
def image(self, image):
self._image = image
super().image(self._image)
def drawString(self, str, line=0):
self._draw.rectangle((0, line*self._LINE_HEIGHT, self.WIDTH,line*self._LINE_HEIGHT+self._LINE_HEIGHT), fill=(0))
self._draw.text((0, line*self._LINE_HEIGHT), str, font=self._font, fill=1)
self.image(self._image)
図7 BME280のデータを表示するサンプルプログラム(sample.py)
#!/usr/bin/env python3
#
# apt install python3-pip
# sudo pip3 install RPi.BME280
#
import time
import smbus2
import bme280
from OLED import OLED
BME280_ADDR = 0x76
BUS_NO = 1
# BME280
i2c = smbus2.SMBus(BUS_NO)
bme280.load_calibration_params(i2c, BME280_ADDR)
# OLEDパネル
oled = OLED()
oled.begin()
oled.clear()
oled.display()
try:
while True:
data = bme280.sample(i2c, BME280_ADDR)
oled.drawString('気温 :' + str(round(data.temperature,1)) + '℃', 0)
oled.drawString('湿度 :' + str(round(data.humidity,1)) + '%', 1)
oled.drawString('気圧 :' + str(round(data.pressure,1)) + 'hPa', 2)
oled.display()
time.sleep(1)
except KeyboardInterrupt:
pass