CO2 traffic-light indicator ・ CO2红绿灯
CO2濃度を測定し、RGB LEDで信号機の色(緑・黄・赤)で表示します。
この構成をエディタで開く・編集する →| 部品 | 役割 | ポート | リンク・価格 |
|---|---|---|---|
| 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 CO2 | CO2 sensor | grove_i2c | official page — $33.9 |
| Unit RGB (SK6812) | RGB LED (traffic light) | grove_i2c | official page — $3.95 |
M5Stack Core2とCO2センサー、RGB LEDユニットを使って、室内のCO2濃度を信号機のように色で表示する装置です。PaHub2を使うことで、複数のI2Cユニットを同時に接続できます。CO2濃度が低いと緑、中程度で黄、高いと赤に光ります。
# 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® 製品向けの非公式ツール。作りたいものを書くと、部品リストと配線図が出ます。