M5StackでTVOCモニター

TVOC air monitor ・ TVOC监测

SGP30 センサーで TVOC と eCO2 を測定します。

この構成をエディタで開く・編集する →

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
Unit Mini TVOC/eCO2 (SGP30)TVOC/eCO2 sensorgrove_i2cofficial page — $10.95

配線

作り方

M5Stack Core2とSGP30センサーを使って、室内の空気質(TVOCとeCO2)を測定するモニターです。Core2の画面に数値を表示し、空気の状態をひと目で確認できます。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、Unit Mini TVOC/eCO2 (SGP30)、Groveケーブル(4ピン、ユニットに付属)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. Groveケーブルでつなぐ — SGP30ユニットはI2C通信(赤色ポート)を使います。Groveケーブルの一端をユニットに、もう一端をCore2の赤いPort.A(I2Cポート)に差し込みます。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  4. 動作を確認する — コードを実行すると、Core2の画面にTVOC(ppb)とeCO2(ppm)の値が表示されます。センサーの前で息を吹きかけると、値が上昇するはずです。数値が安定するまで数分かかることがあります。

サンプルコード(micropython)

# M5Stack Core2 + SGP30 TVOC/eCO2 Monitor
# Wiring: SGP30 Unit -> Core2 red Port.A (I2C)
import time
from machine import Pin, I2C
from m5stack import lcd

# I2C on Port.A: scl=22, sda=21
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)

# SGP30 I2C address is 0x58
SGP30_ADDR = 0x58

# Initialize SGP30: send init command (0x20, 0x03)
i2c.writeto(SGP30_ADDR, bytes([0x20, 0x03]))
time.sleep(0.1)

# Read serial number (optional)
i2c.writeto(SGP30_ADDR, bytes([0x36, 0x82]))
time.sleep(0.01)
data = i2c.readfrom(SGP30_ADDR, 9)
print('Serial:', data.hex())

def read_sgp30():
    # Trigger measurement: command 0x20, 0x08
    i2c.writeto(SGP30_ADDR, bytes([0x20, 0x08]))
    time.sleep(0.05)  # wait for measurement
    # Read 6 bytes: TVOC (2) + CRC (1) + eCO2 (2) + CRC (1)
    data = i2c.readfrom(SGP30_ADDR, 6)
    # CRC check skipped for simplicity
    eco2 = (data[0] << 8) | data[1]
    tvoc = (data[3] << 8) | data[4]
    return tvoc, eco2

while True:
    try:
        tvoc, eco2 = read_sgp30()
        lcd.clear()
        lcd.print('TVOC: %d ppb' % tvoc, 10, 20)
        lcd.print('eCO2: %d ppm' % eco2, 10, 60)
    except Exception as e:
        lcd.print('Error: %s' % e, 10, 20)
    time.sleep(2)

コツ・安全上の注意

この作り方はAIが構成から生成したものです(未検証)。通電前に配線とコードをご確認ください。

この構成はAIが実在するM5Stack部品から設計し、ポート互換をサーバで検証したものです。編集・共有できます。

エディタで開く →

UnitKit は M5Stack® 製品向けの非公式ツール。作りたいものを書くと、部品リストと配線図が出ます。