Skip to content

naka6ryo/RemoteCompilerToMicon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ESP32-S3 Super Mini リモートコンパイル&ファームウェア更新システム

BLE Wi-Fi プロビジョニング + BLE OTA + BLE デバッグモニタ機能を備えた統合システムです。 iPad上の Bluefy ブラウザから ESP32-S3 Super Mini をリモートで制御・ファームウェア更新できます。

注意: ファームウェア更新(OTA)は完全にBLE経由で実行されます。Wi-FiはHTTP OTAには使用しません。

最終ドキュメント対応: CreatePlan.md v0.1 / SpecifcationDoc.md v0.2(実装版)


📋 目次

  1. プロジェクト構成
  2. システムアーキテクチャ
  3. BLE通信仕様
  4. WiFi・OTA通信仕様
  5. BLE OTAの仕組み(初心者向け解説)
  6. マイコン側(ESP32)の使い方
  7. WebApp側(iPad/Bluefy)の使い方
  8. 動作フロー
  9. トラブルシューティング

プロジェクト構成

RemoteCompilerToMicon/
├── README.md                      # このファイル
├── CreatePlan.md                  # 実装詳細設計書 (v0.1)
├── SpecifcationDoc.md             # システム仕様書 (v0.2)
│
├── MiconSide/                     # マイコン側ファームウェア (PlatformIO)
│   ├── platformio.ini             # PlatformIO 設定
│   ├── partitions.csv             # 標準パーティションテーブル
│   ├── partitions_ota_2m.csv      # OTA対応パーティションテーブル
│   ├── src/
│   │   └── main.cpp               # ESP32 メインプログラム
│   ├── logs/                      # ビルドログ出力ディレクトリ
│   └── README.md                  # マイコン側詳細手順書
│
└── WebAppSide/                    # WebApp (HTML/CSS/JavaScript)
    ├── index.html                 # メイン HTML
    ├── styles.css                 # スタイルシート
    ├── app.js                     # メインアプリロジック
    ├── ble-client.js              # BLE 通信ロジック
    ├── ota-client.js              # BLE OTA クライアント(HTTP OTAは未実装)
    ├── ui.js                      # UI 更新管理
    ├── firmware-client.js         # BLE経由ファームウェアクライアント
    ├── constants.js               # BLE UUIDs・定数
    ├── package.json               # npm パッケージ設定
    ├── netlify.toml               # Netlify デプロイ設定
    └── README.md                  # WebApp 詳細手順書

システムアーキテクチャ

全体構成図

                    ┌─────────────────────────────────┐
                    │     iPad + Bluefy ブラウザ        │
                    │                                   │
                    │  ┌────────────────────────────┐  │
                    │  │  WebApp (HTML/CSS/JS)      │  │
                    │  │  - BLE 接続管理             │  │
                    │  │  - Wi-Fi プロビジョニング   │  │
                    │  │  - BLE OTA更新              │  │
                    │  │  - BLE ログモニタ           │  │
                    │  └────────────────────────────┘  │
                    └──────────┬───────────────────────┘
                               │
                               │ BLE (All Communication)
                               │ (Provisioning, OTA, Debug Monitor)
                               │
         ┌─────────────────────────────────────────────────┐
         │       ESP32-S3 Super Mini ファームウェア        │
         │                                                 │
         │  ┌────────────────────────────────────────┐   │
         │  │ BLE GATT Services                      │   │
         │  │ - Provisioning Service                 │   │
         │  │   (Wi-Fi 設定送受信)                    │   │
         │  │ - Debug Service                        │   │
         │  │   (ログ配信・コマンド受信)               │   │
         │  │ - OTA Service                          │   │
         │  │   (ファームウェア更新 - BLE経由)        │   │
         │  └────────────────────────────────────────┘   │
         │                      ▲                         │
         │  ┌─────────────────────────────────────────┐  │
         │  │  WiFi Manager                           │  │
         │  │  (プロビジョニング時のみ接続)             │  │
         │  │  ※OTAには使用しない                     │  │
         │  └─────────────────────────────────────────┘  │
         │                      ▲                         │
         │  ┌─────────────────────────────────────────┐  │
         │  │  Normal App (User Application)          │  │
         │  │  (起動時に即座に実行)                   │  │
         │  │  - 30秒ごとにシリアルでHello World出力  │  │
         │  └─────────────────────────────────────────┘  │
         │                                                 │
         └─────────────────────────────────────────────────┘
                              │
                         Router/WiFi
                              │
                    (プロビジョニング時に接続のみ)
                    (OTA通信はBLE経由で実施)

構成の特徴

項目 説明
BLE通信 プロビジョニング、OTA、ログ配信、デバッグコマンド送受信 - すべてBLE経由
Wi-Fi プロビジョニング時に接続を確認するのみ(OTAには使用しない)
OTA方式 完全にBLE経由でファームウェアを転送(HTTP OTAは実装されていない)
ログ管理 リングバッファ方式で古いログから自動削除

BLE通信仕様

BLE Service 概要

ESP32 側で 3 つの独立した BLE GATT Service を提供します。

1. プロビジョニングサービス (Wi-Fi 設定)

項目
Service UUID 8f4f0001-7c8d-5f3e-ac9b-2b3c4d5e6f70
Characteristic UUID 8f4f0002-7c8d-5f3e-ac9b-2b3c4d5e6f70
Write (クライアント → デバイス)
説明 Wi-Fi 設定 (SSID/パスワード) を送信

プロトコル形式:

[SSID_LEN(1byte)] [SSID(N bytes)] [PASS_LEN(1byte)] [PASS(M bytes)]

例:

03 "ESP" 05 "12345"  → SSID: "ESP", Password: "12345"

2. デバッグモニタサービス (ログ配信)

Service UUID 7f3f0001-6b7c-4f2e-9b8a-1a2b3c4d5e6f
DebugLogTx
UUID 7f3f0002-6b7c-4f2e-9b8a-1a2b3c4d5e6f
Notify (デバイス → クライアント)
説明 シリアルログを行単位で配信
DebugCmdRx
UUID 7f3f0003-6b7c-4f2e-9b8a-1a2b3c4d5e6f
Write (クライアント → デバイス)
説明 デバッグコマンド送信
DebugStat
UUID 7f3f0005-6b7c-4f2e-9b8a-1a2b3c4d5e6f
Read/Notify (デバイス → クライアント)
説明 ステータス情報取得

DebugLogTx のプロトコル:

[STRING] = null-terminated or newline-terminated log line

DebugCmdRx コマンド例:

"LVL:0"   → ログレベルを ERROR に変更
"LVL:1"   → ログレベルを WARN に変更
"LVL:2"   → ログレベルを INFO に変更
"LVL:3"   → ログレベルを DEBUG に変更
"CLR"     → ログバッファをクリア
"PING"    → ハートビート確認

3. OTA制御サービス

項目 UUID
Service UUID 9f5f0001-8d9e-6f4e-bd0c-3c4d5e6f7180
OtaControl 9f5f0002-8d9e-6f4e-bd0c-3c4d5e6f7180
Write/Read
説明 OTA制御コマンド(START/END/ABORT)
OtaData 9f5f0003-8d9e-6f4e-bd0c-3c4d5e6f7180
Write
説明 ファームウェアバイナリデータ送信
OtaStatus 9f5f0004-8d9e-6f4e-bd0c-3c4d5e6f7180
Read/Notify
説明 OTA 進捗状態通知

OtaControl コマンド形式:

START:<size>  → OTA開始(例: START:524288 = 512KB)
END           → OTA完了・検証・再起動
ABORT         → OTA中止

