超低消費電力マイコン「Nordic nRF54L15」で、完全ワイヤレスなカメラシステムを構築してみました。
nRF54L15は、内蔵SRAMがわずか256KBという非常にコンパクトな環境です。
今回は、Zephyr RTOSとArducam Mega 3MPを組み合わせ、高解像度静止画(1600x1200 UXGA)のBLE転送と、最大20〜25 FPSのリアルタイムワイヤレス動画ストリーミングを実現した技術記録を紹介します。
Bluetooth Low Energy 5.4のハイスループット機能(2M PHY・DLE・大容量MTU)や、内蔵SRAMを効率的に使うバッファ設計、Web Bluetoothを活用したインストール不要のビューワー環境についても詳しく解説します。
Nordic nRF54L15 & Zephyr RTOS で完全ワイヤレスカメラ!【BLE 5.4 高解像度静止画 & リアルタイム動画配信編】
超低消費電力マイコン「Nordic nRF54L15」で、完全ワイヤレスなカメラシステムを構築してみました。
nRF54L15は、内蔵SRAMがわずか256KBという非常にコンパクトな環境です。

今回は、Zephyr RTOSとArducam Mega 3MPを組み合わせ、高解像度静止画(1600x1200 UXGA)のBLE転送と、最大20〜25 FPSのリアルタイムワイヤレス動画ストリーミングを実現した技術記録を紹介します。


Bluetooth Low Energy 5.4のハイスループット機能(2M PHY・DLE・大容量MTU)や、内蔵SRAMを効率的に使うバッファ設計、Web Bluetoothを活用したインストール不要のビューワー環境についても詳しく解説します。
プロジェクト・GitHubのリンク先
GitHubのリンク先は下記です

