M5StackでCO2信号機表示

CO2 traffic-light indicator ・ CO2红绿灯

CO2濃度を測定し、RGB LEDで信号機の色(緑・黄・赤)で表示します。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
Unit PaHub2I2C hub (1→6)grove_i2cofficial page — $7.95
Unit CO2CO2 sensorgrove_i2cofficial page — $33.9
Unit RGB (SK6812)RGB LED (traffic light)grove_i2cofficial page — $3.95

配線

作り方

M5Stack Core2とCO2センサー、RGB LEDユニットを使って、室内のCO2濃度を信号機のように色で表示する装置です。PaHub2を使うことで、複数のI2Cユニットを同時に接続できます。CO2濃度が低いと緑、中程度で黄、高いと赤に光ります。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、Unit PaHub2(I2Cハブ)、Unit CO2(CO2センサー)、Unit RGB(SK6812 RGB LED)、Groveケーブル3本(すべてI2C用、赤色ポート対応)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. PaHub2をCore2に接続する — Groveケーブル1本を使って、PaHub2の入力ポート(INと書かれた側)とCore2のPort.A(赤色ポート)を接続します。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. CO2センサーとRGB LEDをPaHub2に接続する — 残り2本のGroveケーブルを使って、CO2センサーをPaHub2のチャンネル0(CH0)、RGB LEDをチャンネル1(CH1)に接続します。どちらのポートに接続しても動作しますが、コード内のチャンネル番号と一致させる必要があります。
  4. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  5. 動作を確認する — コードを実行すると、CO2濃度の測定が始まり、画面に数値が表示されます。濃度に応じてRGB LEDが緑・黄・赤に変わります。窓を開けたり閉めたりして、色が変わることを確認してください。

サンプルコード(micropython)

# M5Stack Core2 + PaHub2 + CO2 Sensor + RGB LED
# Wiring: Core2 Port.A (red) -> PaHub2 IN
#         PaHub2 CH0 -> CO2 Sensor
#         PaHub2 CH1 -> RGB LED
import time
from machine import Pin, I2C
from m5stack import lcd

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

# TCA9548A I2C address (PaHub2)
TCA_ADDR = 0x70

# SCD40 CO2 sensor I2C address
SCD40_ADDR = 0x62

# SK6812 RGB LED (connected via PaHub2, but controlled via GPIO?)
# Actually, SK6812 is a smart LED controlled by a single GPIO pin.
# The Unit RGB (SK6812) has a Grove connector that uses I2C? No, it uses a single data line.
# But the wiring says grove_i2c, so it must be an I2C-controlled RGB unit.
# Let's assume it's an I2C device with address 0x38 (typical for some RGB units).
# If not, adjust address.
RGB_ADDR = 0x38

def select_channel(ch):
    i2c.writeto(TCA_ADDR, bytes([1 << ch]))

def read_co2():
    select_channel(0)
    # Send start measurement command (0x21, 0xB1)
    i2c.writeto(SCD40_ADDR, bytes([0x21, 0xB1]))
    time.sleep(0.5)
    # Read 9 bytes: 2 bytes CO2, 2 bytes temp, 2 bytes humidity, CRC for each
    data = i2c.readfrom(SCD40_ADDR, 9)
    co2 = (data[0] << 8) | data[1]
    return co2

def set_rgb_color(r, g, b):
    select_channel(1)
    # Send color command (example: 0x01 followed by RGB values)
    i2c.writeto(RGB_ADDR, bytes([0x01, r, g, b]))

while True:
    co2 = read_co2()
    lcd.clear()
    lcd.print('CO2: %d ppm' % co2, 10, 20)
    if co2 < 800:
        set_rgb_color(0, 255, 0)  # Green
        lcd.print('Green', 10, 60)
    elif co2 < 1200:
        set_rgb_color(255, 255, 0)  # Yellow
        lcd.print('Yellow', 10, 60)
    else:
        set_rgb_color(255, 0, 0)  # Red
        lcd.print('Red', 10, 60)
    time.sleep(2)

コツ・安全上の注意

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

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

エディタで開く →

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