前回はラズパイとSEN-CCS811を組み合わせて、CO2のデータを測定する方法について紹介しました。今回はディスプレイを接続し、計測したCO2とTVOCのデータを表示させる方法について解説します。
SEN-CCS811の測定値はコンソール画面に表示できますが、いちいち参照するのは面倒です。そこでディスプレイを接続して表示させます。ディスプレイは、こちらもAmazonで販売されている「DSD TECH 2 PCS OLED 0.91インチディスプレイ IIC I2C シリアルポート ARM用」(1599円)を使います。
このディスプレイは「SSD1306」というデバイスで動いており、公開されているCircuitPythonのライブラリを使います。まずはライブラリを以下のコマンドでインストールします。
$ sudo pip3 install adafruit-circuitpython-ssd1306
このままで動作させても文字は表示されますが、日本語表示をさせるためにフォントをインストールします。以下のコマンドを入力してIPAフォントをインストールします。IPAフォントフォントはその名前の通り、情報処理推進機構が配布しています。
$ sudo apt-get install fonts-ipafont
フォントは「/usr/share/fonts/opentype/ipafont-gothic/」に、ゴシック体の「ipag.ttf」、明朝体の「ipam.ttf」としてインストールされます。これを踏まえて、まずは文字を表示させてみましょう。
プログラムは以下の通りです。18行目の「ipag.ttf」はゴシック体の指定なので、これを「ipam.ttf」にすると明朝体になります。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import board
import adafruit_ssd1306
import time
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
i2c = board.I2C()
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)
# ディスプレイの初期化
oled.fill(0)
oled.show()
image = Image.new("1", (oled.width, oled.height))
draw = ImageDraw.Draw(image)
# フォントの指定
font = ImageFont.truetype("/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf", 13)
# テキストを表示させる
draw.text((0, 0), "世界の国へこんにちは!", font=font, fill=255)
draw.text((0, 17), "Hello World!", font=font, fill=255)
oled.image(image)
oled.show()
time.sleep(5)
oled.fill(0)
oled.show()
「世界の国へこんにちは!」と「Hello World!」が5秒間表示されたでしょうか。
ではこれらを踏まえて、CO2の値をディスプレイに表示させてみましょう。前回に紹介したプログラムを改編することで作り上げていきます。プログラムは以下のようなものでした。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import board
import adafruit_ccs811
i2c = board.I2C() # uses board.SCL and board.SDA
ccs811 = adafruit_ccs811.CCS811(i2c)
# Wait for the sensor to be ready
while not ccs811.data_ready:
pass
while True:
print("CO2: {} PPM, TVOC: {} PPB".format(ccs811.eco2, ccs811.tvoc))
time.sleep(1)
この中のprint文を、ディスプレイへ表示させるように変更します。以下のようになります。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import board
import time
import adafruit_ccs811
import adafruit_ssd1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
i2c = board.I2C()
ccs811 = adafruit_ccs811.CCS811(i2c)
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)
# フォントの指定
font = ImageFont.truetype("/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf", 13)
def runCCS811():
while True:
oled.fill(0)
oled.show()
image = Image.new("1", (oled.width, oled.height))
draw = ImageDraw.Draw(image)
print("CO2: {} PPM, TVOC: {} PPB".format(ccs811.eco2, ccs811.tvoc))
time.sleep(0.1)
draw.text((0, 0), "二酸化炭素:{}PPM".format(ccs811.eco2), font=font, fill=255)
draw.text((0, 17), "有機化合物:{}PPB".format(ccs811.tvoc), font=font, fill=255)
time.sleep(0.1)
oled.image(image)
oled.show()
time.sleep(2)
if __name__ == '__main__':
try:
runCCS811()
time.sleep(0.1)
except (KeyboardInterrupt, SystemExit) as exErr:
print("\nMeasurement end")
oled.fill(0)
oled.show()
これで2秒おきに、ディスプレイ画面に二酸化炭素量とTVOCが表示されるようになります。
【訂正:2021年9月21日午前10時30分 記事初出時、OLEDについて記載している箇所で液晶ディスプレイと表記している部分がありました。訂正しておわびいたします】
部屋の二酸化炭素濃度を測定しよう ラズパイでCO2センサーを作る
550円の「Raspberry Pi Pico」でIoT その1:気温と湿度、気圧を測定する
ラズパイで「Windows 10 on ARM64」を動かす(オーバークロック編)
ラズパイで「Windows 10 on ARM64」を動かす(インストール編)
ラズパイで「Windows 10 on ARM64」を動かす(事前準備編)
ラズパイ一体型キーボード「Raspberry Pi 400」レビュー 特例制度のWeb申請で“技適なし”を回避した
ラズパイ一体型キーボード「Raspberry Pi 400」の性能は? ベンチマークテストで従来モデルと比べた
ラズパイで気温と湿度を測定、LINEで通知を受け取る 〜前編〜
ラズパイを無線LANルーター化する 〜アクセスポイント編〜
本格的な撮影が楽しめる公式カメラモジュール「Raspberry Pi High Quality Camera」を試す
ラズパイで新型コロナウイルス解析に参加する 〜Ubuntu Serverの構築編〜
ラズパイでスマートスピーカーを作る 「アレクサ!あしたの天気は?」 〜ソフトウェア準備編〜
これが“らずキャン△”だ! キャンプ場で役立つ「気温・湿度・気圧センサー」の作り方
ラズパイで「YouTube」と「Amazon プライムビデオ」を見るCopyright © ITmedia, Inc. All Rights Reserved.
Special
PR