ESP32 ソフトウェア 回路設計

ESP32でWi-FiとBLEは同時に使える?仕組みと注意点を解説

投稿日:

ESP32の大きな特徴の一つが、Wi-FiとBluetoothを1つのデバイスで利用できることです。

たとえば、

「BLEでスマートフォンから初期設定を行い、その後Wi-Fiへ接続する」
「BLEでセンサーと通信しながら、取得したデータをWi-Fiでクラウドへ送信する」
「Wi-Fi接続中もBLE Advertisingを続けたい」

といった使い方が考えられます。

ここで気になるのが、

「ESP32はWi-FiとBLEを本当に同時に使えるのか?」

という点です。

結論から言うと、ESP32ではWi-FiとBLEを同時に使用できます。

ただし、「同時使用できる」という言葉には少し注意が必要です。

ESP32ではWi-FiとBluetooth/BLEが2.4GHz帯のRFリソースを共有しています。そのため、Wi-FiとBLEが完全に独立した2つの無線回路を持ち、それぞれが同じ瞬間に送受信しているわけではありません。

Espressifの公式資料では、RFリソースを共有し、TDM(Time Division Multiplexing:時分割多重)と優先度制御によってWi-FiとBluetoothを共存させる仕組みが説明されています。

この記事では、ESP32でWi-FiとBLEを同時使用するときの仕組みと、実際の製品開発で注意したいポイントを解説します。

結論|ESP32はWi-FiとBLEを同時に使える

最初に結論を整理すると、

Wi-FiとBLEを同時に使用することは可能。ただし、RFを時間的に共有している。

という理解が分かりやすいでしょう。

たとえばESP32をWi-FiのSTAとしてアクセスポイントへ接続しながら、

  • BLE Scan
  • BLE Advertising
  • BLE Connection

を利用する構成は、Espressifの公式Coexistence表でもサポートされています。

したがって、

Wi-Fi接続
     +
BLE接続

というシステムを作ること自体は可能です。

ただし、

Wi-Fi専用RF
     +
BLE専用RF

という2つの独立した無線回路がESP32内部に存在しているわけではありません。

この違いが、Wi-FiとBLEを同時使用するときの重要なポイントです。

Wi-FiとBLEは同じ2.4GHz RFを共有している

従来ESP32のWi-Fiは2.4GHz帯を使用します。

BLEも同じ2.4GHz帯を使用します。

ESP32には、この2つがそれぞれ独立して使用できる2系統の2.4GHz RFが搭載されているわけではなく、1つの2.4GHz ISM帯RFモジュールをWi-FiとBluetoothで共有します。

そのため、Wi-FiがRFを使用して送受信している瞬間には、Bluetooth側が同じRFを使って送受信することはできません。

そこでESP32では、Wi-FiとBluetoothからのRF使用要求をCoexistence機能が調停します。

イメージとしては、

時間 →
┌──────┬──────┬──────┬──────┐
│Wi-Fi │ BLE  │Wi-Fi │ BLE  │
└──────┴──────┴──────┴──────┘
       1つのRFを共有

という考え方です。

実際の制御はこのような単純な固定交互動作ではありませんが、非常に短い時間単位でRFを使い分けることで、ユーザーから見るとWi-FiとBLEが並行して動作しているように見えると考えると分かりやすいでしょう。

TDM(時分割多重)でWi-FiとBLEを共存させる

EspressifのCoexistence機能では、Wi-Fi、Bluetooth、BLEにRFを使用するためのTime Sliceが割り当てられます。

さらに、それぞれからRF使用要求が発生すると、Coexistence機能が優先度を基にRFをどちらへ割り当てるか判断します。

この割り当ては常に一定ではありません。

Wi-Fi側だけでも、

  • IDLE
  • CONNECTED
  • SCAN
  • CONNECTING

などの状態があり、それに応じてCoexistence PeriodやTime Sliceが調整されます。

たとえばWi-Fiがアクセスポイントを検索している最中と、アクセスポイントへ接続済みで待機している状態では、必要になるRF時間が違います。

ESP32はその状態に合わせてWi-FiとBluetoothの共存方法を変更します。

つまり、

Wi-Fi 50%、BLE 50%で常に固定されている

わけではありません。

使用状況によってRFの割り当て方が変わります。

Wi-Fi接続+BLE接続はできる?

できます。

一般的な用途として考えやすいのが、

スマートフォン
     │
    BLE
     │
   ESP32
     │
   Wi-Fi
     │
アクセスポイント
     │
インターネット

という構成です。

たとえばスマートフォンとはBLEで通信しながら、ESP32はWi-Fi経由でサーバーへデータを送信できます。

EspressifのESP32向けCoexistence表でも、Wi-Fi STAについて、

Wi-Fi Scan + BLE
Wi-Fi Connecting + BLE
Wi-Fi Connected + BLE

といった組み合わせがサポートされています。

このため、

BLEを使った初期設定

Wi-Fiへ接続

BLE接続を維持したままWi-Fi通信

という構成も実現できます。

IoT機器では使いやすい構成ですね。

「同時使用できる」=「性能が変わらない」ではない

ここが今回の記事で特に重要なところです。

Wi-FiとBLEを同時に使用できるからといって、

Wi-Fiだけを使った場合とBLEだけを使った場合の性能を、それぞれ100%同時に得られる

という意味ではありません。

1つのRFを共有しているため、一方がRFを使用している間、もう一方は待つ必要があります。

そのため通信量が増えるほど、

  • Wi-FiのThroughput
  • BLEの応答時間
  • BLE Scan
  • Packet Loss
  • リアルタイム性

などへ影響する可能性があります。

EspressifもCoexistenceの組み合わせを、単純な「対応/非対応」だけではなく、

Y:Supported and performance is stable
C1:Supported but performance is unstable
X:Not supported

などに分類しています。

つまり公式資料の段階でも、

「動作可能」と「安定した性能を期待できる」は別

として扱われています。

Wi-Fiで大量通信するとBLEへ影響する?

可能性があります。

特にWi-Fiで大量のデータを連続転送すると、Wi-Fi側が必要とするRF時間が増えます。

同時にBLEでも頻繁な通信を要求すれば、限られたRFリソースを両方で取り合うことになります。

EspressifのFAQでも、Wi-FiとBluetoothが大量のデータを同時に扱うと、リアルタイム性の高いBluetoothサービスなどで性能低下が起こり得ることが説明されています。BLE Scanについても、予定されたScan WindowがWi-FiのTime Slotと重なることで中断され、実際のScan時間が設定値より短くなる場合があります。

したがって、

BLEで数バイトの設定値を時々送る
       +
Wi-Fiで定期的にデータ送信

これと

BLEで連続通信
       +
Wi-Fiで大量データを連続転送

では、同じ「Wi-Fi+BLE同時使用」でも条件が大きく違います。

製品開発では、単に接続できたことだけでなく、実際の最大通信量で評価することが重要です。

BLE Advertising中にWi-Fiを使える?

BLE AdvertisingとWi-Fiの併用も可能です。

たとえばESP32をWi-Fiへ接続したままBLE Advertisingを行い、スマートフォンなどからESP32を発見できるようにする構成が考えられます。

EspressifのCoexistence表でも、Wi-Fi STAとBLE Advertisingの組み合わせはサポートされています。

これは、

普段はWi-Fiでクラウド通信
設定変更時だけスマートフォンからBLE接続

といった製品に使いやすい構成です。

BLEを常時接続しておく必要がなければ、

通常時
Wi-Fi通信
+
BLE Advertising

       ↓

設定時
Wi-Fi通信
+
BLE Connection

という設計もできます。

通信量を必要以上に増やさないという意味でも、用途に合わせてBLEの動作状態を設計することが重要です。

