M5StackでHMI Module を使う

Using the HMI Module ・ 使用 HMI Module

M5StackのHMI Moduleをコントローラーに接続する最小構成。配線とBOMつき。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack CoreS3Controllergrove_i2c, grove_analog, grove_uart, mbus, usb_c, sdcardofficial page — $59.9
HMI Modulemodulei2c, mbus, other:PORT.B, other:PORT.Cofficial page — $9.95

配線

作り方

M5Stack CoreS3とHMI ModuleをM-Busで接続し、ロータリーエンコーダーとボタンで操作できるヒューマンマシンインターフェースを構築します。HMI ModuleはCoreS3の底面に重ねて固定するだけで配線不要。I2C通信で制御します。

  1. 部品を用意する — 用意するもの:M5Stack CoreS3本体、HMI Module、CoreS3とパソコンをつなぐUSB-Cケーブル。
  2. HMI ModuleをCoreS3に重ねる — CoreS3の底面にあるM-Busコネクタに、HMI ModuleのM-Busコネクタを合わせて重ねます。位置が合わない場合は無理に押し込まず、向きを確認してください。しっかりと固定されるまで押し込みます。
  3. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCoreS3をパソコンにつなぎます。UIFlowやThonnyなどのツールで、CoreS3にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  4. 動作を確認する — コードを実行すると、CoreS3の画面にエンコーダーの値とボタンの状態が表示されます。エンコーダーを回したりボタンを押したりして、値が変化することを確認します。LEDが点灯するかも確認してください。

サンプルコード(micropython)

# M5Stack CoreS3 + HMI Module (via M-Bus, I2C)
# Wiring: HMI Module stacked on CoreS3 via M-Bus (I2C)
import time
from machine import Pin, I2C
from m5stack import lcd

# HMI Module I2C address (default 0x24)
HMI_ADDR = 0x24

# Initialize I2C on CoreS3 (Port.A is I2C, but M-Bus uses internal I2C)
i2c = I2C(0, scl=Pin(1), sda=Pin(2), freq=400000)  # CoreS3 I2C pins

# Helper functions to read encoder and buttons
def read_encoder():
    data = i2c.readfrom_mem(HMI_ADDR, 0x00, 2)  # read 2 bytes from register 0x00
    value = (data[0] << 8) | data[1]
    return value

def read_buttons():
    data = i2c.readfrom_mem(HMI_ADDR, 0x02, 1)  # read 1 byte from register 0x02
    return data[0]  # bit0: button1, bit1: button2

def set_led(led1, led2):
    # led1, led2: 0=off, 1=on
    val = (led2 << 1) | led1
    i2c.writeto_mem(HMI_ADDR, 0x03, bytes([val]))

while True:
    encoder = read_encoder()
    buttons = read_buttons()
    btn1 = (buttons & 0x01) == 0  # active low
    btn2 = (buttons & 0x02) == 0
    lcd.clear()
    lcd.print('Encoder: %d' % encoder, 10, 20)
    lcd.print('Btn1: %d  Btn2: %d' % (btn1, btn2), 10, 50)
    # Turn on LED when button pressed
    set_led(btn1, btn2)
    time.sleep(0.1)

コツ・安全上の注意

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

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

エディタで開く →

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