著者:米田 聡
シェルスクリプトマガジンでは、小型コンピュータボード「Raspberry Pi」(ラズパイ)向けのセンサー搭載拡張ボード「ラズパイセンサーボード」を制作しました。第10 回では、I2C 接続のモノクロ有機ELディスプレイをGroveコネクタにつなぎ、ラズパイセンサーボードだけでセンサーから情報をディスプレイ上に表示します。
シェルスクリプトマガジン Vol.63は以下のリンク先でご購入できます。
図6 有機ELディスプレイに日本語を表示するためのライブラリ(OLED.py)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/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 |