忍者ブログ

設備のマニアどっとこむ

IoT開発、設備・DIYのブログ!

ENS160+AHT21基板で二酸化炭素濃度計をつくった話

ラズパイでさまざまなセンサーを取り扱ってきましたが、CO2センサーはやってていなかったので買ってみました。


CCS811が主流みたいですが、後続版?のENS160の基板を購入しています。
https://amzn.to/3W6fMLW



ちょっとピン配置は難しいのですが、VINに5V SDAを2ピン SCLを3ピン GNDをラズパイのgroundに接続します。はじめ3.3Vにつないでいたのですが、I2C通信ができませんでした。ラズパイ5だけかもしれませんが注意が必要です。

そして下記コマンドをLXterminalにて入力します。


 sudo i2cdetect 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --






53と38が認識されればOKです。

あとはpythonのライブラリをインストールします。

https://pypi.org/project/ens160/

下記コマンドにてインストールします。
pip install ens160  

あとは下記サンプルコードでCO2濃度が取得できます。
import sys
from time import sleep
from ens160 import Driver, OpModes
from ens160.i2c import SMBusRetryingI2C
dev = Driver(SMBusRetryingI2C(0x53, 1))
dev.init()
part_id = dev.get_part_id()
if part_id != Driver.PART_ID:
    print(f"Part not found, expected {Driver.PART_ID} got {part_id}.")
    sys.exit(-1)
print(f"Part Id {part_id}")
print(f"Firmware version {dev.get_fw_version()}")
dev.set_rh_compensation(55.0)
dev.set_temp_compensation_fahrenheit(72.5)
print(dev.get_device_status())
dev.set_operating_mode(OpModes.STANDARD)
print("Operating Mode: ", dev.get_operating_mode())
while True:
    status = dev.get_device_status()
    print(status)
    if status.new_data:
        print(
            f"AQI={dev.get_aqi()}, eCO2={dev.get_eco2()}ppm, TVOC={dev.get_tvoc()}ppb"
        )
    else:
        sleep(0.1)

関数としてはdev.get_eco2()が二酸化炭素濃度[ppm]です。





拍手[0回]

PR

コメント

ただいまコメントを受けつけておりません。

翻訳(Translate)

プロフィール

HN:
佐々木 雅史
性別:
男性
自己紹介:
2021年 ラズパイ、M5stackを用いたIoT開発を専門で受注するアルティメンテを設立。代表を務める。
・2020年ラズパイコンテスト優良賞受賞
・設備系資格多数(電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士補(電気・電子)、エネ電、フォークリフトなど)

AD

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30