xiao-webcam-sta について
WiFi ルーターに接続する XIAO ESP32S3 カメラの Web アプリ作成を支援するスキルです。データ収集アプリまたは推論ビューアーの設定から、ビルド、書き込み、ネットワーク確認までを案内します。
主な機能
- 01収集用または推論用スケッチの生成
- 02ルーター WiFi と mDNS の設定
- 03arduino-cli によるビルドと書き込み
- 04HTTP による Web ページの確認
- 05カメラのホットスポットへの切り替え
活用シーン
- 01カメラ画像を収集して ZIP で取得
- 02カメラの推論結果をリアルタイム表示
- 03ローカルネットワークでの接続確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ shain1912/ esp32-skills --skill xiao-webcam-staインストール後、Claude Code で/xiao-webcam-staを入力して読み込まれたか確認します。
同梱ファイルassets/web_collect.ino.tplassets/web_infer.ino.tpl
詳細
XIAO ESP32S3 カメラ Web アプリ — STA(ルーター)モード
ボードはユーザーの WiFi ルーターに接続します。PC/スマートフォンは通常の
ネットワークに接続したまま(インターネットも引き続き利用できます)、ボードに
http://<mdns-name>.local または DHCP IP でアクセスします。
まず同じリポジトリにある xiao-esp32s3 スキルを読み、基本的なワークフローと注意点を確認してください
(特に、PSRAM フラグが必須であること、DTR リセットで停止した場合の復旧方法、デモの実行を継続する必要がある間はシリアルを読み取らないこと)。
Step 1 — 必ず最初にユーザーに確認する
WiFi 認証情報を作り出したり、推測したり、黙って再利用したりしないでください。次の情報をユーザーに尋ねます。
- 共有ルーターの SSID — 2.4 GHz ネットワークである必要があります(ESP32 は 5 GHz を検出できません。ユーザーが
something_5Gを指定した場合は、2.4 GHz 帯のネットワーク名を尋ねてください)。 - 共有ルーターのパスワード。
- mDNS 名(省略可、既定値は
xiao) — ページのアドレスはhttp://<name>.localになります。同じ LAN 上の各ボードには、それぞれ異なる名前を設定する必要があります。 - 使用するアプリ:コレクター、推論ビューアー、または両方。
Step 2 — テンプレートからスケッチを生成する
assets/ 内のテンプレートは動作確認済みのコードです。書き換えないでください。
assets/web_collect.ino.tpl— データセットコレクター(ギャラリー+削除+ZIP ダウンロード)assets/web_infer.ino.tpl— ライブ推論ビューアー(スケッチブックに<project>_inferencingEdge Impulse ライブラリをインストールする必要があります)
テンプレートを <workspace>\<NN>_<name>\<NN>_<name>.ino にコピーします(フォルダー名 = ino
名)。その後、プレースホルダーを文字どおり置き換えます。
| プレースホルダー | 意味 | 例 |
|---|---|---|
__WIFI_SSID__ | 2.4 GHz ルーターの SSID | myhome |
__WIFI_PASS__ | ルーターのパスワード | pass1234 |
__MDNS_NAME__ | ホスト名(小文字、空白なし) | xiao |
__EI_PROJECT__ | 推論アプリのみ — Edge Impulse プロジェクト名。インストール済みの <name>_inferencing ライブラリフォルダー名と一致させます | clfc |
テンプレートには、ルーターに 15 秒間接続できない場合に XIAO_CAM ホットスポットに切り替える処理がすでに含まれているため、パスワードが間違っていても問題を切り分けやすくなります。
Step 3 — コンパイルしてアップロードする
arduino-cli compile --fqbn esp32:esp32:XIAO_ESP32S3 --board-options PSRAM=opi <SKETCH_DIR>
arduino-cli upload -p COM4 --fqbn esp32:esp32:XIAO_ESP32S3 --board-options PSRAM=opi <SKETCH_DIR>
PSRAM=opi は必須です(カメラとモデルで PSRAM が必要です)。Edge Impulse ライブラリを入れ替えた直後に推論ビルドを行う場合は、--clean が必要です。
Step 4 — 最初から最後まで動作を確認する
PC は同じ LAN に接続されているため、HTTP で確認するのが全体の経路が動作していることを最も手早く証明できます。
Start-Sleep -Seconds 20 # boot + WiFi join
curl.exe -s -m 15 http://<mdns-name>.local/ -o "$env:TEMP\page.html"
(Get-Item "$env:TEMP\page.html").Length # > 1000 bytes = page served
# inference app only:
curl.exe -s -m 15 http://<mdns-name>.local/classify # JSON with scores
mDNS の名前解決が不安定な場合は、一度 IP を確認し(ping <name>.local またはルーターの DHCP テーブルを使用)、その IP を直接使ってください。ユーザーには両方のアドレスを伝えます。
シリアル経由でボードを確認する
HTTP ではページが表示されていることは確認できますが、ボードがルーターへの接続に失敗した理由までは分かりません。シリアルなら確認できます。スケッチには、接続を試みた SSID、取得した IP、mDNS 名が出力されます。xiao-serial-monitor スキルを使用してください。
mon # interactive, port auto-detected
.\scripts\mon.ps1 -Seconds 15 # bounded, for your own debugging
接続に成功した場合の想定出力:
Connecting to WiFi ... IP: 192.168.0.179
mDNS: http://<mdns-name>.local
Collector ready
避けるのではなく、知っておくべき点が 2 つあります。
- ポートを開くと DTR 経由でボードがリセットされるため、ログは起動時から再開します。通常はこれで問題ありません。WiFi 接続メッセージは一度しか出力されないためです。
- その後、ボードに ROM バナーだけが表示されたまま停止する場合(
xiao-esp32s3の注意点 8)、arduino-cli uploadを再実行すると復旧します。
ユーザー自身が確認したい場合は、ツール呼び出しから対話型モニターを起動するのではなく、コマンドを渡してください。対話型モニターは終了せず、戻ってこないためです。Claude Code では、! プレフィックスを付けるとユーザーのセッション内で実行されます。
! <path>\mon.ps1
メモ
- コレクターページ:撮影した画像はブラウザー内のギャラリーに表示されます(ラベルバッジ、撮影ごとの削除。「全体 ZIP ダウンロード」では Edge Impulse ですぐに使える
label.N.jpgファイルが生成されます)。ページを再読み込みするとギャラリーが消えるため、先に ZIP をダウンロードしてください。 - 推論ページ:フレーム全体を囲む色付きボックス+上部ラベル+クラスごとの信頼度バー(分類モデルの場合。オブジェクトごとの位置を示すボックスには FOMO モデルが必要です)。
- カメラ映像は 90°回転して表示されます。推論テンプレートではすでに補正されています(特徴量を時計回りに回転。実測で確認済み)。