Sleep environment logger ・ 睡眠环境记录
ENV III と CO2 ユニットで寝室の温度・湿度・CO2 を記録します。I2C ハブで接続。
この構成をエディタで開く・編集する →| 部品 | 役割 | ポート | リンク・価格 |
|---|---|---|---|
| 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 |
| Unit ENV III | Temp / humidity / pressure | grove_i2c | official page — $5.95 |
| Unit CO2 | CO2 sensor | grove_i2c | official page — $33.9 |
寝室の温度・湿度・CO2濃度を記録するモニターです。ENV IIIユニットで温度と湿度、CO2ユニットでCO2濃度を測定します。2つのI2Cユニットを同時に使うため、PaHub2でI2Cバスを増やします。Core2の画面にリアルタイムで値を表示します。
# Bedroom environment monitor (temp/humidity/CO2)
# Wiring: Core2 Port.A -> PaHub2 IN, PaHub2 CH0 -> ENV III, PaHub2 CH1 -> CO2 unit
import time
from machine import Pin, I2C
from m5stack import lcd
# Initialize I2C on Core2 Port.A (pins 21=SDA, 22=SCL)
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
# TCA9548A multiplexer address (default 0x70)
MUX_ADDR = 0x70
def select_channel(ch):
"""Enable one channel on the multiplexer."""
i2c.writeto(MUX_ADDR, bytes([1 << ch]))
def read_sht30():
"""Read temperature and humidity from SHT30 on ENV III (addr 0x44)."""
select_channel(0)
# Send measurement command (0x2C, 0x06) for high repeatability
i2c.writeto(0x44, bytes([0x2C, 0x06]))
time.sleep_ms(50)
data = i2c.readfrom(0x44, 6)
# Convert raw data
raw_temp = (data[0] << 8) | data[1]
temp = -45.0 + 175.0 * raw_temp / 65535.0
raw_hum = (data[3] << 8) | data[4]
hum = 100.0 * raw_hum / 65535.0
return temp, hum
def read_scd40():
"""Read CO2, temperature, humidity from SCD40 on CO2 unit (addr 0x62)."""
select_channel(1)
# Send read measurement command (0xEC, 0x05)
i2c.writeto(0x62, bytes([0xEC, 0x05]))
time.sleep_ms(50)
data = i2c.readfrom(0x62, 12)
# Convert CO2
co2 = (data[0] << 8) | data[1]
# Convert temperature (raw = value * 175 / 65535 - 45)
raw_temp = (data[3] << 8) | data[4]
temp = -45.0 + 175.0 * raw_temp / 65535.0
# Convert humidity
raw_hum = (data[6] << 8) | data[7]
hum = 100.0 * raw_hum / 65535.0
return co2, temp, hum
while True:
try:
temp_env, hum_env = read_sht30()
co2, temp_co2, hum_co2 = read_scd40()
lcd.clear()
lcd.print('Bedroom Monitor', 10, 10)
lcd.print('ENV III:', 10, 40)
lcd.print('Temp: %.1f C' % temp_env, 10, 60)
lcd.print('Hum: %.1f %%' % hum_env, 10, 80)
lcd.print('CO2 Unit:', 10, 110)
lcd.print('CO2: %d ppm' % co2, 10, 130)
lcd.print('Temp: %.1f C' % temp_co2, 10, 150)
lcd.print('Hum: %.1f %%' % hum_co2, 10, 170)
except Exception as e:
lcd.clear()
lcd.print('Error: %s' % str(e), 10, 20)
time.sleep(5)
この作り方はAIが構成から生成したものです(未検証)。通電前に配線とコードをご確認ください。
この構成はAIが実在するM5Stack部品から設計し、ポート互換をサーバで検証したものです。編集・共有できます。
エディタで開く →UnitKit は M5Stack® 製品向けの非公式ツール。作りたいものを書くと、部品リストと配線図が出ます。