OtaData プロトコル:

  • バイナリデータをチャンク単位で送信(BLEの最大MTUに応じて自動分割)
  • 通常は180バイト以下のチャンクで送信(iOS/Bluefy向けに最適化)
  • 順次書き込み(シーケンス番号なし)

OtaStatus 応答例:

IDLE                  → 待機中
READY                 → OTA開始準備完了
PROGRESS:102400/524288 → 進捗通知(100KB/512KB)
SUCCESS               → OTA成功(再起動中)
ERROR:WRITE_FAILED    → エラー発生
ABORTED               → ユーザーによる中止

BLE OTA通信仕様

OTA手順(BLE経由)

ESP32へのファームウェア更新は完全にBLE経由で実行されます。Wi-Fiは使用しません。

1. OTAモード有効化

WebAppからBLE経由で OTA_MODE コマンドを送信します(DebugCmdRx Characteristicを使用)。

BLE Write (DebugCmdRx): "OTA_MODE"

デバイスは通常アプリの実行を一時停止し、OTAモードに入ります。

2. OTA開始

WebAppは OtaControl Characteristicに START:<size> を送信します。

BLE Write (OtaControl): "START:524288"

デバイス側では Update.begin(size) が呼ばれ、フラッシュのOTAパーティションが準備されます。

3. ファームウェアデータ送信

WebAppは .bin ファイルを読み込み、180バイト以下のチャンクに分割して OtaData Characteristicに順次送信します。

BLE Write (OtaData): [binary chunk 1]
BLE Write (OtaData): [binary chunk 2]
...
BLE Write (OtaData): [binary chunk N]

デバイス側では各チャンクを Update.write() でフラッシュに書き込みます。

4. 進捗通知

デバイスは100KBごと、または完了時に OtaStatus をNotifyします。

BLE Notify (OtaStatus): "PROGRESS:102400/524288"
BLE Notify (OtaStatus): "PROGRESS:204800/524288"
...

5. OTA完了

全データ送信後、WebAppは OtaControl に END を送信します。

BLE Write (OtaControl): "END"

デバイス側では Update.end(true) が呼ばれ、ファームウェアが検証されます。成功すると自動的に再起動します。

BLE Notify (OtaStatus): "SUCCESS"
[デバイス再起動]

エラー処理

エラーが発生した場合、OtaStatusでエラーコードが通知されます。

ERROR:INVALID_SIZE    → サイズが不正(0または2MB超過)
ERROR:BEGIN_FAILED    → Update.begin() 失敗
ERROR:WRITE_FAILED    → フラッシュ書き込み失敗
ERROR:END_FAILED      → Update.end() 失敗(検証失敗)
ERROR:NOT_STARTED     → OTA未開始状態でENDが呼ばれた

OTA制限事項

項目
最大ファームウェアサイズ 2MB
最小チャンクサイズ 1バイト
推奨チャンクサイズ 180バイト(iOS/Bluefy向けに最適化)
同時OTA 不可(1デバイスずつ)
途中再開 不可(中断したら最初からやり直し)

BLE OTAの仕組み(初心者向け解説)

1) まずOTAって何?

ESP32のプログラムは、PCみたいにHDDに置くのではなく、**Flash(不揮発メモリ)**に書かれています。

OTAは「USBケーブルで書き込む代わりに、通信で書き込む」方法です。

  • USB書き込み: PC → USB/UART → Flashへ書き込み
  • OTA書き込み: スマホ/PC →(Wi-Fi or BLEなど)→ Flashへ書き込み

2) BLE OTAの全体像(登場人物)

BLE OTAでは、次の2者がやり取りします。

  • 送る側(クライアント): iPad/スマホ/PCのアプリ(このプロジェクトではBluefyのWebアプリ)
  • 受け取る側(デバイス): ESP32(BLEを受け、Flashへ書く)

重要なポイントとして、ESP32側には最初から**「受け取り&Flash書き込み」機能(OTAロジック)**が入っている必要があります。 (入っていないと、受け取って書き込めません)

