Air quality monitor ・ 空气质量监测
PM2.5粒子状物質とTVOC/eCO2をI2Cセンサーで測定。PaHub経由で接続。
この構成をエディタで開く・編集する →| 部品 | 役割 | ポート | リンク・価格 |
|---|---|---|---|
| M5Stack Core2 | Controller | grove_i2c, grove_analog, grove_uart, mbus | official page — $46.9 |
| Unit PaHub2 | I2C hub (1→6) | grove_i2c | official page — $7.95 |
| Module Air Quality (PM2.5) | PM2.5 sensor | mbus, i2c | official page — $31.9 |
| Unit Mini TVOC/eCO2 (SGP30) | TVOC/eCO2 sensor | grove_i2c | official page — $10.95 |
M5Stack Core2とPaHub2、PM2.5モジュール、TVOC/eCO2ユニットを使った空気品質モニターです。PaHub2でI2Cバスを拡張し、2つのセンサーを同時に接続します。PM2.5モジュールはM-Bus経由、TVOCユニットはGrove I2C経由でPaHub2に接続します。Core2の画面にPM2.5、TVOC、eCO2の値を表示します。
# M5Stack Core2 + PaHub2 + PM2.5 (PMSA003) + TVOC/eCO2 (SGP30)
# Wiring: Core2 Port.A -> PaHub2 IN
# PaHub2 CH1 -> PM2.5 Module (via M-Bus to Grove)
# PaHub2 CH2 -> TVOC Unit
import time
from machine import Pin, I2C
from m5stack import lcd
# Initialize I2C on Core2 Port.A (default pins: scl=22, sda=21)
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
# TCA9548A address (PaHub2)
TCA_ADDR = 0x70
def select_channel(ch):
"""Select a channel on the PaHub2 (0-5)."""
i2c.writeto(TCA_ADDR, bytes([1 << ch]))
# PMSA003 I2C address (PM2.5 module)
PMSA_ADDR = 0x12
# SGP30 I2C address (TVOC unit)
SGP30_ADDR = 0x58
def read_pm25():
"""Read PM2.5 value from PMSA003 (channel 0)."""
select_channel(0)
time.sleep_ms(10)
# Request data (command 0xe1, 0x00)
i2c.writeto(PMSA_ADDR, bytes([0xe1, 0x00]))
time.sleep_ms(10)
data = i2c.readfrom(PMSA_ADDR, 32)
if len(data) >= 12:
pm25 = data[6] * 256 + data[7]
return pm25
return 0
def read_sgp30():
"""Read TVOC and eCO2 from SGP30 (channel 1)."""
select_channel(1)
time.sleep_ms(10)
# Send measure command (0x20, 0x08)
i2c.writeto(SGP30_ADDR, bytes([0x20, 0x08]))
time.sleep_ms(50) # wait for measurement
data = i2c.readfrom(SGP30_ADDR, 6)
if len(data) == 6:
eco2 = data[0] * 256 + data[1]
tvoc = data[3] * 256 + data[4]
return tvoc, eco2
return 0, 0
while True:
pm25 = read_pm25()
tvoc, eco2 = read_sgp30()
lcd.clear()
lcd.print('PM2.5: %d ug/m3' % pm25, 10, 20)
lcd.print('TVOC: %d ppb' % tvoc, 10, 60)
lcd.print('eCO2: %d ppm' % eco2, 10, 100)
time.sleep(2)
この作り方はAIが構成から生成したものです(未検証)。通電前に配線とコードをご確認ください。
この構成はAIが実在するM5Stack部品から設計し、ポート互換をサーバで検証したものです。編集・共有できます。
エディタで開く →UnitKit は M5Stack® 製品向けの非公式ツール。作りたいものを書くと、部品リストと配線図が出ます。