IoTプロジェクトにおいて大事なのがセンサーです。Raspberry PiやArduino単体でも多少の遊びはできますが、実用的に使うためにはセンサーの存在が欠かせません。

しかし、世の中にはたくさんのセンサーが存在し、どれを購入したら良いのか迷ってしまわないでしょうか。さらにアナログ、デジタルの問題もあります。Raspberry Piではアナログデータを扱うことができないので、アナログセンサーを使う場合にはADC(アナログからデジタルデータに変換するコンバータ, ADコンバーター)も必要になります。これらの準備だけでも疲れてしまうことでしょう。

そんな方にお勧めしたいのが今回紹介するEnviro+というHATです。多くの方達が欲しいと思うであろうセンサー群がたった一枚のHATに収まった製品です。

Enviro+が対応しているセンサー

まずはどんなセンサーが積まれているのか紹介します。

  • BME280
    温度、気圧、湿度
  • LTR-559
    光、近接
  • MiCS-6814
    ガス
  • ADS1015
    アナログ・デジタル・コンバータ
  • MEMS
    マイクロフォン、ノイズ
  • LCD
    カラー、0.96インチ

この他、PM2.5センサー用のコネクタも付属しています。標準でも温度や気圧、湿度、明るさなどが取れ、さらにそれをカラーのLCDへ出力できます。近接センサーをトリガーにして何らかの処理を実行するといったことも簡単にできます。

Enviro+のセットアップ

Enviro+ではPythonモジュールが標準で提供されています。

$ sudo apt-get update
$ sudo apt-get upgrade
$ git clone https://github.com/pimoroni/enviroplus-python
$ cd enviroplus-python
$ sudo ./install.sh

ここまで終わったら一旦再起動します。

$ sudo reboot

これでセットアップは完了です。

各センサーの動作確認

温度、気圧、湿度を取る

まずは温度、気圧、湿度を取ってみます。先ほどの enviroplus-python ディレクトリの中に examples があり、weather.py を実行するだけです。

$ python weather.py 
weather.py - Print readings from the BME280 weather sensor.

Press Ctrl+C to exit!


Temperature: 22.05 *C
Pressure: 655.63 hPa
Relative humidity: 63.81 %

コードを見ても、その内容はとても簡単なのが分かります。

#!/usr/bin/env python

import time
from bme280 import BME280

try:
    from smbus2 import SMBus
except ImportError:
    from smbus import SMBus

print("""weather.py - Print readings from the BME280 weather sensor.

Press Ctrl+C to exit!

""")

bus = SMBus(1)
bme280 = BME280(i2c_dev=bus)

while True:
    temperature = bme280.get_temperature()
    pressure = bme280.get_pressure()
    humidity = bme280.get_humidity()
    print("""Temperature: {:05.2f} *C
Pressure: {:05.2f} hPa
Relative humidity: {:05.2f} %
""".format(temperature, pressure, humidity))
    time.sleep(1)

温度の取得は bme280.get_temperature() だけで実現できているのが分かります。

近接センサーの使い方

続いて光、近接センサーです。こちらは同じくexamples中にある light.py を実行します。初期値は 0ルクスですが、その後438ルクスになっています。手をかざすと119ルクスまで落ちています。その代わりに近接センサーの値が上がっています。

$ python light.py 
light.py - Print readings from the LTR559 Light & Proximity sensor.

Press Ctrl+C to exit!


Light: 00.00 Lux
Proximity: 00.00

Light: 438.16 Lux
Proximity: 00.00

Light: 119.10 Lux
Proximity: 354.00

こちらのコードもとても簡単です。 ltr559.get_lux() で明るさ、 ltr559.get_proximity() で近接センサーの値が取得できます。

#!/usr/bin/env python

import time
import ltr559

print("""light.py - Print readings from the LTR559 Light & Proximity sensor.

Press Ctrl+C to exit!

""")

try:
    while True:
        lux = ltr559.get_lux()
        prox = ltr559.get_proximity()
        print("""Light: {:05.02f} Lux
Proximity: {:05.02f}
""".format(lux, prox))
        time.sleep(1.0)
except KeyboardInterrupt:
    pass

ガスセンサーについて

ガスはデータシートによれば以下を判別できるようです。

  • 一酸化炭素(CO)
  • 二酸化窒素(NO2)
  • 水素(H2)
  • アンモニア(NH3)
  • メタン(CH4)
  • エタノール(C2H5OH)
  • プロパン(C3H8)
  • イソブタン(C4H10)

手元にそれらのガスがないので確認できていないですが、 gas.py を実行すると分かるようです。

LCDについて

LCDはPIL(Python用の画像ライブラリ)を使って、画像として出力した内容を表示してくれます。カラーに対応しているので幅広い表現が可能でしょう。近接センサーの値でLCDの表示を変えているのが分かるでしょうか。このスクリプトは lcd.py になります。

アナログデジタルコンバータ

Enviro+にはIOピンがついていますので、アナログデータを取り込めるようになっています。とても簡単です。 adc.py のコードを見れば使い方はすぐに分かるでしょう。

#!/usr/bin/env python

import time
from enviroplus import gas

print("""adc.py - Print readings from the MICS6814 Gas sensor.

Press Ctrl+C to exit!

""")

gas.enable_adc()
gas.set_adc_gain(4.096)

try:
    while True:
        readings = gas.read_all()
        print(readings)
        time.sleep(1.0)
except KeyboardInterrupt:
    pass

まとめ

これだけのセンサーが詰まったHATが45ユーロ(約5,500円)+送料で手に入ってしまうのは驚くべきことです。多くのIoTプロジェクトで使えますし、拡張性も十分にあります。自然環境情報を使ったIoTプロジェクトで活躍してくれるのではないでしょうか。

Enviro+ for Raspberry Pi – Monitor your world. – Pimoroni Store

より本格的なアプリケーションの開発は次の記事で紹介してあります。合わせてお読みください。

Enviro+ と Firebase🔥でホームセキュリティのプロトタイプ開発


0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *