ラズパイでCO2/気圧/温度/湿度/ガスの総合測定+モニタリング【Ambient】
以前の記事で複合センサーBME680とCO2センサーMH-Z19BをRaspberry Piで使用するところまではやりました。
jakejake.hatenablog.com
jakejake.hatenablog.com
今回はそれらのセンサーの取得値(CO2/気圧/温度/湿度/有機ガス)をまとめて測定し、スマホから好きな時に確認出来るようにしたいと思います。
配線
ラズパイ側 | BME680 | MH-Z19B |
---|---|---|
3V3 |
CN1(Vin) |
-- |
SCL1(3pin) |
CN2(SCL) |
-- |
SDA1(2pin) |
CN3(SDA) |
-- |
GND |
CN4(GND) |
GND(黒線) |
5V0 |
-- |
VCC(赤線) |
TXD0(14pin) |
-- |
RX(青線) |
RXD0(15pin) |
-- |
TX(黄線) |
※pinはGPIO番号です。
モニタリング
モニタリングにはAmbientを使わせて頂きました。一見難しそうですが利用は非常にシンプルで簡単でした。
ambidata.io
サインイン後、pythonライブラリーをインストールし、コードを数行付け足すだけで使用することが出来ます。
ambidata.io
コード全体
#bme680_and_CO2.py #!/usr/bin/env python import bme680 import time print("""read-all.py - Displays temperature, pressure, humidity, and gas. Press Ctrl+C to exit! """) try: sensor = bme680.BME680(bme680.I2C_ADDR_PRIMARY) except IOError: sensor = bme680.BME680(bme680.I2C_ADDR_SECONDARY) # These calibration data can safely be commented # out, if desired. print('Calibration data:') for name in dir(sensor.calibration_data): if not name.startswith('_'): value = getattr(sensor.calibration_data, name) if isinstance(value, int): print('{}: {}'.format(name, value)) # These oversampling settings can be tweaked to # change the balance between accuracy and noise in # the data. sensor.set_humidity_oversample(bme680.OS_2X) sensor.set_pressure_oversample(bme680.OS_4X) sensor.set_temperature_oversample(bme680.OS_8X) sensor.set_filter(bme680.FILTER_SIZE_3) sensor.set_gas_status(bme680.ENABLE_GAS_MEAS) print('\n\nInitial reading:') for name in dir(sensor.data): value = getattr(sensor.data, name) if not name.startswith('_'): print('{}: {}'.format(name, value)) sensor.set_gas_heater_temperature(320) sensor.set_gas_heater_duration(150) sensor.select_gas_heater_profile(0) # Up to 10 heater profiles can be configured, each # with their own temperature and duration. # sensor.set_gas_heater_profile(200, 150, nb_profile=1) # sensor.select_gas_heater_profile(1) n=0 print('\n\nPolling:') try: while n<5: if sensor.get_sensor_data(): output = '{0:.2f} C,{1:.2f} hPa,{2:.2f} %RH'.format( sensor.data.temperature, sensor.data.pressure, sensor.data.humidity) if sensor.data.heat_stable: print('{0},{1} Ohms'.format( output, sensor.data.gas_resistance)) else: print(output) time.sleep(1) n=n+1 except KeyboardInterrupt: pass temp_bmp = sensor.data.temperature hum_bmp = sensor.data.humidity press_bmp = sensor.data.pressure gas_bmp = sensor.data.gas_resistance ############################CO2######################################### import mh_z19 co2read = mh_z19.read_all() co2 = co2read["co2"] temp_co2 = co2read["temperature"] print(co2,temp_co2) ############################RasPi######################################### ############################Ambient##################################### import ambient ambi = ambient.Ambient(チャネルId, ライトキー) r = ambi.send({"d1": temp_bmp, "d2": hum_bmp, "d3": press_bmp, "d4": gas_bmp, "d5": co2, "d6": temp_co2, "d7": humid, "d8": humid})
定期実行
crontabにて5分毎に上記プログラムを実行するように設定しました。Ambientサーバーへの送信も5分に一度行われるようになっています。
*/5 * * * * python3 /home/pi/bme680_and_CO2.py
モニタリング状況
●PCから確認
●スマホから確認
無事各種センサーの測定値がモニタリング出来ました!