しかし、世の中にはたくさんのセンサーが存在し、どれを購入したら良いのか迷ってしまわないでしょうか。さらにアナログ、デジタルの問題もあります。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
になります。
[youtube https://www.youtube.com/watch?v=Gd8oWEo7a-o&w=560&h=314]
アナログデジタルコンバータ
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
より本格的なアプリケーションの開発は次の記事で紹介してあります。合わせてお読みください。
]]>