ITmedia NEWS > STUDIO >
連載
» 2020年11月21日 07時00分 公開

名刺サイズの超小型PC「ラズパイ」で遊ぶ(第30回):ラズパイの拡張ボード「Sense HAT」で温度や湿度、気圧を測定してみよう

気温や湿度、気圧の他、ジャイロスコープ、磁気センサー、加速度センサーを搭載しているラズパイ向け拡張ボード「HAT」で、温度や湿度、気圧を測定する方法を紹介します。

[岩泉茂,ITmedia]

 ラズパイで温度や湿度、気圧を測定する方法については第1回から第3回第26回から第27回第28回と紹介してきましたが、前回から取り上げている拡張ボード「Sense HAT」のセンサーでも同様に測定できます。前回と同様にラズベリーパイ財団のWebサイトを参考にして手順を紹介します。

Sense HAT Raspberry Pi 3/4 Moddel Bにちょうどよい「Sense HAT」

 Sense HATには、第28回で解説したような、温度と湿度、気圧を測定するためのライブラリが用意されています。以下のように指定するだけで値を得ることができます。

温度:sense.get_temperature()
湿度:sense.get_humidity()
気圧:sense.get_pressure()

 なおSense HATに取り付けられているのは湿度センサーと気圧センサーだけで、このどちらかから温度の値を得ることになります。値を得るのは「get_temperature_from_humidity()」もしくは「get_temperature_from_pressure()」と記述しますが、「sense.get_temperature()」と省略した場合は湿度センサーからの値を得るようになっています。

温度を測定する

 ではまず、Sense HATから温度の値を得てみましょう。以下のようにプログラムを記述して「temp.py」などのように名前を付けて保存したら起動してみましょう。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
temp = sense.get_temperature()
print(temp)

 保存したら以下のコマンドをコンソールから入力します。

$ python temp.py
35.5952529907

 上記のように温度が表示されればOKです。なおSense HATはラズパイ本体の直上に取り付けるため、SoCの発熱によってあたためられてしまって正確な気温を測れません。このため“温度”と記述してきたのですが、正しい値を得たい場合は、以前紹介したようなBME280やSHT31といったセンサーを取り付けて測定した方が良いでしょう。

湿度を測定する

 では同様にSense HATから湿度の値を得てみましょう。以下のようなプログラムを記述して「hum.py」のように名前を付けて保存します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
humidity = sense.get_humidity()
print(humidity)

 続いてプログラムを動かしてみましょう。

$ python hum.py
36.5212097168

 コンソールに測定した湿度が表示されればOKです。

気圧を測定する

 最後に気圧の測定値を表示させてみましょう。以下のようなプログラムを記述して「pressure.py」などの名前で保存します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
pressure = sense.get_pressure()
print(pressure)

 プログラムを動かします。

$ python pressure.py
1024.57421875

 測定した気圧の値が表示されます。

Sense HATに測定値を表示させる

 この3つを踏まえて、Sense HATで測定した結果を表示させてみましょう。まずは温度と湿度、気圧の値すべてをコンソール上に表示させてみます。以下のようなプログラムを記述します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
temp = round( sense.get_humidity(),2 )
humi = round( sense.get_temperature(),2)
pres = round( sense.get_pressure(),2 )
print ('Temp : %.2f ℃' %temp)
print ('Humi : %.2f %' %humi)
print ('Pres : %.2f hP' %pres)

 ここではSense HATで測定された値をround関数で小数点以下第2位までの値を四捨五入しています。これを「sensehat.py」のように名前を付けて保存し、以下のコマンドでプログラムを動かします。

$ python sensehat.py
Temp : 34.13 ℃
Humi : 36.20 %
Pres : 1024.79 hP

 温度と湿度、気圧が表示されます。

 では続いて、Sense HATのLEDに測定した結果が表示されるようにします。表示するためには「sense.show_message」を使います。なお文字列となるように、測定結果を「str」関数で変換します。プログラムは以下のようになります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
try:
    while True:
      # 温度と湿度、気圧を測定
      t = sense.get_temperature()
      p = sense.get_pressure()
      h = sense.get_humidity()
      # 小数点以下第1位に四捨五入
      t = round(t, 1)
      p = round(p, 1)
      h = round(h, 1)
      # 文字表示内容の設定
      # str() converts the value to a string so it can be concatenated
      message = "Temperature: " + str(t) + " Humidity: " + str(h) + " Pressure: " + str(p)
      # スクロールメッセージを表示
      sense.show_message(message, scroll_speed=0.05)
except KeyboardInterrupt:
      sense.clear()

 「while True」によって無限ループで文字列が表示されるほか、「except KeyboardInterrupt」でCtrl+Cを押すとプログラムが終了するようにしています。またSense HATの表示を初期化するために、最後に「sense.clear()」を入れます。これがないとSense HAT上に文字がずっと表示された状態になってしまうためです。

 このプログラムを「thp.py」などとして保存したら、以下のコマンドを入力してプログラムを起動します。

$ python thp.py

 Sense HATのLEDに温度と湿度、気圧が表示され、右から左にスクロールしましたでしょうか。スクロールの速度は「sense.show_message(message, scroll_speed=0.05)」の「scroll_speed」に入力されている数値を変更すれば変えられます。

測定値により表示色を変更する

 ラズベリーパイ財団のSense HAT解説ページによると、国際宇宙ステーション(ISS)の気温は18.3度〜26.7度に設定されているそうです。そこでこの気温の間に入っているときは背景が緑色、はずれた場合は赤色で表示するようにしてみましょう。先ほどのthp.pyにif文を付け加えて温度範囲を設定し、文字の色を変更させます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
# 色の設定
red = (255, 0, 0)
green = (0, 255, 0)
try:
    while True:
      # セ温度と湿度、気圧を測定
      t = sense.get_temperature()
      p = sense.get_pressure()
      h = sense.get_humidity()
      # 小数点以下第1位に四捨五入
      t = round(t, 1)
      p = round(p, 1)
      h = round(h, 1)
  
    # 文字表示内容の設定
      message = "Temperature: " + str(t) + " Pressure: " + str(p) + " Humidity: " + str(h)
  
    # 値の範囲を指定
      if t > 18.3 and t < 26.7:
        bg = green
      else:
        bg = red
  
      # スクロールメッセージを表示
      sense.show_message(message, scroll_speed=0.05, back_colour=bg)
except KeyboardInterrupt:
      sense.clear()

 記述したら「tempcolor.py」などのように名前を付けて保存して、以下のようにコンソールへ入力してプログラムを起動しましょう。

$ python tempcolor.py

 測定値が18.3度〜26.7度の場合はバックが緑、それ以外の時は赤で表示されましたでしょうか。

 Sense HATの湿度、気圧センサーでさまざまな測定ができることはおわかりいただけましたでしょうか。気温を正確に測定できない点はちょっと残念ですが、そのほかのセンサーも付けられているので、いろいろと応用はできそうです。

Copyright © ITmedia, Inc. All Rights Reserved.