3) BLE OTAのデータの流れ(超ざっくり)

[iPad/Webアプリ]
        ① ファーム(.bin)を選ぶ
        ② BLEでESP32へ小分け送信
                                        ↓
[ESP32]
        ③ 受け取った順にFlash(OTA領域)へ書く
        ④ 受信完了したら整合性チェック
        ⑤ 次回起動先を新ファームに切替
        ⑥ 再起動 → 新ファームで起動

4) BLEなので「小分け」が必須(Wi-Fi OTAとの違い)

BLEはWi-Fiよりデータ帯域が小さく、さらに1回に送れるデータ(パケットサイズ)も小さいため、 ファームウェア(数百KB〜数MB)を次のように送ります。

  • 何千〜何万個の小さいチャンク(断片)に分割
  • 順番に送信
  • ESP32側で順番を管理してFlashへ追記

5) BLE OTAの通信(GATT)を初心者向けに言うと

BLEでは「サービス」と「キャラクタリスティック」という入れ物を使います。

よくある構成(典型)は以下です。

  • OTA Service - Control Characteristic(書き込み開始/終了/再起動などの命令)- Data Characteristic(ファーム本体データを流す)- Status Characteristic(進捗やエラーを通知)

イメージ:

  • Control: START, END, ABORT
  • Data: バイナリ断片をひたすら送る
  • Status: 受信OK、CRC一致、書き込み失敗 など

6) 詳細な内部手順(ESP32側で実際にやっていること)

(A) OTAの書き込み先を用意する

ESP32のFlashは「パーティション」に分かれています。OTA対応ではよく次のような構成です。

  • factory(初期ファーム)
  • ota_0(更新先1)
  • ota_1(更新先2)
  • nvs(設定保存)

更新は**今動いている領域とは別の領域(ota_0/ota_1)**に書きます。 これがOTAが安全な理由で、今動いているプログラムを直接書き潰しません。

OTA開始時にESP32は「次に書くべき空きスロット(ota_0 または ota_1)」を決めます。

(B) 受信 → Flash書き込みを繰り返す

BLEで届いた小片データを順にFlashへ書きます。実装上はだいたい次の流れです。

  • 受信バッファへ取り込む
  • Flashへ書く(一定サイズごと)
  • オフセット(どこまで書いたか)を更新

ここで重要なのは、

  • 途中で切断しても復帰できる設計にするか
  • できないなら最初からやり直すか

を仕様として決めることです。

(C) 完了後の整合性チェック

最後まで受け取ったら、ESP32は次をチェックします。

  • 受信サイズが一致しているか
  • ハッシュ/CRCが一致するか
  • 署名(将来拡張)が正しいか

一致しない場合は失敗として破棄し、旧ファームのまま動作します。

(D) ブート先を切り替える

チェックがOKなら、Flash上の管理情報に 「次の起動は ota_1(または ota_0)から起動する」 というフラグを書き込みます。

(E) 再起動して新ファームへ

再起動するとブートローダがそのフラグを見て、新しい領域から起動します。


Wi-Fi接続の役割

Wi-Fiの使用目的

このシステムでは、Wi-Fiはプロビジョニング時の接続確認のみに使用されます。

用途 説明
プロビジョニング確認 BLE経由で受信したSSID/パスワードが正しいか確認
IPアドレス取得 接続成功時のIPアドレスをBLE経由でWebAppに通知(参考情報)
通常アプリでの使用 ユーザーアプリ内でWi-Fi通信が必要な場合のみ使用

Wi-Fiを使用しない用途

用途 理由
OTA通信 OTAは完全にBLE経由で実施(HTTP OTAなし)
起動時接続 起動時は自動でWi-Fiに接続しない(遅延起動)

Wi-Fi状態遷移

[起動]
  ↓
[WIFI_IDLE] (待機中 - 未接続)
  ↓