ESP32が自動で共存制御してくれる?

多くの一般的なCoexistenceケースでは、ESP32側が使用状況に応じて共存状態を切り替えます。

ただしESP-IDFでは、Wi-Fi/Bluetooth Coexistenceに関する設定も用意されています。

現行のESP-IDF Programming Guideでは、ソフトウェアによるCoexistence機能についてCONFIG_ESP_COEX_SW_COEXIST_ENABLEを確認するよう案内されています。

また、Dual CoreのESP32では、より良い通信性能を得るため、Wi-Fi Protocol StackとBluetooth Controller / Host StackのTaskを異なるCPU Coreへ配置する方法も公式資料で案内されています。

つまり、

Wi-FiとBLEのAPIを両方呼べば、それで設計検討は終了

というわけではありません。

通信量が多い製品では、Coexistence設定やTask構成も確認する価値があります。

ESP-IDFを含め、ESP32で使用する開発環境の違いについては「ESP32の開発環境を比較|Arduino IDE・PlatformIO・ESP-IDFはどれを選ぶ?」で詳しく解説しています。

Wi-Fi+BLEでメモリ使用量は増える?

Wi-FiとBLEを同時に使用するとき、RFの共存だけでなく注意したいのがメモリ使用量です。

ESP32ではWi-Fi DriverやTCP/IP Stack、Bluetooth Controller、Bluetooth Host Stackなどがそれぞれメモリを使用します。

そのため、

Wi-Fiだけを使用するFirmware

と比べると、

Wi-Fi+BLEを使用するFirmware

では、一般に必要なメモリ量が増えます。

特にESP32では、無線通信以外にも、

  • HTTP / HTTPS
  • MQTT
  • TLS
  • JSON
  • OTA
  • センサー処理
  • Display
  • File System

などを同時に使用することがあります。

個々の機能では問題がなくても、機能を追加していくうちにHeapの余裕が少なくなることがあります。

製品開発では、単にBuildが通るかだけでなく、実際にWi-FiとBLEを動作させた状態でHeapの残量を確認することをおすすめします。

NimBLEとBluedroidはどう違う?

ESP-IDFでBLEを使用するときには、Bluetooth Host Stackについても考える必要があります。

代表的なのが、

Bluedroid
NimBLE

です。

BluedroidはBluetooth ClassicとBLEを扱えるHost Stackです。

一方、NimBLEはBLE向けのHost Stackで、EspressifはESP-IDFでNimBLEを利用できるよう移植しています。公式Programming Guideでは、NimBLEはBLEのみを必要とする用途に適した、より軽量な選択肢として説明されています。

そのため、

Bluetooth Classicは不要で、BLEだけ使いたい

という製品では、NimBLEを検討する価値があります。

特にWi-Fi、BLE、TLS、Application処理など多くの機能を一つのESP32へ載せる場合、メモリの余裕は重要です。

ただし、

NimBLEを使えばWi-Fi+BLEのRF競合がなくなる

わけではありません。

Host StackをNimBLEへ変更しても、Wi-FiとBLEがRFリソースを共有する基本構造は変わりません。

NimBLEを選択する理由は、RFを分離するためではなく、主にBLE Host側の機能やメモリ構成を最適化するためと考えると分かりやすいでしょう。

ESP32-C3やESP32-C5でもWi-Fi+BLEは使える?

ここではシリーズの違いにも注意が必要です。

従来ESP32はDual Coreですが、ESP32-C3やESP32-C5はSingle Core構成です。

それでも、Wi-FiとBLEの共存機能自体は用意されています。

重要なのは、

Dual CoreだからWi-Fi+BLEが使えて、Single Coreだから使えない

という関係ではないことです。

Wi-FiとBLEのRF共存と、CPU Core数は別の話です。

ただしSingle Coreでは、Application、Wi-Fi、Bluetoothなどの処理が同じCPUリソース上で動作するため、CPU負荷についても意識する必要があります。

