Raspberry Pi Zeroを使ったCO2濃度モニタリング
先月まで結婚式の話題でしたが、久々にRaspberry Piを使った常時モニタリングの拡張に取り組んでみました。前回の記事から、3ヶ月以上経つのですね。
用意したものは以下の2つです。
・Raspberry Pi Zero
・MH-Z19 (CO2ガスセンサ)
接続は以下のとおりです。ピン配置は、こちらのページを参考にしました。既に温湿度センサや照度センサを搭載していましたが、Raspberry Piのピン数も足りました。
[Raspberry Pi] -> [MH-Z19]
・5V Power -> Vin
・Ground -> Gnd
・GPIO 14 (TXD) -> RXD
・GPIO 15 (RXD) -> TXD
そして、UART シリアル通信の設定と、mh-z19 をインストールします。設定方法は、こちらの記事を参考にしました。
あとはコードを書くだけです。温湿度計作りの記事で、Raspberry PiのUploadのコードを書いたので、mh-z19のコードを追加するだけで実装できました。
【Web_Upload.py】
import requests import json import smbus import time import Adafruit_DHT as DHT import csv import mh_z19 from datetime import datetime def uploadSensorValues(temp, hum, lux, co2): url = 'http://XXXXXXXXXXX.php.xdomain.jp/sql.php' sensorsdata = {'datetime':datetime.now().strftime("%Y/%m/%d %H:%M:%S"),'temp':temp,'hum':hum,'lux':lux, 'co2':c$ print (json.dumps(sensorsdata)) headers = {'content-type': 'application/json'} res = requests.post(url, data=json.dumps(sensorsdata), headers=headers, verify=False) print (res.text) print (res.status_code) pass def main(): #1.LUX bus = smbus.SMBus(1) addr = 0x23 lux = bus.read_i2c_block_data(addr,0x10) lux_value = (lux[0]*256+lux[1])/1.2 print("lux= {}".format(lux_value)) #2.temp + hum SENSOR_TYPE = DHT.DHT22 DHT_GPIO = 22 h,t = DHT.read_retry(SENSOR_TYPE, DHT_GPIO) print("Temp= {0:0.1f} deg C" . format(t)) print("Humidity= {0:0.1f} %" . format(h)) #3.CO2 co2_conc = mh_z19.read()['co2'] print("CO2= {0:0.1f} ppm".format(co2_conc)) #4.data trasnmit uploadSensorValues(t, h, lux_value, co2_conc) if __name__ == '__main__': main()
受け手側も更新します。
送信データにCO2センサを追加しましたので、MySQLを更新します。
CREATE TABLE `Sensor_Values2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `temp` float NOT NULL, `hum` float NOT NULL, `lux` float NOT NULL, `co2` float NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
phpの表示系コードは省略させて頂きます。前回記事のコードに、CO2センサを追加しました。出力結果がこちらです↓
緑線がCO2ガスセンサになります。それらしい出力できていますね!一般に、CO2濃度は1,000 ppm未満に保つとよいそうです。日中窓を開けていたので、この日は1,000 ppmを超えることはありませんでした。窓を全て閉めると、2時間程度で1,000 ppmを超えてしまうようです。
換気した際に、湿度や温度のデータと連動して動くのも面白いですね。
換気が必要なタイミングを把握するために、積極的に使っていきたいと思います!!(^^♪