[BLEプロビジョニング受信]
  ↓
[WIFI_CONNECTING] (接続試行中)
  ├→ [WIFI_CONNECTED] (成功 - IPアドレス取得)
  └→ [WIFI_FAILED] (失敗 - 再試行待機)

マイコン側(ESP32)の使い方

必要なもの

項目 詳細
ハードウェア ESP32-S3 Super Mini + USB ケーブル
ソフトウェア Python 3.x, PlatformIO CLI or VSCode
開発環境 Windows/Mac/Linux

セットアップ手順

1. PlatformIO のインストール

VSCode 拡張を使う場合(推奨):

  1. VSCode をインストール
  2. Extension マーケットプレイスで platformio を検索
  3. "PlatformIO IDE" をインストール

CLI を使う場合:

pip install platformio

2. プロジェクトのセットアップ

cd MiconSide
platformio project init --board lolin_s3_mini --framework arduino

3. 依存関係の確認

platformio.ini にて以下が設定済みであることを確認:

[env:esp32-s3-devkitc-1]
platform = espressif32
board = lolin_s3_mini
framework = arduino
board_build.partitions = partitions_ota_2m.csv
monitor_speed = 115200

ビルド・アップロード手順

方法 1: VSCode + PlatformIO (推奨)

  1. VSCode で MiconSide フォルダを開く
  2. PlatformIO ツールバー → Build をクリック
  3. Upload ボタンをクリック(ESP32を USB 接続)
  4. ビルド完了後、自動的に書き込みが開始

方法 2: CLI

cd MiconSide

# ビルド
platformio run

# ボード接続後、アップロード
platformio run --target upload

# シリアルモニタ表示
platformio device monitor --speed 115200

方法 3: 標準 Arduino IDE

  1. Arduino IDE で main.cpp を開く
  2. Tools → Board → "ESP32-S3 Super Mini" 選択
  3. Tools → Port → COM ポート選択
  4. Sketch → Upload

起動時の動作

[起動]
  ↓
[工場出荷リセットトリガ判定]
  ├→ トリガあり → NVS 消去 → 再起動
  └→ トリガなし ↓
[NVS 内の Wi-Fi 設定確認]
  ├→ 設定あり → 通常アプリ起動
  │           (Wi-Fi は未接続)
  │
  └→ 設定なし → BLE プロビジョニングモード
                 (待機中)

シリアル出力の確認

起動時にシリアルモニタで以下が表示されます:

[2024-02-28 12:34:56] ESP32-S3 Super Mini Firmware v1.0.0 Started
[2024-02-28 12:34:57] BLE Advertising: "ESP32-XXXX"
[2024-02-28 12:34:58] Waiting for BLE connection...
[2024-02-28 12:35:00] [Hello] System initialized

ファクトリリセット方法

BOOTボタンを3〜5秒長押し:

  • NVS 内の Wi-Fi 設定を消去
  • 再起動後、BLEプロビジョニングモードに遷移

WebApp側(iPad/Bluefy)の使い方

必要なもの

項目 詳細
デバイス iPad(または Web Bluetooth 対応ブラウザ搭載機)
ブラウザ Bluefy (iOS/iPad) または Chrome (Android/PC)
ネットワーク Wi-Fi 環境(プロビジョニング後)

アプリの起動方法

方法 1: ローカルホスト(開発用)

Python HTTP サーバ:

cd WebAppSide
python -m http.server 8000

その後、ブラウザで:

http://localhost:8000

方法 2: Live Server (VSCode)

  1. VSCode で WebAppSide/index.html を右クリック
  2. "Open with Live Server" をクリック
  3. ブラウザが自動で開く

方法 3: Netlify にデプロイ(本番)

cd WebAppSide
npm install -g netlify-cli
netlify deploy

UI の構成

WebApp は以下の 4 つのパネルから構成されます:

1️⃣ BLE接続パネル