従来ESP32のように、

Core 0 → Wi-Fi
Core 1 → Bluetooth

といった形でTaskを別Coreへ配置する考え方を、そのままSingle Coreデバイスへ適用することはできません。

そのためC3やC5では、

RFのCoexistence

だけでなく、

CPU使用率
Task Priority
Stack Size
Heap

なども確認しておくとよいでしょう。

また、シリーズによってサポートされる無線機能やCoexistence条件は異なる可能性があります。

実際の製品では、使用するESP32シリーズに対応したESP-IDFのProgramming Guideで最新条件を確認してください。

ESP32-C5の5GHz Wi-FiならBLEと干渉しない?

ESP32-C5では、従来ESP32との大きな違いとして2.4GHzだけでなく5GHz Wi-Fi 6にも対応しています。

ここで、

「Wi-Fiを5GHzにすれば、2.4GHzのBLEとは完全に別だから共存問題もなくなるのでは?」

と思うかもしれません。

周波数帯という意味では、5GHz Wi-Fiと2.4GHz BLEは異なります。

しかし、それだけを理由にWi-Fi+BLEの共存制御を考えなくてよいとは判断しない方が安全です。

ESP32-C5は2.4GHz/5GHz Wi-FiとBluetooth LE、IEEE 802.15.4などの無線機能を一つのSoCへ統合しており、EspressifはC5についてもRF Coexistence機能を提供しています。

したがって、C5でも実際に使用するWi-Fi Band、BLEの動作、通信量などを含めて評価することが重要です。

特に製品では、

「周波数が違うから問題ないはず」

という推測だけで設計を完了せず、実機で確認しましょう。

Wi-Fi+BLEが不安定なときに確認すること

Wi-FiとBLEを同時使用して通信が不安定になった場合、すぐにHardware不良と判断するのではなく、まず通信条件を整理します。

1.Wi-Fiの通信量を確認する

大量のデータを連続送信していないか確認します。

たとえばFirmware Updateや大きなFile Uploadなど、通常時とは大きく異なる通信が発生している場合があります。

2.BLEのConnection Intervalを確認する

BLE接続ではConnection IntervalなどのParameterによって、通信頻度が変わります。

必要以上に短いIntervalを設定すると、それだけ頻繁に無線通信が必要になります。

リアルタイム性が必要ないデータなら、通信頻度を下げられないか検討します。

3.BLE Scanを確認する

BLE Scanを常時行っている場合も注意が必要です。

Wi-FiとBLE Scanが同時に動作すると、RFリソースを共有する必要があります。

前半でも触れたように、EspressifはWi-FiとのCoexistenceによってBLE Scan Windowが中断される場合があることを説明しています。

「BLEデバイスを発見できない」という問題でも、必ずしもBLEそのものが停止しているとは限りません。

4.Wi-Fiの状態を確認する

Wi-Fiが安定して接続されているときと、

Scan中
接続処理中
再接続を繰り返している状態

ではRFの使用状況が異なります。

電波環境が悪くWi-Fiが頻繁に再接続していると、BLE側にも影響が出る可能性があります。

5.HeapとStackを確認する

通信問題に見えても、実際にはメモリ不足が原因の場合があります。

Wi-FiとBLEを同時に使用すると必要なメモリも増えるため、

Free Heap
Minimum Free Heap
各TaskのStack余裕

などを確認します。

6.ESP-IDFのバージョンを確認する

ESP-IDFではWi-FiやBluetooth関連機能も継続的に更新されています。

不具合を調査するときは、

「ESP32でWi-Fi+BLEを使っている」

だけでなく、

ESP32の型番
ESP-IDFのバージョン
Bluetooth Host Stack
Wi-Fi Mode
BLEの動作状態

まで記録しておくと、原因を切り分けやすくなります。

製品ではWi-FiとBLEの役割を分ける

Wi-FiとBLEを両方搭載できるからといって、常に両方で大量通信する必要はありません。

