
StackChanは、M5Stackとユーザーコミュニティが共同で作ったとてもかわいいAIデスクトップロボットです。M5StackのフラッグシップIoT 開発キットCoreS3をホストとして使用し、ESP32-S3メインコントローラー、240MHzデュアルコアプロセッサ、16MBフラッシュ、8MB PSRAMを搭載しています。Wi-FiとBLEに対応しています。本体には2.0インチの強化ガラス静電容量式タッチスクリーン、0.3MPカメラ、近接センサー、9 軸姿勢センサー(加速度+ジャイロ+地磁気)、microSDカードスロット、1Wスピーカー、デュアルマイク、電源/リセットボタンなどの周辺機器が含まれます。
本記事ではStackChanの各種周辺機器の統合について説明します。すぐに使える音声アシスタントが必要な場合は以下を参照してください。
必要に応じて、事前にコンパイルされたファームウェアを自分でダウンロードする場合は、GitHub Releaseを確認してください。
下のボタンをクリックすると、ワンクリックでファームウェアの書き込みが完了します。表示される手順に従って設定を行うと、StackChan を Home Assistant に接続する体験をすぐに開始できます。ワンクリック書き込みおよびその後の設定方法についてはチュートリアルを参照してください。
NEW DEVICE ボタンをクリックします。
CONTINUE をクリックします。
New Device Setup を選択します。
Use recommended settings のチェックを外し、ESP32-S3 をクリックしてリストから M5Stack CoreS3 を選択します。
SKIP をクリックします。
EDIT をクリックします。
packages:
remote_package_files:
url: https://github.com/m5stack/esphome-yaml
files: [examples/kit/stackchan-bsp.factory.yaml]
ref: main
refresh: 0s
SAVE をクリックし、続いて INSTALL をクリックして Manual Download を選択します。
Factory Format を選択してファームウェアをダウンロードします。
USB-CケーブルでStackChanをPCに接続し、リセットボタンを長押しして緑色 LEDが点灯したら放し、ダウンロードモードに入れます。
ブラウザで ESPHome Web を開き、CONNECT をクリックしてデバイスを接続します。
INSTALL をクリックし、ダウンロードしたファームウェアを選択して再度 INSTALL をクリックします。
INSTALL をクリックしてデバイスに書き込みます。
書き込みが完了するのを待ちます。
書き込みと再起動が完了すると、デバイスは自動的にWi-Fiに接続します。同じLAN 内のHome Assistantは新しいデバイスを検出します。Settings -> Devices & services で確認してください。
デバイスが検出されたら:
Add をクリックします。
Submit を選択します。
追加後、ESPHome 統合の下にデバイスとエンティティ、およびダッシュボードが表示されます。
このセクションでは、StackChan 上の各種コンポーネントについて説明します。主にCoreS3ホスト、Power Board、Touch BoardのICデバイスに分かれています。
主なピン構成:
i2s_audio:
id: i2s_audio_bus
i2s_lrclk_pin: GPIO33
i2s_bclk_pin: GPIO34
i2s_mclk_pin:
number: GPIO0
ignore_strapping_warning: true
i2c:
- id: bsp_bus
sda: GPIO12
scl: GPIO11
frequency: 100kHz
scan: true
spi:
- id: spi_bus
clk_pin: GPIO36
mosi_pin: GPIO37
uart:
tx_pin: GPIO6
rx_pin: GPIO7
baud_rate: 1000000 このコンポーネントはI2Cを必要とし、outputコンポーネントでLDOを設定します:
axp2101:
id: axp2101_pmu
i2c_id: bsp_bus
output:
- platform: axp2101
type: range
channel: DLDO1
id: lcd_backlight_output
min_voltage: 2600
max_voltage: 3300
- platform: axp2101
channel: ALDO1
voltage: 1800
... このコンポーネントはI2Cを必要とし、Pin Schemaをサポートします。主にリセット/電源制御に使用されます。リセット信号に使用されるスイッチはすべて internal: true とマークされており、Home Assistantフロントエンドには表示されません。同時に BOOST_EN、BUS_OUT_EN、USB_OTG_EN は電源方向を制御します。電源管理の例を参照してください。使用時は BOOST_EN を先に有効にし、その後に BUS_OUT_EN と USB_OTG_EN を制御します。
aw9523b:
id: aw9523b_hub
i2c_id: bsp_bus
p0_drive_mode: PUSH_PULL
switch:
- platform: gpio
name: "AW RST P0_2"
pin:
aw9523b_id: aw9523b_hub
number: 2
internal: true
restore_mode: RESTORE_DEFAULT_ON
...
このコンポーネントはI2Cを必要とします。音声アシスタントを使用する場合、sample_rate は 16000 にする必要があります。
audio_adc:
- platform: es7210
id: es7210_adc
i2c_id: bsp_bus
bits_per_sample: 16bit
sample_rate: 16000
mic_gain: 36 このコンポーネントにはI2Sが必要です。マイクコンポーネントは音声アシスタントと組み合わせて使用できますが、HAフロントエンドには表示されません。
microphone:
- platform: i2s_audio
id: i2s_mic
i2s_din_pin: GPIO14
adc_type: external
sample_rate: 16000
bits_per_sample: 16bit
i2s_audio_id: i2s_audio_bus audio_dac:
- platform: aw88298
id: aw88298_dac
i2c_id: bsp_bus
sample_rate: 48000 このコンポーネントはI2Sを必要とします。Home Assistantフロントエンドでメディアプレーヤーを使って音楽を再生できます。
speaker:
- platform: i2s_audio
i2s_audio_id: i2s_audio_bus
id: i2s_speaker
dac_type: external
i2s_dout_pin: GPIO13
audio_dac: aw88298_dac
media_player:
- platform: speaker
name: None
id: va_media_player
volume_min: 0.5
volume_max: 0.8
announcement_pipeline:
speaker: i2s_speaker
format: FLAC
sample_rate: 48000
num_channels: 1
このコンポーネントはSPIを必要とし、data_rate の最大は 40MHz です。正しいRGBカラーに対応するために invert_colors: true を設定します。
display:
- platform: mipi_spi
model: M5CORE
dc_pin: GPIO35
reset_pin:
aw9523b_id: aw9523b_hub
number: 9
cs_pin:
number: GPIO3
ignore_strapping_warning: true
data_rate: 40MHz
invert_colors: true
id: m5cores3_lcd
show_test_card: true
このコンポーネントはI2Cを必要とします。有効にするとHome Assistantフロントエンドでライブビデオストリームが表示されます。
esp32_camera:
name: "Camera"
i2c_id: bsp_bus
vsync_pin:
number: GPIO46
ignore_strapping_warning: true
href_pin: GPIO38
external_clock:
pin: GPIO2
frequency: 20MHz
pixel_clock_pin:
number: GPIO45
ignore_strapping_warning: true
data_pins: [GPIO39, GPIO40, GPIO41, GPIO42, GPIO15, GPIO16, GPIO48, GPIO47] # D0-D7
max_framerate: 15.0 fps
resolution: 320x240
frame_buffer_count: 1
pixel_format: RGB565
jpeg_quality: 6
agc_mode: manual
このコンポーネントはI2Cを必要とし、インターネットまたはHome Assistantホストと時刻同期できます。
esphome:
...
on_boot:
then:
# read the RTC time once when the system boots
bm8563.read_time:
time:
- platform: bm8563
i2c_id: bsp_bus
# repeated synchronization is not necessary unless the external RTC
# is much more accurate than the internal clock
update_interval: never
- platform: homeassistant
# instead try to synchronize via network repeatedly ...
on_time_sync:
then:
# ... and update the RTC when the synchronization was successful
bm8563.write_time:
上記の内容はシリアルログ内のみ表示されます。
このコンポーネントはI2Cを必要とし、環境光と近接情報を提供します。
sensor:
- platform: ltr_als_ps
address: 0x23
i2c_id: bsp_bus
update_interval: 10s
type: ALS_PS
ambient_light:
name: "Ambient light"
glass_attenuation_factor: 2.5
auto_mode: true
ps_cooldown: 5 s
ps_high_threshold: 500
# on_ps_high_threshold:
# then:
# - .... # do something - light up the screen for example
ps_counts: "Proximity counts"
このコンポーネントはI2Cを必要とします。
m5ioe1:
id: m5ioe1_hub
i2c_id: bsp_bus
reset: true
switch:
- platform: gpio
name: "M5IOE1 Pin 1"
pin:
m5ioe1_id: m5ioe1_hub
number: 0
mode:
output: true
pullup: true
restore_mode: RESTORE_DEFAULT_ON
...
ここでの M5IOE1 Pin 1 スイッチはサーボ電源用です。M5IOE1 Pin 14 スイッチはNeoPixel 制御用アドレッサブルLEDテープ用にデフォルトで有効です。手動でオンにする必要はありません。ライトコンポーネントが自動的に制御します。
このコンポーネントはI2Cを必要とし、電源の監視(電圧、電流)を提供します。注意:AXP2101もバッテリ電圧を監視できます。
sensor:
- platform: ina226
i2c_id: bsp_bus
address: 0x41
shunt_resistance: 0.01 ohm
max_current: 3.2A
# adc time used for both, Bus Voltage and Shunt Voltage
adc_time: 140us
adc_averaging: 128
update_interval: 60s
current:
name: "INA226 Current"
power:
name: "INA226 Power"
bus_voltage:
name: "INA226 Bus Voltage"
shunt_voltage:
name: "INA226 Shunt Voltage"
このコンポーネントはUARTを必要とし、StackChanの左右および上下の頭部移動を提供します。
ftservo:
- platform: scs9009
address: 1
id: x_servo
- platform: scs9009
address: 2
id: y_servo
number:
- platform: ftservo
ftservo_id: x_servo
angle:
id: servo_x_angle
name: "Servo X Angle"
min_value: -164
max_value: 164
use_raw_angle: false
angle_offset: 164
step: 5
speed:
id: servo_x_speed
name: "Servo X Speed"
min_value: 100
max_value: 1500
step: 100
- platform: ftservo
ftservo_id: y_servo
angle:
id: servo_y_angle
name: "Servo Y Angle"
min_value: 0
max_value: 90
use_raw_angle: false
angle_offset: 239
step: 5
speed:
id: servo_y_speed
name: "Servo Y Speed"
min_value: 100
max_value: 1500
step: 100
これらの角度はStackChanの可動範囲に合わせて調整されています。X 方向の動きは -165° から 165°、Y 方向の動きは 0° から 90° に設定されています。ゼロは 0° を意味します。
デフォルトステップ制御を使用する場合は、次を有効にします:
number:
- platform: ftservo
ftservo_id: x_servo
position:
id: servo_position
name: "Servo X Position"
min_value: 0
max_value: 1024 デフォルトのステップ最小値は 0、最大値は 1024 です。速度スライダーを調整すると、各サーボの動作速度を steps/s 単位で制御できます。
remote_transmitter:
pin: GPIO5
carrier_duty_percent: 50%
non_blocking: true 赤外線コンポーネントはエアコンなどの赤外線環境制御機器の作成に使用できます。例:
climate:
- platform: coolix
name: "Media AC"
visual:
min_temperature: 18
max_temperature: 30
temperature_step: 1
このコンポーネントはI2Cを必要とし、StackChanの頭部をタッチすると text_sensor によって結果が取得できます。
si12t:
id: touch_hub
i2c_id: bsp_bus
text_sensor:
- platform: si12t
name: "Touch Sensor 1"
channel: CH_1
update_interval: 1s
- platform: si12t
name: "Touch Sensor 2"
channel: CH_2
update_interval: 1s
- platform: si12t
name: "Touch Sensor 3"
channel: CH_3
update_interval: 1s

タッチ結果は HIGH、MEDIUM、LOW としてフロントエンドセンサーに報告され、それぞれ高、中、低の強度に対応します。No touch はタッチが検出されないことを意味します。
この機能はI2Cを必要とします。
この機能はM5IOE1ボード上の NeoPixel ドライバに依存しており、M5IOE1で有効にする必要があります:
light:
- platform: m5ioe1
id: stackchan_light_bar
name: "StackChan Light Bar"
icon: mdi:led-strip
num_led: 12
effects:
- random:
name: "Random"
transition_length: 1s
update_interval: 1s
- addressable_rainbow:
- addressable_rainbow:
name: Rainbow Effect With Custom Values
speed: 10
width: 50
- addressable_twinkle:
- addressable_twinkle:
name: Twinkle Effect With Custom Values
twinkle_probability: 5%
progress_interval: 4ms また、BUSが5V 電源を供給する必要があります。BOOST EN と BUS OUT EN スイッチを有効にする必要があります(これらのGPIOスイッチはAW9523B IOエキスパンダにあります):
switch:
- platform: gpio
name: "BOOST_EN"
pin:
aw9523b_id: aw9523b_hub
number: 15
restore_mode: RESTORE_DEFAULT_ON
- platform: gpio
name: "BUS_OUT_EN"
pin:
aw9523b_id: aw9523b_hub
number: 1
restore_mode: RESTORE_DEFAULT_ON
ライトエフェクトを有効にします:
remote_receiver:
pin: GPIO10 制御対象が応答を返す場合、remote_receiver を使って受信および処理できます。