xiao-webcam-ap について
WiFi アクセスポイントモードで XIAO ESP32S3 のカメラ Web アプリを作るスキルです。ルーターやインターネットのない教室やチームでのデモ向けに、データ収集と推論表示のテンプレートを提供します。
主な機能
- 01アクセスポイントモードの Web アプリ設定
- 02収集用と推論表示用のテンプレート
- 03SSID、パスワード、チャンネル設定
- 04arduino-cli によるコンパイルと書き込み
- 05AP とシリアルによる確認手順
活用シーン
- 01教室でのカメラ画像収集
- 02デバイスでの Edge Impulse 推論表示
- 03ルーターなしでのカメラアプリのデモ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ shain1912/ esp32-skills --skill xiao-webcam-apインストール後、Claude Code で/xiao-webcam-apを入力して読み込まれたか確認します。
同梱ファイルassets/web_collect.ino.tplassets/web_infer.ino.tpl
詳細
XIAO ESP32S3 カメラ Web アプリ — AP(ホットスポット)モード
ボード自体が WiFi ホットスポットになります。クライアントはボードの SSID に接続し、 ページは常に http://192.168.4.1 にあります。ルーターもインターネットも不要です。 教室での利用に最適です。生徒またはチームごとにボードを 1 台用意し、ネットワークを分離できます。
基本的なワークフローと注意点(特に、PSRAM フラグが必須であること、DTR リセットで
停止した場合の復旧方法、デモを実行し続ける必要がある間はシリアル読み取りをしないこと)について、
まず同じリポジトリにある xiao-esp32s3 スキルを読んでください。
ステップ 1 — 必ず最初にユーザーに確認する
認証情報を決して勝手に設定しないでください。次の情報をユーザーに尋ねてください。
- AP 名(SSID) — 例:
XIAO_01。教室で複数台を使う場合は、番号付きの名前 (XIAO_01~XIAO_20)を提案してください。 - AP パスワード — 8 文字以上(WPA2 の最小要件)。オープン AP を希望する場合は、 必ず明示的に確認してください。
- チャンネル(任意、デフォルトは 1) — 同じ部屋で複数のボードを使う場合は、
1/6/11 に分散してください(ボード N → チャンネル
[1,6,11][N % 3])。20 台すべてを チャンネル 1 にすると、互いに干渉します。 - どのアプリを使うか:収集、推論ビューアー、または両方。
ステップ 2 — テンプレートからスケッチを生成する
assets/ にあるテンプレートは動作確認済みのコードです。書き換えないでください。
assets/web_collect.ino.tpl— データセット収集ツール(ギャラリー+削除+ZIP ダウンロード)assets/web_infer.ino.tpl— ライブ推論ビューアー(スケッチブックに<project>_inferencingEdge Impulse ライブラリをインストールする必要があります)
テンプレートを <workspace>\<NN>_<name>\<NN>_<name>.ino にコピーし(フォルダー名は ino
名と同じ)、プレースホルダーを文字どおり次のように置き換えてください。
| プレースホルダー | 意味 | 例 |
|---|---|---|
__AP_SSID__ | ホットスポット名 | XIAO_01 |
__AP_PASS__ | ホットスポットのパスワード(8 文字以上) | class1234 |
__AP_CHANNEL__ | WiFi チャンネル(引用符なしの数値) | 6 |
__EI_PROJECT__ | 推論アプリのみ — インストール済みの <name>_inferencing ライブラリフォルダーと一致する Edge Impulse プロジェクト名 | clfc |
ステップ 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 が必要です。
ステップ 4 — 確認する
# the AP should appear in a WiFi scan within ~15 s of flashing
netsh wlan show networks | Select-String "<AP_SSID>"
(netsh はスキャン結果をキャッシュします。失敗と判断する前に、20 秒待って再試行してください。)
この確認には PC に WiFi アダプターが必要ですが、多くのデスクトップ PC には搭載されていません。
netsh wlan show interfaces で Wireless AutoConfig サービスが実行されていないと報告される場合、または
Get-NetAdapter に Ethernet しか表示されない場合、何度再試行しても AP は見つかりません。
そのマシンは物理的にスキャンできないためです。フラッシュに失敗したと判断しないでください。
代わりにシリアル(下記)を使うか、ユーザーにスマートフォンから確認してもらってください。
シリアル経由でボードを確認する
AP モードでは、通常 PC からボードに接続できないため、シリアルが多くの場合、
利用できる唯一の確認方法です。xiao-serial-monitor スキルを使ってください。
mon # interactive, port auto-detected
.\scripts\mon.ps1 -Seconds 15 # bounded, for your own debugging
成功時の出力:
AP started. Open http://192.168.4.1
Collector ready
Camera init failed と表示される場合、スケッチは AP を起動する前に停止しています。
ボードが Sense カメラモジュールのない通常の XIAO ESP32S3 であるか、
モジュールが正しく装着されていません。SSID を探し続けても、これが原因であることは分かりません。
シリアルを 1 回読み取れば分かります。
避けるのではなく、知っておくべきことが 2 つあります。
- ポートを開くと DTR によってボードがリセットされるため、ログは起動時から再開します。 今回はそれで問題ありません。これらの行は起動時に 1 回だけ出力されます。
- ボードがその後 ROM バナーだけを表示して停止した場合(
xiao-esp32s3の注意点 8)、arduino-cli uploadを再実行すると復旧し、デモ用のスケッチが実行された状態になります。
ユーザー自身が確認したい場合は、ツール呼び出しから対話型モニターを起動するのではなく、
コマンドを渡してください。対話型モニターは終了せず、制御が戻りません。Claude Code では、
! プレフィックスを付けるとユーザーのセッションで実行されます。
! <path>\mon.ps1
完全な確認方法:デバイスを AP に接続し、http://192.168.4.1 を開きます。 ユーザー自身のスマートフォンまたは PC から接続すると、接続中はそのデバイスのインターネットが 切断されることを伝えてください。AP モードでは正常な動作です。
メモ
- コレクターページ:撮影画像はブラウザー内のギャラリーに保存されます(ラベルバッジ、撮影画像ごとの削除機能、「전체 ZIP 다운로드」でEdge Impulseですぐ使える
label.N.jpgファイルを生成)。ページを更新するとギャラリーが消去されるため、先にZIPをダウンロードしてください。 - 推論ページ:フレーム全体の色付きボックス+上部のラベル+クラスごとの信頼度バー(分類モデルの場合。オブジェクトごとの位置を示すボックスにはFOMOモデルが必要です)。
- カメラ映像は90°回転して表示されます。推論テンプレートではすでに補正済みです(時計回りの特徴量回転。実測で検証済み)。