製品では、それぞれの役割を明確にすると設計しやすくなります。

たとえば、

BLE
 └─ 初期設定
 └─ スマートフォンとの設定通信
 └─ 近距離メンテナンス

Wi-Fi
 └─ クラウド通信
 └─ データUpload
 └─ OTA

という分け方です。

この構成なら、通常運転ではWi-Fiを中心に使用し、BLEはAdvertisingや低頻度通信に抑えることができます。

必要なときだけBLE Connectionを確立する設計も可能です。

無線機能を、

搭載されているから常時使う

のではなく、

その通信方式が必要な場面だけ使う

と考えると、通信負荷だけでなく消費電力の面でも設計しやすくなります。

「接続できた」だけで評価を終わらせない

試作段階では、

Wi-Fiにつながった
BLEでもスマートフォンにつながった

ところで動作確認を終えたくなります。

しかし製品では、ここからが重要です。

たとえば、

Wi-Fiで通常通信中
        ↓
BLE接続開始
        ↓
Wi-Fi大量送信
        ↓
BLE設定変更
        ↓
Wi-Fi切断
        ↓
Wi-Fi再接続
        ↓
BLE切断・再接続

といった実際に起こり得る状態を試します。

さらに、

  • Wi-Fi電波が弱い
  • BLE側が遠い
  • アクセスポイントが一時的に消える
  • スマートフォンがBLE圏外へ出る
  • OTA中にBLE操作される

などの条件もあります。

特に無線通信は周囲の環境によって状態が変化します。

そのため、Wi-Fi+BLE製品では正常系だけでなく通信状態が悪いときの評価も重要です。

Wi-Fi+BLE同時使用チェックリスト

最後に、ESP32でWi-FiとBLEを同時使用するときの確認項目をまとめます。

確認項目チェック内容
ESP32シリーズ使用デバイスのCoexistence仕様を確認したか
Wi-Fi ModeSTA / APなど実際の動作Modeを確認したか
BLE動作Scan / Advertising / Connectionを整理したか
通信量Wi-FiとBLEの最大通信量を確認したか
BLE Interval必要以上に短くしていないか
BLE Scan常時Scanが本当に必要か
CoexistenceESP-IDFの設定を確認したか
CPU負荷Applicationを含め余裕があるか
HeapWi-Fi+BLE動作時の残量を確認したか
Stack各Taskに十分な余裕があるか
異常系Wi-Fi再接続中なども評価したか
実機評価最大負荷・悪条件でも確認したか

この表を設計・評価時のチェックリストとして使うと、単純な接続確認だけで終わることを防げます。

まとめ|ESP32のWi-FiとBLEは同時使用できる。ただしRFは共有する

ESP32では、Wi-FiとBLEを同時に使用できます。

Wi-Fiへ接続しながらBLE Advertisingを行ったり、BLE Connectionを維持しながらWi-Fiでサーバーへデータを送信したりすることも可能です。

ただし、重要なのは、

Wi-FiとBLEが完全に独立した無線回路で同時通信しているわけではない

という点です。

ESP32ではRFリソースを共有し、TDMと優先度制御によってWi-FiとBluetoothを共存させています。

そのため、

同時使用できる=それぞれ単独使用時と同じ性能が保証される

という意味ではありません。

Wi-Fiの通信量、BLEのConnection IntervalやScan、CPU負荷、Heapなどによって、実際の通信性能は変化します。

特に製品開発では、

「Wi-FiもBLEも接続できた」

だけで評価を終了せず、最大通信量や再接続、電波環境が悪い状態まで確認することが重要です。

Wi-FiとBLEそれぞれの役割を整理し、必要なタイミングで必要な通信を行う設計にすることで、ESP32の無線機能をより安定して活用できます。

スポンサーリンク

スポンサーリンク

-ESP32, ソフトウェア, 回路設計

Copyright© 江藤良樹の仕事は物づくり , 2026 All Rights Reserved.