実際のデモ動画は下記です
スタンドアローンBLE 5.4静止画カメラ(1600x1200 UXGA写真のBLEストリーミング)
リアルタイムBLE 5.4ワイヤレス動画配信(2M PHY・最大20 FPS動画ストリーミング)
ハードウェア構成とピンアサイン
今回のシステムは、Nordic Semiconductorの次世代SoC評価ボード「nRF54L15-DK」と「Arducam Mega 3MP(SPI接続カメラ)」を使用しています。
nRF54L15-DKのPORT P1拡張コネクタへ、以下のように結線しました。
カメラモジュール接続一覧表
| 信号名 | Arducam Megaピン | nRF54L15-DK (PORT P1) | 機能・役割 |
|---|---|---|---|
| 電源 (VCC) | Pin 1 (VCC) | Pin 1 (VDDIO) | 3.3V 電源供給 |
| グランド (GND) | Pin 2 (GND) | Pin 2 (GND) | グランド接地 |
| SPI クロック (SCK) | Pin 5 (SCK) | Pin 11 (P1.11) | SPI22 SCK(8MHz高速転送) |
| SPI MOSI | Pin 3 (MOSI) | Pin 6 (P1.06) | SPI22 MOSI(コマンド送信) |
| SPI MISO | Pin 4 (MISO) | Pin 7 (P1.07) | SPI22 MISO(画像データ受信) |
| チップセレクト (CS) | Pin 6 (CS) | Pin 10 (P1.10) | SPI22 CS(GPIO制御) |
nRF54L15-DKには、オンボードで8MBの大容量SPI NOR Flash(Macronix MX25R64)も搭載されており、撮影した写真をオフライン保存することも可能です。
BLE 5.4で実現する高解像度静止画ワイヤレスカメラ
まずは、1600x1200(UXGA、1.92メガピクセル)の高精細写真をワイヤレス転送する静止画カメラ機能(nrf54l15_ble_camera)です。
センサ本来の4:3アスペクト比を維持
一般的なVGAやHD解像度への無理なトリミングを行わず、Arducam Mega 3MPの物理受光素子比率に合致した1600x1200(UXGA)を採用しました。
これにより、画像の歪みや画面下部のグレー欠損が一切発生しない、鮮明なJPEG写真が得られます。
Single-Buffer(160KB)と外部Flashのデュアル記録
nRF54L15の内蔵SRAM(256KB)に、160KBの静的バッファを .bss 領域に確保しました。
Zephyrの公式外部バッファインポートAPI video_import_buffer() を用いることで、ヒープ断片化を回避しています。
撮影されたJPEGデータ(約100〜140KB)は、SRAMから直接BLEで即座にストリーミング送信されると同時に、オンボードの外部SPI Flash(MX25R64)へ自動保存されます。
通信が切断された状態でも、本体のボタン(Button 0)を押すだけで写真をFlashへ保存し、後からBLE経由で読み出すことが可能です。
Nordic UART Service(NUS)による高速BLE転送
BLE通信には、マルチプラットフォームで広くサポートされている「Nordic UART Service(NUS)」を採用しました。
ATT MTUを最大247バイト、Data Length Extension(DLE)を251バイトにネゴシエーションすることで、実効レート約24〜27 KB/s(約190〜215 kbps)を達成しています。
135KB前後の高解像度写真も、わずか5秒台でワイヤレス転送が完了します。
BLE 5.4によるリアルタイムワイヤレス動画配信
続いて、同じnRF54L15環境で動画ストリーミング(12〜25 FPS)を実現する動画配信機能(nrf54l15_ble_video)です。
SRAM 256KB環境におけるダブルバッファ設計
動画配信では、カメラからのSPIキャプチャとBLE無線送信を同時に並行処理する必要があります。
そこで、32KB × 2面(計64KB)の静的Ping-Pongダブルバッファリングを実装しました。
バッファ0をBLEで無線送信している間に、カメラ側がバッファ1へ次フレームを並行してキャプチャします。
これにより、パイプラインのアイドル時間をゼロにし、滑らかな動画レートを維持できます。
システム全体のSRAM使用量はわずか42.25%(110.7KB / 256KB)に抑えられており、約145KBもの空きメモリを残しています。
高速な2M PHYによる実効スループット向上
BLE 5.4の物理層高速モードである「2M PHY」を有効化しました。
1パケットあたり240バイトの通知(Notification)を連続送出し、無線実効スループットとして80〜120 KB/sを叩き出しています。
カメラ側のハードウェアJPEG圧縮を活用することで、フレームサイズを以下のように最適化しました。
* QVGA (320x240): フレームサイズ 3.5〜5.0 KB(約12〜16 FPS)
輪郭やテキストが明瞭に識別できる実用的な画質です。
* QQVGA (160x120): フレームサイズ 1.5〜2.5 KB(約20〜25+ FPS)
動きの激しい被写体でも残像の少ない、極めて滑らかな映像が得られます。
インストール不要!Web Bluetoothビューワー
本システムでは、PCやスマートフォンで受信するためのビューワーとして、Google ChromeやMicrosoft Edgeで動作する「Web Bluetoothビューワー」を用意しました。
専用ソフトウェアやPython環境のインストールは一切不要です。
ブラウザでHTMLファイル(web_ble_viewer.html または web_ble_video_viewer.html)を開き、「Connect Camera」ボタンを押してペアリングするだけで、即座にライブ動画や写真が表示されます。
また、デスクトップ環境向けにPython(Bleak + OpenCV)によるビューワースクリプトも付属しており、リアルタイムHUD表示(FPS・解像度・フレームサイズ)やスナップショット保存が可能です。
ビルドと書き込み手順(West)
ファームウェアのビルドとnRF54L15-DKへの書き込みは、付属のバッチファイルで簡単に行えます。
ソースコードはGitHubで公開しています。
静止画カメラファームウェアのビルドと書き込み
静止画版(nrf54l15_ble_camera)の作業手順です。
|
1 2 3 4 5 6 7 |
cd zephyr-spicam/nrf54l15_ble_camera # ビルドの実行 .uild.bat # nRF54L15-DKへの書き込み .uild.bat flash |
動画ストリーミングファームウェアのビルドと書き込み
動画配信版(nrf54l15_ble_video)の作業手順です。
|
1 2 3 4 5 6 7 |
cd zephyr-spicam/nrf54l15_ble_video # ビルドの実行 .uild.bat build # nRF54L15-DKへの書き込み .uild.bat flash |
ワイヤレス通信とメモリ性能のまとめ
実機テストで得られた性能データは以下の通りです。
| 測定項目 | 静止画モード (UXGA) | 動画配信モード (QVGA/QQVGA) |
|---|---|---|
| 解像度 | 1600 x 1200 (1.92 MP) | 320 x 240 / 160 x 120 |
| フレームサイズ | 約 100 〜 140 KB | 約 1.5 〜 5.0 KB |
| フレームレート / 転送時間 | 約 5.6 秒 / 枚 | 12 〜 25+ FPS |
| BLE通信仕様 | NUS (1M PHY, DLE 251B) | NUS (2M PHY, DLE 251B) |
| 実効無線スループット | 約 24 〜 27 KB/s | 約 80 〜 120 KB/s |
| バッファ構成 | 160 KB 単一静的バッファ | 32 KB x 2面 ダブルバッファ |
| SRAM使用量 | 208.5 KB / 256 KB (79.5%) | 110.7 KB / 256 KB (42.3%) |
| Flash記録機能 | 外部 8MB SPI NOR Flash連携 | - |
まとめ
Nordic nRF54L15とZephyr RTOSを組み合わせ、わずか256KBの内蔵SRAMで高解像度静止画とリアルタイム動画配信の両方を実現しました。
* 静止画カメラ: 1600x1200のUXGA写真を5秒台でBLE転送し、8MB Flashへのオフライン保存にも対応。
* 動画ストリーミング: 2M PHYと64KBダブルバッファにより、BLE経由で最大25 FPSの超低遅延ライブ配信を達成。
* オープンな閲覧環境: Web Bluetoothを活用し、ブラウザだけで誰でも手軽に映像を受信可能。
IoT向けマイコンの限界を押し広げるワイヤレスカメラの応用例として、非常にポテンシャルの高い構成です。
ソースコードはGitHubで公開していますので、ぜひワイヤレスカメラの威力を体感してみてください!


コメント