Flipper ZeroでWi-Fi Developer Boardを使用する方法

# はじめに
本記事はFlipper ZeroでWi-Fi Developer Boardを使用する方法について記載しています。

Wi-Fi Developer Boardを購入してセットアップを行なったところ、セットアップに癖がありました。

Geekの方の参考になれば幸いです。

![写真 2025-02-24 15 49 22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/d41c01c6-4545-4c76-bf00-7b2ec968fe9a.jpeg)

## Wi-Fi Developer Board
Wi-Fi Developer Board（以下、Developer Board）は、Flipper Zeroを拡張するための[ESP32-S2](https://www.espressif.com/en/products/socs/esp32-s2)[^1]モジュールに基づいたプリント基盤です。

### 機能
Developer Boardは、Flipper Zeroにデバッグ機能とファームウェア更新機能を追加します。

基本的には開発者向けのデバッグ機能を提供しますが、Wi-Fiを利用した侵入テストを行うこともできます。

なお、侵入テストに関する機能は標準では搭載されていないため、自分でビルドを行うか用意されたファームウェアを使用するなど環境構築が必要です。

### 仕様
Developer Boardは、Black Magic Debug[^2]と、[CMSIS-DAP](https://arm-software.github.io/CMSIS-DAP/latest/)[^3]を組み込んだカスタムファームウェアを搭載し、ESP32-S2 MCUをベースにした[ESP-IDF](https://www.espressif.com/en/products/sdks/esp-idf)[^4]を使用して構築されています。

[^1]: Wi-FiとBluetoothを内蔵する低消費電力なSoCのマイクロコントローラ
[^2]: Black Magic Probeの形式に基づきGNU DeBugger (GDB)サーバを実装する
[^3]:[CoreSight Debug Access Port (DAP)](https://developer.arm.com/documentation/102585/0100/)へのアクセスをサポートするプロトコル仕様及びARMが提供するリファレンスファームウェアの実装
[^4]:ESP32、ESP32-S、ESP32-C、ESP32-H シリーズのSoC向けEspressifの公式IoT開発フレームワーク

Developer Boardのハードウェアに関する詳細については、以下公式ドキュメントより確認できます。

- 回路図：[Wi-Fi Developer Board schematics](https://docs.flipperzero.one/development/hardware/wifi-debugger-module/schematics)
- GPIO：[GPIO & modules](https://docs.flipper.net/gpio-and-modules)

## 購入方法
Amazonなどでも出品されていますが、正規ルートであるMarketplaceからの購入をお勧めします。

Marketplaceからの購入方法については、以前書いた「[Geekのためのマルチツール　Flipper Zero](https://qiita.com/Brutus/items/96009690b112eb7f407c#%E6%A9%9F%E8%83%BD)」をご参照ください。

また、上記記事でも書いていますが、支払いの通貨の選択によって金額が異なります。筆者は少しでも安く買うために今回もUSDを選択しました。

- USD
![スクリーンショット 2025-02-19 23.30.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/96119047-368f-443b-93da-bd7d7d663e96.png)

- JPY
![スクリーンショット 2025-02-19 23.22.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/f8e34c89-6782-4b3d-bbdc-585f9e9b7037.png)

## セットアップ
Developer Boardを使用ために最低限必要な作業は、公式ドキュメントの「[Get started with the Devboard](https://developer.flipper.net/flipperzero/doxygen/dev_board_get_started.html)」を踏まえて、以下の通りです。

- [x] Flipper Zeroでデバッグモードを有効にする
- [x] Developer Boardのファームウェアを更新する
- [x] DevboardをFlipper Zeroに接続する
- [x] コンピューターに接続する

![写真 2025-02-24 15 47 03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/a7d5fe3b-59bf-4faa-8af8-6d8fb3bc6c6f.jpeg)

### Flipper Zeroでデバッグモードを有効にする
Flipper Zeroを操作して[Settings] → [System]に移動して、[Debug]を[ON]に設定します。

![Screenshot 2025-02-24 at 15.52.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/eb5469a6-f80b-4cf7-858e-9cc259b78627.png)

### Developer Boardのファームウェアを更新する
最新の機能とバグ修正を適用するためには、Developer Boardを定期的に更新することが重要です。

#### micro Flipper Build Toolのインストール
はじめにDeveloper Boardへファームウェアのフラッシュなどを行うことができる[uFBT](https://pypi.org/project/ufbt/)をインストールします。

以下はMacの例です。

`$ python3 -m pip install --upgrade ufbt`

```
Collecting ufbt
  Downloading ufbt-0.2.6-py3-none-any.whl.metadata (8.2 kB)
Collecting oslex>=0.1.3 (from ufbt)
  Downloading oslex-0.1.3-py3-none-any.whl.metadata (1.7 kB)
Collecting mslex (from oslex>=0.1.3->ufbt)
  Downloading mslex-1.3.0-py3-none-any.whl.metadata (4.2 kB)
Downloading ufbt-0.2.6-py3-none-any.whl (25 kB)
Downloading oslex-0.1.3-py3-none-any.whl (3.5 kB)
Downloading mslex-1.3.0-py3-none-any.whl (7.8 kB)
Installing collected packages: mslex, oslex, ufbt
Successfully installed mslex-1.3.0 oslex-0.1.3 ufbt-0.2.6
```

#### Developer BoardをPCに接続する
Developer Boardをブートローダモードに切り替えて、USB-CケーブルでPCに接続し、PCがDeveloper Boardを検出できる様にします。

![写真 2025-02-24 15 58 45.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/56a13398-314d-432a-8528-e858f3347dc6.jpeg)

以下のコマンドを実行して、PC接続後シリアルデバイスが認識されていることを確認します。

`$ ls /dev/cu.*`

```
/dev/cu.Bluetooth-Incoming-Port	/dev/cu.debug-console		/dev/cu.usbmodemblackmagic1	/dev/cu.usbmodemblackmagic3
```

Developer Boardをブートローダ モードに切り替えるためには、次の操作を行います。

1. BOOTボタンを長押し
1. BOOTボタンを押しながらRESETボタンを押す
1. BOOTボタンを放す

![写真 2025-02-24 16 00 24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/2678ed09-452b-4c36-8347-5a2876259a6a.jpeg)

#### ファームウェアのフラッシュ
ファームウェアをフラッシュするには、以下のコマンドを実行しますが、証明書の検証に失敗した場合は以下の様なメッセージが出力されます。

`$ python3 -m ufbt devboard_flash`

```
16:01:14.724 [I] Deploying SDK for f7
16:01:14.725 [I] Fetching version info for UpdateChannel.RELEASE from https://update.flipperzero.one/firmware/directory.json
16:01:14.812 [E] Failed to run operation: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)>. See --verbose for details
SDK is missing scripts distribution!
You might be trying to use an SDK in an outdated format.
You can clean up current state with `ufbt clean --purge`.
Run `ufbt update -h` for more information on SDK installation.
```

上記の様なメッセージが出力された場合は、以下のオプションを付与することで回避できます。

`$ python3 -m ufbt --no-check-certificate update`

```
16:09:35.449 [I] Deploying SDK for f7
16:09:35.450 [I] Fetching version info for UpdateChannel.RELEASE from https://update.flipperzero.one/firmware/directory.json
16:09:36.154 [I] Using version: 1.2.0
16:09:36.154 [I] uFBT SDK dir: /Users/flipper/.ufbt/current
16:09:36.835 [I] Deploying SDK
16:09:37.024 [I] SDK deployed.
```

再度、ファームウェアのフラッシュを行ったところ、今度は以下の様なエラーメッセージが出力されました。

`$ python3 -m ufbt devboard_flash`

```
Checking for tar..yes
Checking if downloaded toolchain tgz exists..no
Checking curl..yes
Downloading toolchain:
############################################################################################################################################################## 100.0%
done
Removing old toolchain..done
Unpacking toolchain to '/Users/flipper/.ufbt/toolchain':
##################################################################### 100.0%
linking toolchain to 'current'..done
Cleaning up..done
scons: Entering directory `/Users/flipper/.ufbt/current/scripts/ufbt'

fbt: warning: App folder '/Users/flipper': missing manifest (application.fam)
LoadAppManifest, line 130, in file "/Users/flipper/.ufbt/current/scripts/fbt_tools/fbt_apps.py"
python3 /Users/flipper/.ufbt/current/scripts/wifi_board.py
2025-02-24 16:12:22,183 [ERROR] WiFi board not found
2025-02-24 16:12:22,183 [INFO] Please connect WiFi board to your computer, hold down BOOT button and press RESET button
2025-02-24 16:12:22,183 [INFO] If you are using Linux, you may need to add udev rules to access the device
2025-02-24 16:12:22,183 [INFO] Check out 41-flipper.rules & README in scripts/debug folder
scons: *** [phony_devboard_flash] Error 1
```

PCから取り外し、再度接続を試みましたが、事象は解決できませんでした。

対応として、フォーラムの[[ERROR] WiFi board not found](https://forum.flipper.net/t/error-wifi-board-not-found/20711/12)を参照して、以下の手順を実行することで解消できました。

1. Wi-FiボードからUSB-Cを取り外す
1. BOOTボタンを押しながら差し込む
1. コマンドを実行

`$ python3 -m ufbt devboard_flash`

```
scons: Entering directory `/Users/flipper/.ufbt/current/scripts/ufbt'

fbt: warning: App folder '/Users/flipper': missing manifest (application.fam)
LoadAppManifest, line 130, in file "/Users/flipper/.ufbt/current/scripts/fbt_tools/fbt_apps.py"
python3 /Users/flipper/.ufbt/current/scripts/wifi_board.py
2025-02-24 18:27:14,528 [INFO] Downloading https://update.flipperzero.one/blackmagic-firmware/directory.json
2025-02-24 18:27:15,218 [INFO] Using channel 'release'
2025-02-24 18:27:15,218 [INFO] Using version '0.1.1'
2025-02-24 18:27:15,219 [INFO] Changelog:
2025-02-24 18:27:15,219 [INFO]   ## What's Changed
2025-02-24 18:27:15,219 [INFO]   * [readme] Add instructions on flashing firmware from source by @ide in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/8
2025-02-24 18:27:15,219 [INFO]   * [typo] fixed from credenitals to credentials by @GitAYYYer in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/9
2025-02-24 18:27:15,219 [INFO]   * Add schematic to README.md by @DrZlo13 in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/10
2025-02-24 18:27:15,219 [INFO]   * Update schematic to last version by @DrZlo13 in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/11
2025-02-24 18:27:15,219 [INFO]   * Update schematic link by @DrZlo13 in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/12
2025-02-24 18:27:15,220 [INFO]   * Fix the link that leads to schematics by @Alex-avia in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/15
2025-02-24 18:27:15,220 [INFO]   * add MDNS hostname as a config element by @0xDRRB in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/17
2025-02-24 18:27:15,220 [INFO]   * Dap-link support mode by @DrZlo13 in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/18
2025-02-24 18:27:15,220 [INFO]   * README: required version of esp-idf, development of the web interface by @DrZlo13 in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/22
2025-02-24 18:27:15,220 [INFO]   * Fix README esp-idf link by @DrZlo13 in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/27
2025-02-24 18:27:15,220 [INFO]   * Fix mDNS in AP mode by @Astrrra in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/29
2025-02-24 18:27:15,220 [INFO]   * Update blackmagic version by @DrZlo13 in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/23
2025-02-24 18:27:15,220 [INFO]   * Add indexer by @drunkbatya in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/32
2025-02-24 18:27:15,221 [INFO]   * Add compression by @drunkbatya in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/33
2025-02-24 18:27:15,221 [INFO]   ## New Contributors
2025-02-24 18:27:15,221 [INFO]   * @ide made their first contribution in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/8
2025-02-24 18:27:15,221 [INFO]   * @GitAYYYer made their first contribution in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/9
2025-02-24 18:27:15,221 [INFO]   * @Alex-avia made their first contribution in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/15
2025-02-24 18:27:15,221 [INFO]   * @0xDRRB made their first contribution in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/17
2025-02-24 18:27:15,221 [INFO]   * @Astrrra made their first contribution in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/29
2025-02-24 18:27:15,221 [INFO]   * @drunkbatya made their first contribution in https://github.com/flipperdevices/blackmagic-esp32-s2/pull/32
2025-02-24 18:27:15,221 [INFO]   **Full Changelog**: https://github.com/flipperdevices/blackmagic-esp32-s2/compare/0.0.2...0.1.1
2025-02-24 18:27:15,221 [INFO] Downloading https://update.flipperzero.one/builds/blackmagic-firmware/0.1.1/blackmagic-firmware-s2-full-0.1.1.tgz to /var/folders/9j/xp91vjk50y14w_m_lr_x1s3r0000gn/T/tmptfhyvs4z/blackmagic-firmware-s2-full-0.1.1.tgz
2025-02-24 18:27:15,351 [INFO] Unzipping /var/folders/9j/xp91vjk50y14w_m_lr_x1s3r0000gn/T/tmptfhyvs4z/blackmagic-firmware-s2-full-0.1.1.tgz
2025-02-24 18:27:15,372 [INFO] Running command: "python3 -m esptool -p /dev/cu.usbmodem01 -b 460800 --before default_reset --after no_reset_stub --chip esp32s2 write_flash --flash_mode dio --flash_freq 80m --flash_size 4MB 0x1000 bootloader.bin 0x10000 blackmagic.bin 0x8000 partition-table.bin" in "/var/folders/9j/xp91vjk50y14w_m_lr_x1s3r0000gn/T/tmptfhyvs4z"
2025-02-24 18:27:26,907 [INFO] WiFi board flashed successfully
2025-02-24 18:27:26,907 [INFO] Press RESET button on WiFi board to start it
```

また、`ls /dev/cu.*`の出力結果も変わったことが確認できました。

```
/dev/cu.Bluetooth-Incoming-Port	/dev/cu.debug-console		/dev/cu.usbmodem01
```

#### インストールを完了する
インストール完了後、次の操作を行いファームウェアが正常に更新されたことを確認します。

1. RESETボタンを押してDeveloper Boardを再起動する
1. USB-Cケーブルを外して再度接続する

### DevboardをFlipper Zeroに接続する
ファームウェアを更新後、Flipper Zeroに接続できますが、次の2点に留意します。

- Developer BoardをFlipper Zeroを接続する前に、Flipper Zeroの電源をオフにする
- Developer Boardが完全に挿入されていることを確認する

![写真 2025-02-24 18 35 09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/c7f4cf2f-2376-4f66-8075-5ce2c961e94d.jpeg)

### コンピューターに接続する
Developer Boardにワイヤレスで接続するには、次の2つの方法があります。

- Wi-Fi access point mode (default)
    - 独自の Wi-Fi ネットワークを作成
- Wi-Fi client mode
    - 既存のWi-Fiネットワークを介してDevboardに接続できるため、インターネット接続を失うことなくWi-Fi経由でDevboard Webインターフェースにアクセスし、デバッグを行なうことが可能

#### Developer BoardへのWi-Fi接続
Developer BoardをWi-Fi client modeで接続するには、次の手順を実行して、Wi-Fi ネットワークに接続するように構成する必要があります。

1. Flipper Zero の電源をオフにして開発ボードを接続し、デバイスの電源を再度オンにして、Developer BoardをFlipper Zeroに接続する
1. Wi-Fi access point modeでDeveloper Boardに接続する
1. ブラウザでDeveloper BoardのWebインターフェイス(http://192.168.4.1 または http://blackmagic.local )にアクセスする
1. STAモードを選択し、ネットワークのSSID (名前) とパスワードを入力（+ボタンをクリックすると、近くの2.4GHzネットワークのリストが表示される※5GHzネットワークはサポートされない）

![スクリーンショット 2025-02-24 18.42.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/84ac3a8c-4285-4735-aef9-d98ecf8d7060.png)

以上で既存のWi-Fi ネットワーク経由でアクセスすることができます。

# おわり
Flipper Zeroは好奇心をくすぐるのに最適なツールです。

Developer Boardを使用することで、低レイヤの開発について学ぶことができます。

## 参考
- [Flipper Build Tool {#fbt}](https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/fbt.md)
- [Black Magic Debug: The Plug&Play MCU Debugger](https://black-magic.org/index.html)