Seeed Studio IoT ボタンを ESPHome に接続する
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
Seeed Studio IoT ボタンを ESPHome に接続する

このチュートリアルでは、Seeed Studio IoT ボタンを ESPHome を使用して Home Assistant に接続する方法を説明します。ボタンを設定して、異なる押し方(シングルクリック、ダブルクリック、長押し)を検出し、スマートホーム内で異なるアクションをトリガーする方法を学びます。
必要な材料
Seeed Studio IoT ボタン |
---|
![]() |
Seeed Studio IoT ボタンは、ESP32-C6 チップを内蔵した多用途のスマートボタンです。これは完全なスタンドアロンデバイスであり、Home Assistant に統合してさまざまなデバイスを制御したり、自動化をトリガーしたりすることができます。ESP32-C6 チップを搭載しているため、低消費電力で信頼性の高い接続を提供し、追加の開発ボードを必要としません。
Home Assistant に ESPHome をインストールする
ステップ 1. 設定をクリック --> アドオン --> ADD-ON STORE。


ステップ 2. ESPHome を検索します。

ステップ 3. INSTALL をクリックし、その後 START をクリックします。

ステップ 4. インストール成功

IoT ボタンを ESPHome に追加する
ステップ 5. +NEW DEVICE をクリックします。

ステップ 6. NEXT をクリックし、デバイスに任意の名前を付けます。「seeedstudio-iot-button」などの名前を推奨します。

ステップ 7. デバイスの種類を選択します。
IoT ボタンには ESP32-C6 が内蔵されているため、デバイスの種類として「ESP32」を選択します。後で設定を変更して正しい ESP32 バリアントを指定します。

ステップ 8. デバイスの追加が成功したら、最後に SKIP をクリックします。

IoTボタンの設定
Web Flasherを使用する(推奨方法)
IoTボタンを始める最も簡単な方法は、Web Flasherツールを使用してブラウザから直接ESPHomeファームウェアをインストールすることです。
ステップ1: Seeed Studio IoT Button Firmware Flasher のウェブサイトにアクセスします。

ステップ2: USBケーブルを使用してIoTボタンをコンピュータに接続します。
ステップ3: Web Flasherページで「Install」ボタンをクリックします。
ステップ4: ポップアップダイアログから正しいUSBポートを選択します。
ステップ5: ブラウザが自動的にファームウェアをダウンロードし、デバイスにフラッシュします。
ステップ6: フラッシュが完了すると、IoTボタンは独自のWiFiネットワークを作成します。コンピュータまたはスマートフォンから「seeedstudio-iot-button」という名前のWiFiネットワークに接続します。
ステップ7: 接続後、デバイスは自動的に設定ページを開くはずです。開かない場合は、ブラウザを開いて http://192.168.4.1
に移動します。
ステップ8: 設定ページで以下を行います:
- 自宅のWiFiネットワーク名(SSID)とパスワードを入力します
- Home Assistantが接続されているネットワークと同じであることを確認します
- 「Save」をクリックして設定を適用します
ステップ9: IoTボタンが再起動し、自宅のWiFiネットワークに接続します。
ステップ10: Home Assistantで、設定 > デバイスとサービスに移動します。新しいESPHomeデバイスが検出されたという通知が表示されます。「Configure」をクリックしてデバイスをHome Assistantに追加します。
ステップ11: プロンプトに従ってセットアップを完了します。IoTボタンは、異なるボタンアクションに対応する3つの仮想スイッチとともにHome Assistantのダッシュボードに表示されます。
代替方法:ESPHome Dashboard を使用する
設定をより詳細に制御したい場合は、以下の手順に従ってESPHomeダッシュボードを使用してください。
ESPHome設定の追加
ステップ1. ESPHomeページに対応するデバイスカードが表示されます。その後、EDITをクリックします。

ステップ2. 以下のコードで設定全体を置き換えます:

完全なコードをプレビューするにはここをクリック
substitutions:
name: "seeedstudio-iot-button"
friendly_name: "Seeed Studio IoT Button"
esphome:
name: "${name}"
friendly_name: "${friendly_name}"
name_add_mac_suffix: true
project:
name: "seeedstudio.iot_button"
version: "3.3"
platformio_options:
board_upload.maximum_size: 4194304
on_boot:
priority: -100.0
then:
- light.turn_on: blue_led
- delay: 5min # 初期化を待機
- logger.log: "起動完了、ライトスリープに移行"
- light_sleep.enter:
id: light_sleep_1
esp32:
board: esp32-c6-devkitc-1
variant: esp32c6
flash_size: 4MB # upload.flash_size
framework:
type: esp-idf
sdkconfig_options:
CONFIG_FREERTOS_UNICORE: y
CONFIG_FREERTOS_HZ: '1000'
CONFIG_PM_USE_RTC_TIMER_REF: y
CONFIG_XTAL_FREQ_40: y
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ: '80000000'
CONFIG_PM_DFS_INIT_AUTO: n
CONFIG_FREERTOS_USE_TICKLESS_IDLE: y
CONFIG_PM_ENABLE: y
CONFIG_PM_SLP_IRAM_OPT: y
CONFIG_PM_RTOS_IDLE_OPT: y
CONFIG_ESP_WIFI_SLP_IRAM_OPT: y
CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP: y
CONFIG_PM_PROFILING: y
external_components:
- source:
type: git
url: https://github.com/Seeed-Studio/xiao-esphome-projects
ref: main
components: [ light_sleep ]
refresh: 0s
- source:
type: git
url: https://github.com/ackPeng/esphome.git
ref: api
components: [ api ]
refresh: 0s
# ロギングを有効化
logger:
hardware_uart: USB_SERIAL_JTAG
level: DEBUG
# Home Assistant APIを有効化
api:
ota:
- platform: esphome
wifi:
# WiFi接続が失敗した場合のフォールバックホットスポット(キャプティブポータル)を有効化
ap:
ssid: "seeedstudio-iot-button"
# ap_timeout: 10s
# WiFiネットワークステータスイベント
on_connect:
then:
- logger.log: "WiFi接続成功!"
# 緑色を3秒間表示してから電力節約のためにオフ
- light.turn_on:
id: rgb_led
brightness: 100%
red: 0%
green: 100%
blue: 0%
effect: "Subtle Flicker"
- delay: 1s
- light.turn_off: rgb_led
on_disconnect:
then:
- logger.log: "WiFi接続失敗!"
captive_portal:
output:
- platform: gpio
pin: GPIO2
id: user_led
inverted: True
- platform: gpio
pin: GPIO18
id: enable_pin
light_sleep:
id: light_sleep_1
wakeup_pin: 9
on_prepare_sleep:
then:
- logger.log: "ライトスリープに入る準備中"
- light.turn_off: blue_led
- light.turn_off: rgb_led
on_wakeup:
then:
- light.turn_on: blue_led
- logger.log: "ライトスリープから復帰"
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
# LEDストリップ電源を制御するスイッチ
switch:
- platform: output
name: "LEDストリップ電源"
output: enable_pin
id: led_power
restore_mode: ALWAYS_ON # 起動時に自動有効化
internal: true
# ボタンアクション用の仮想スイッチ
- platform: template
name: "スイッチ1"
id: virtual_toggle_1
optimistic: true
turn_on_action:
- logger.log: "シングルショートクリック"
- logger.log: "スイッチ1がONになりました"
# ボタン押下を示すために青色LEDを点滅
- light.turn_on:
id: rgb_led
effect: "Blink"
- delay: 1s
- light.turn_off: rgb_led
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
# スイッチオンアクションを追加
turn_off_action:
- logger.log: "シングルショートクリック"
- logger.log: "スイッチ1がOFFになりました"
# ボタン押下を示すために青色LEDを点滅
- light.turn_on:
id: rgb_led
effect: "Blink"
- delay: 1s
- light.turn_off: rgb_led
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
# 閉じるアクションを追加
- platform: template
name: "スイッチ2"
id: virtual_toggle_2
optimistic: true
turn_on_action:
- logger.log: "ダブルクリック"
- logger.log: "スイッチ2がONになりました"
# ボタン押下を示すために青色LEDをダブル点滅
- light.turn_on:
id: rgb_led
brightness: 100%
red: 100%
green: 50%
blue: 0%
effect: "Subtle Flicker"
- delay: 1s
- light.turn_off: rgb_led
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
# スイッチオンアクションを追加
turn_off_action:
- logger.log: "ダブルクリック"
- logger.log: "スイッチ2がOFFになりました"
# ボタン押下を示すために青色LEDをダブル点滅
- light.turn_on:
id: rgb_led
brightness: 100%
red: 100%
green: 50%
blue: 0%
effect: "Subtle Flicker"
- delay: 1s
- light.turn_off: rgb_led
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
# 閉じるアクションを追加
- platform: template
name: "スイッチ3"
id: virtual_toggle_3
optimistic: true
turn_on_action:
- logger.log: "長押し"
- logger.log: "スイッチ3がONになりました"
# ボタン押下を示すために青色LEDを長時間点灯
- light.turn_on:
id: rgb_led
effect: "Rainbow"
- delay: 1s
- light.turn_off: rgb_led
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
# スイッチオンアクションを追加
turn_off_action:
- logger.log: "長押し"
- logger.log: "スイッチ3がOFFになりました"
# ボタン押下を示すために青色LEDを長時間点灯
- light.turn_on:
id: rgb_led
effect: "Rainbow"
- delay: 1s
- light.turn_off: rgb_led
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
# 閉じるアクションを追加
light:
- platform: binary
name: "SeeedStudio IoT Button Blue LED"
output: user_led
id: blue_led
internal: true
- platform: esp32_rmt_led_strip
internal: true
pin: GPIO19
num_leds: 1
restore_mode: RESTORE_AND_OFF
chipset: WS2812
rgb_order: GRB
is_rgbw: False
name: "RGBステータスLED"
id: rgb_led
effects:
- random:
name: "ランダムカラー"
transition_length: 5s
update_interval: 10s
- addressable_rainbow:
name: "虹"
- strobe:
name: "点滅"
colors:
- state: True
brightness: 100%
red: 100%
green: 0%
blue: 50%
duration: 500ms
- state: False
duration: 500ms
- flicker:
name: "微妙なちらつき"
alpha: 95%
intensity: 1.5%
binary_sensor:
- platform: gpio
pin:
number: GPIO9
inverted: True
mode:
input: True
pullup: True
name: "SeeedStudio IoT Button"
on_multi_click:
- timing:
- ON for at most 300ms
- OFF for at least 0.5s
then:
- logger.log: "シングルショートクリック"
- switch.toggle: virtual_toggle_1
- timing:
- ON for at most 300ms
- OFF for at most 0.5s
- ON for at most 300ms
- OFF for at least 0.2s
then:
- logger.log: "ダブルクリック"
- switch.toggle: virtual_toggle_2
- timing:
- ON for 1s to 1.5s
- OFF for at least 0.5s
then:
- logger.log: "長押し"
- switch.toggle: virtual_toggle_3
on_press:
- globals.set:
id: button_press_time
value: !lambda 'return millis();'
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
on_release:
- globals.set:
id: last_activity_time
value: !lambda 'return millis();'
- if:
condition:
lambda: 'return (millis() - id(button_press_time)) >= 5000;'
then:
- logger.log: "ライトスリープモードに移行"
- light_sleep.enter:
id: light_sleep_1
globals:
- id: button_press_time
type: uint32_t
restore_value: no
initial_value: '0'
- id: last_activity_time
type: uint32_t
restore_value: no
initial_value: '0'
interval:
- interval: 10s
then:
- if:
condition:
lambda: 'return (millis() - id(last_activity_time)) >= 120000;'
then:
- logger.log: "2分間活動なし、ライトスリープに移行"
- light_sleep.enter:
id: light_sleep_1
「Your_WiFi_SSID」と「Your_WiFi_Password」を実際のWiFi認証情報に置き換えてください。WiFi設定は、Home Assistantサーバーが稼働しているネットワークと一致する必要があります。これにより適切な接続が確保されます。
設定の理解
この設定の重要な部分を分解して説明します:
ESP32の設定:
- IoTボタンに内蔵されているESP32-C6のバリアントとボードタイプを指定
- フラッシュサイズを4MBに設定
- ESP32-C6に必要なESP-IDFフレームワークを使用
ボタンの設定:
- 内部で物理ボタンが接続されているGPIO9に接続
- Inverted: Trueは、ボタンが押されていないときにピンが高くなり、押されると低くなることを意味します
- 3つの異なる押下パターンを設定:
- シングルショートクリック(素早く押して離す)
- ダブルクリック(素早く2回押す)
- 長押し(1〜2.5秒間押し続ける)
仮想スイッチ:
- Home Assistantに表示される3つのテンプレートスイッチを作成
- 各スイッチは異なるボタン押下パターンに対応
- これらのスイッチは、他のデバイスを制御するためのオートメーションで使用可能
ステップ3. 設定が完了したら、右上のINSTALLをクリックし、次にPlug into this computerを選択します。

ステップ4. コンパイルプロセスが完了するのを待ちます。その後、Download projectをクリックし、Factory formatを選択してプロジェクトファイルをダウンロードし、次にOpen ESPHome Webをクリックします。


ステップ5. IoTボタンをUSB経由でコンピュータに接続します。CONNECTをクリックし、正しいシリアルポートを選択します。

ステップ6. INSTALLをクリックしてIoTボタンにファームウェアをフラッシュします。

ステップ7. すべてが正常に進むと、インストール成功のメッセージが表示されます。

IoTボタンをHome Assistantに追加する
ステップ16. Home Assistantに戻ります。Settingsをクリックし、次にDevices & servicesを選択します。

ステップ17. 新しいデバイスが検出されたという通知が表示されます。CONFIGUREをクリックします。

ステップ18. IoTボタンをHome Assistantに追加するためのプロンプトに従います。デバイスが属するエリアを選択し、FINISHをクリックします。

ステップ19. IoTボタンとその3つの仮想スイッチがHome Assistantのダッシュボードに表示されます。

IoTボタンを使用したオートメーションの作成
IoTボタンのセットアップが完了したら、スマートホーム内のデバイスを制御するオートメーションを作成できます。ここでは、ボタンを押すとライトが点灯するシンプルなオートメーションを作成してみましょう。
ステップ20. Home Assistantで、設定 > オートメーションとシーンに移動します。

ステップ21. オートメーションを作成をクリックします。

ステップ22. オートメーションを設定します:
- 名前: 「IoTボタン シングルプレス - ライトを点灯」など、わかりやすい名前を付けます。
- トリガー: トリガータイプとして「状態」を選択します。
- エンティティ: 「スイッチ1」(シングルプレス用)を選択
- From: 「off」
- To: 「on」
- アクション: 制御したいデバイスを選択します。
- 例えば、ライトを選択して点灯するように設定します。

ステップ23. 保存をクリックしてオートメーションを作成します。

応用編: 異なるプレスパターンで異なるデバイスを制御
IoTボタンの設定の強力な機能の1つは、異なるプレスパターンを検出できることです。以下は各パターンを活用するアイデアです:
シングルプレス(スイッチ1):
- 現在の部屋のライトをオン/オフ
- よく使うデバイスのトグル
ダブルプレス(スイッチ2):
- シーンをアクティベート(例: 「ムービーナイト」でライトを暗くし、テレビをオン)
- 複数のデバイスを同時に制御
ロングプレス(スイッチ3):
- セキュリティ機能をアクティベート(アラームのオン/オフ)
- 緊急ルーチンをトリガー
- 複数のデバイスを一括でオフ
これらの応用オートメーションを設定するには、上記の手順に従って追加のオートメーションを作成し、適切なスイッチ(スイッチ1、2、または3)をトリガーとして選択し、希望するアクションを設定してください。
トラブルシューティング
IoTボタンで問題が発生した場合、以下の一般的なトラブルシューティング手順を試してください:
ボタンがWiFiに接続しない:
- ESPHomeの設定でWiFiの認証情報を確認してください。
- WiFiネットワークが2.4GHzであることを確認してください(ESP32-C6は2.4GHzと5GHzの両方をサポートしていますが、通常2.4GHzの方が範囲が広いです)。
ボタンがHome Assistantに表示されない:
- ボタンとHome Assistantが同じネットワーク上にあることを確認してください。
- ESPHomeアドオンとHome Assistantを再起動してください。
ボタンのプレスが検出されない:
- GPIOピンの設定を確認してください(標準のIoTボタンではGPIO9)。
- ESPHomeのログを確認して、ボタンのプレスが検出されているか確認してください。
オートメーションがトリガーされない:
- オートメーションが有効になっていることを確認してください。
- トリガー条件が正確に一致していることを確認してください(状態が「off」から「on」に変化する)。
トラブルシューティング
Q1: バッテリーを交換した後、デバイスがインターネットに接続できず、頻繁に切断されるのはなぜですか?バッテリーが充電されていることは確認済みです。
バッテリーを取り外した後、18650バッテリーのチップ保護戦略により、正常に動作するためには充電済みのUSB電源ケーブルで少し活性化する必要があります。
リソース
- [GITHUB] Seeed IoT Button Github Zigbee リポジトリ
- [GITHUB] Seeed IoT Button Github ESPHome リポジトリ
- [PDF] Seeed IoT Button SCH PDF
- [SCH&PCB] Seeed IoT Button SCH & PCB
技術サポート & 製品ディスカッション
弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しております。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルをご用意しています。