M5Stackで植物育成ライト制御

Grow light timer ・ 植物补光控制

M5Stack Core2と4チャンネルリレーユニットを使って、タイマーで育成ライトをON/OFF制御します。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
Unit 4Relay4-channel relaygrove_i2cofficial page — $12.95

配線

作り方

M5Stack Core2と4チャンネルリレーユニットで作る、タイマー制御の育成ライトです。リレーユニットがI2Cで制御され、設定した時間にライトをオン/オフします。Core2の内蔵RTCを使って正確なタイミングを実現します。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、Unit 4Relay(4チャンネルリレーユニット)、Groveケーブル(I2C用、赤色)、育成ライト(AC100Vなど)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. Groveケーブルでつなぐ — Unit 4RelayはI2C接続です。Groveケーブルの一端をリレーユニットに、もう一端をCore2の赤いPort.A(I2Cポート)に差し込みます。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. 育成ライトをリレーに接続する — リレーユニットの各チャンネルにはCOM(共通)とNO(ノーマルオープン)の端子があります。育成ライトの電源線の片方をCOMに、もう片方をNOに接続します。高電圧(AC100Vなど)を扱うので、必ず電源を切った状態で作業し、絶縁処理を確実に行ってください。
  4. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  5. タイマーを設定する — コード内のON_HOURとOFF_HOURを、ライトを点灯させたい時間に変更します(24時間表記)。例えば朝7時に点灯、夜19時に消灯する場合はON_HOUR=7、OFF_HOUR=19とします。
  6. 動作を確認する — コードを実行し、Core2の画面に現在時刻とリレーの状態が表示されます。設定した時間になるとリレーが切り替わり、ライトが点灯/消灯することを確認してください。

サンプルコード(micropython)

# M5Stack Core2 + Unit 4Relay (timer-controlled grow light)
# Wiring: Unit 4Relay -> Core2 red Port.A (I2C)
import time
from machine import Pin, I2C
from m5stack import lcd, rtc

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

# Unit 4Relay I2C address (default 0x26)
RELAY_ADDR = 0x26

def relay_write(channel, state):
    """Set relay channel (1-4) to state (0=off, 1=on)"""
    if channel < 1 or channel > 4:
        return
    # Command: 0x01 for channel 1, 0x02 for channel 2, etc.
    cmd = 1 << (channel - 1)
    if state:
        i2c.writeto(RELAY_ADDR, bytes([cmd]))
    else:
        i2c.writeto(RELAY_ADDR, bytes([0x00]))

# Timer settings (24-hour format)
ON_HOUR = 7    # turn on at 7:00
OFF_HOUR = 19  # turn off at 19:00

# Initialize RTC (assumes time is set via USB or NTP)
rtc = rtc.RTC()

# Start with relay off
relay_write(1, 0)

while True:
    now = rtc.datetime()
    hour = now[4]  # hour in 24h format
    minute = now[5]
    
    # Determine if light should be on
    if ON_HOUR < OFF_HOUR:
        light_on = (ON_HOUR <= hour < OFF_HOUR)
    else:  # overnight case (e.g., on at 22, off at 6)
        light_on = (hour >= ON_HOUR or hour < OFF_HOUR)
    
    # Update relay
    relay_write(1, 1 if light_on else 0)
    
    # Display status
    lcd.clear()
    lcd.print('Time: %02d:%02d' % (hour, minute), 10, 20)
    lcd.print('Light: ' + ('ON' if light_on else 'OFF'), 10, 60)
    
    time.sleep(30)  # check every 30 seconds

コツ・安全上の注意

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

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

エディタで開く →

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