┌──────────────────────────────┐
│ BLE デバイス接続              │
├──────────────────────────────┤
│ [接続] ボタン                 │
│ ステータス: "未接続"          │
│ デバイス名: -                 │
└──────────────────────────────┘

操作:

  • [接続] ボタン → デバイス選択ダイアログ
  • 接続完了後、[切断] ボタンに切り替わる

2️⃣ Wi-Fi設定パネル

┌──────────────────────────────┐
│ Wi-Fi プロビジョニング        │
├──────────────────────────────┤
│ SSID: [入力欄]                │
│ パスワード: [入力欄]          │
│ [送信] ボタン                 │
│ 結果表示: "接続中..."         │
└──────────────────────────────┘

操作:

  1. SSID を入力(例: MyWiFi
  2. パスワードを入力
  3. [送信] をクリック
  4. デバイスが Wi-Fi に接続されると、IPアドレスが表示される

3️⃣ ファームウェア更新パネル

┌──────────────────────────────┐
│ ファームウェア更新 (OTA)      │
├──────────────────────────────┤
│ [ファイル選択] (.bin ファイル) │
│ [アップロード] ボタン         │
│ 進捗: [===========] 100%      │
│ 状態: "更新完了"              │
└──────────────────────────────┘

操作:

  1. パソコンから .bin ファイルを選択(最大2MB)
  2. [アップロード] ボタンをクリック
  3. BLE経由でOTA_MODEコマンド送信
  4. ファームウェアデータをBLE経由で送信(180バイトチャンク)
  5. 進捗バーの表示を確認
  6. "更新完了" メッセージで完了 → デバイス自動再起動

⚠️ 注意:

  • BLE接続が確立していることを確認してください
  • アップロード中はデバイスとiPadを近い距離に保ってください(BLE範囲内)
  • ファイルサイズが2MB以下であることを確認してください

4️⃣ BLEデバッグモニタパネル

┌──────────────────────────────┐
│ デバッグモニタ                │
├──────────────────────────────┤
│ [購読開始] ボタン             │
│                              │
│ -------- ログ出力 -------- │
│ [12:34:56] [INFO] Hello      │
│ [12:34:57] [ERROR] Fail      │
│ [12:35:00] [DEBUG] State OK   │
│                              │
│ [クリア] ボタン               │
│ コマンド: [LVL:3] [送信]      │
└──────────────────────────────┘

操作:

  • [購読開始] → ログ受信開始
  • [クリア] → ログバッファをクリア
  • コマンド欄に LVL:3 などを入力して [送信]

利用可能なコマンド:

コマンド 説明
LVL:0 ログレベルを ERROR に設定
LVL:1 ログレベルを WARN に設定
LVL:2 ログレベルを INFO に設定
LVL:3 ログレベルを DEBUG に設定
CLR ログバッファをクリア
PING デバイスの応答確認

動作フロー

初回セットアップの全体フロー

┌─────────────────────────────────────────────────────┐
│ 1. デバイスの起動                                     │
│    - ESP32をUSBで電源接続                           │
│    - 起動完了: BLE広告開始                          │
│    - iPad で BLE デバイスが見える                    │
└─————────────┬───────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────┐
│ 2. iPad で WebApp を開く                            │
│    - Bluefy ブラウザで WebApp URL を開く            │
│    - "BLE デバイス接続" パネル表示                   │
└─────────────┬───────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────┐
│ 3. BLE 接続                                         │
│    - [接続] ボタンをクリック                         │
│    - デバイスリストから "ESP32-XXXX" 選択           │
│    - 接続完了: パネルが青く点灯                     │
└─────────────┬───────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────┐
│ 4. Wi-Fi プロビジョニング(オプション)               │
│    - SSID: "MyWiFi" を入力                          │
│    - パスワード: "MyPassword" を入力                │
│    - [送信] をクリック                              │
│    → ESP32 が Wi-Fi に接続                         │
│    → IP アドレス表示「192.168.1.100」              │
│    ✅ Wi-Fi接続確認完了(参考情報として表示)       │
└─────────────┬───────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────┐
│ 5. デバッグログ確認(オプション)                     │
│    - デバッグモニタパネル → [購読開始]              │
│    - ESP32 のログがリアルタイム配信                 │
└─────────────┬───────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────┐
│ 6. ファームウェア更新 (OTA) - BLE経由               │
│    - 新しい .bin ファイルを選択                     │
│    - [アップロード] をクリック                       │
│    → OTA_MODEコマンド送信(BLE経由)               │
│    → ファームウェアデータ送信(BLE経由・180バイトチャンク) │
│    → 進捗表示(BLE Notifyで受信)                  │
│    → 更新完了: ESP32 が自動で再起動               │
│    → 再起動後、新しいファームウェア起動             │
└─────────────┬───────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────┐
│ 7. 完了                                             │
│    - 再起動後は通常アプリが起動                     │
│    - Wi-Fi は接続しない(次回プロビジョニングまで) │
│    - 通常アプリがWi-Fi通信が必要な場合のみ使用     │
└─────────────────────────────────────────────────────┘

Wi-Fi 接続フロー(詳細)

[BLE プロビジョニング開始]
        ↓
[Wi-Fi 設定受信 (BLE)]
        ↓
[NVS に保存]
        ↓
[Wi-Fi 接続試行]
        ├→ [成功]
        │    ↓
        │  [IP アドレス取得]
        │    ↓
        │  [BLE で IPアドレス通知]
        │    ↓
        │  [プロビジョニング完了]
        │    └→ 通常アプリ起動
        │
        └→ [失敗]
             ↓
          [BLE でエラー通知]
             ↓
          [再試行待機]

OTA 更新フロー(詳細) - BLE経由

[BLE接続済み]
        ↓
[.bin ファイル選択]
        ↓
[WebApp が BLE経由で OTA_MODE コマンド送信]
        ↓
[ESP32がOTAモードに入る - 通常アプリ停止]
        ↓
[WebApp が OtaControl に START:<size> を送信 (BLE Write)]
        ↓
[ESP32 が Update.begin(size) を実行]
        ↓
[WebApp がファームウェアを180バイトチャンクに分割]
        ↓
[各チャンクを OtaData に送信 (BLE Write)]
        ├→ Chunk 1: Write → Update.write()
        ├→ Chunk 2: Write → Update.write()
        └→ Chunk N: Write → Update.write()
        ↓
[100KBごとに進捗を OtaStatus で通知 (BLE Notify)]
        ├→ PROGRESS:102400/524288
        ├→ PROGRESS:204800/524288
        └→ ...
        ↓
[全チャンク送信完了]
        ↓
[WebApp が OtaControl に END を送信 (BLE Write)]
        ↓
[ESP32 が Update.end(true) を実行 - ファームウェア検証]
        ↓
[検証成功 → OtaStatus で SUCCESS を通知]
        ↓
[デバイス自動再起動]
        ↓
[新しいファームウェア起動]
        ↓
[通常アプリ実行]

トラブルシューティング

BLE 接続の問題

症状 原因 解決方法
接続ボタンをクリックしてもデバイスが出現しない ESP32 起動失敗 / BLE 広告していない 1. ESP32 を再起動
2. シリアルモニタで "BLE Advertising" が表示されることを確認
3. Bluefy のバージョンを最新にアップデート
デバイスが表示されるが接続失敗 BLE ペアリング要求 / 範囲外 1. ESP32 と iPad を近い距離に配置
2. ペアリングが要求された場合、承認
3. WebApp をリロード後、再試行
接続後、すぐに切断される BLE リソース不足 / メモリ不足 1. iPad の Bluetooth 設定をリセット
2. iPad を再起動
3. ESP32 を再起動

Wi-Fi プロビジョニングの問題

症状 原因 解決方法
SSID や Password が受を受け付けない BLE 接続が確立していない 1. BLE 接続を確認 (パネルが青く点灯)
2. デバッグモニタで "PROVISIONING" ログを確認
Wi-Fi 接続に失敗する SSID/Password が間違っていない
ルータ接続不可
1. SSID と Password を確認
2. ルータが 2.4GHz を対応しているか確認
3. ルータ側で ESP32 の接続を許可
IP アドレスが表示されない Wi-Fi の DHCP がタイムアウト 1. ルータの DHCP 機能を有効化
2. ESP32 を再起動して再プロビジョニング
3. ルータとの距離を縮める

OTA 更新の問題

症状 原因 解決方法

OTA 更新の問題

症状 原因 解決方法
OTA_MODEコマンドが送信できない BLE接続が切断された 1. BLE接続を再確立
2. デバイスを再起動
3. WebAppをリロード
.bin ファイル選択ボタンが反応しない ファイル形式が間違っている
WebApp の読み込み失敗
1. ファイル拡張子が .bin か確認
2. WebApp をリロード
3. 別のファイル選択ツールを使用
アップロード中に進捗が止まる BLE接続の問題
デバイス側のメモリ不足
1. ESP32 と iPad を近い距離に配置
2. 他のBLE機器を切断
3. ファイルサイズを確認(2MB以下か)
ERROR:WRITE_FAILEDエラーが出る フラッシュ書き込み失敗 1. デバイスを再起動
2. パーティションテーブル(partitions_ota_2m.csv)を確認
3. ファームウェアサイズを確認
アップロード完了後、デバイスが再起動しない Update.end()失敗(検証エラー) 1. シリアルモニタでエラーメッセージを確認
2. ESP32 を手動でリセット
3. ファームウェアイメージを再ビルド
BLEのMTUサイズエラー チャンクサイズがMTUを超過 1. WebApp側のチャンクサイズを180バイト以下に設定
2. デバイス再接続

デバッグログが受信できない

症状 原因 解決方法
[購読開始] をクリックしても何も表示されない BLE Subscribe が失敗 1. BLE 接続を再確立
2. WebApp をリロード
3. iPad を再起動
最初だけログが表示され、その後途切れる ログバッファがオーバーフロー 1. [クリア] ボタンでバッファをクリア
2. ログレベルを下げる (LVL:1)
3. ESP32 側でログ出力を削減

一般的な問題

症状 原因 解決方法
デバイス名が "ESP32" より詳細でない メモリ不足 / 名前設定が未実装 1. ESP32 を再起動
2. main.cpp の device_name を確認
WebApp が応答しない ブラウザキャッシュ問題
メモリ不足
1. Bluefy キャッシュをクリア
2. iPad を再起動
3. WebApp URL をリロード (Ctrl+R or Cmd+R)

詳細ドキュメント

より詳細な情報は以下をご参照ください:

文書 内容
CreatePlan.md 実装詳細設計書(ESP32 側の実装方針)
SpecifcationDoc.md システム仕様書(全体仕様)
MiconSide/README.md マイコン側ビルド・アップロード詳細手順
WebAppSide/README.md WebApp デプロイ・カスタマイズ手順

ライセンス

このプロジェクトはオープンソースです。自由に利用・改変・配布できます。


サポート

問題が発生した場合:

  1. シリアルモニタ(マイコン側)のログを確認
  2. ブラウザの開発者ツール(WebApp 側)でエラーを確認
  3. 本 README の トラブルシューティング セクションを参照
  4. ドキュメント内の詳細仕様を確認してから、デバイスやアプリを再起動

最終更新: 2026-02-28
実装対応版: CreatePlan.md v0.1 / SpecifcationDoc.md v0.2 (BLE OTA実装版)
重要: HTTP OTAは実装されていません。すべてのOTA通信はBLE経由で実施されます。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors