ESP32 Wi-Fi and Bluetooth Module: What It Is and How to Start

What is the ESP32 Wi-Fi and Bluetooth module?
When people search for an "ESP32 Wi-Fi and Bluetooth module" they usually mean one of three things: the bare ESP32 system-on-chip, a shielded surface-mount module built around that chip, or a development board you can plug into a breadboard. All of them give you the same core idea: a microcontroller that talks Wi-Fi and Bluetooth without any extra radio hardware.
The ESP32 was designed by Espressif Systems as the successor to the ESP8266, which only had Wi-Fi. It is manufactured by TSMC on a 40 nm process. The chip already contains the pieces you would otherwise have to add around a radio: antenna switches, an RF balun, power amplifiers, low-noise receivers, filters and power-management blocks. That integration is why complete modules can be so small and cheap.
Since the original part shipped, Espressif has released a whole family of variants with different CPUs (Xtensa LX6 in single- and dual-core form, dual-core Xtensa LX7, or RISC-V cores). They share the same SDK and are largely code-compatible, so what you learn on one board carries over to the next. The original chip was also revised as ESP32 ECO V3 in 2020, fixing some bugs and bringing small improvements.
The ESP32 shows up in a surprising number of products you may already own: Mysa smart thermostats (ESP32-WROOM), low-end UniFi switches from Ubiquiti (ESP32-D0WD-V3), the Octopus Energy Mini real-time energy monitor (ESP32-C6), the Playdate handheld console and the DJI Robomaster TT educational drone. If it is good enough for those, it is good enough for a weekend build.
\2How the ESP32 time-slices its single RF path when Wi-Fi and BLE are both connected
Chip, module or dev board: which ESP32 with Bluetooth and Wi-Fi should I buy?
The naming is confusing at first, so here is how the pieces stack up.
| Form factor | What you get | Who it is for |
|---|---|---|
| QFN chip (ESP32-D0WD, etc.) | Bare SoC in a 6 x 6 mm or 5 x 5 mm QFN with 48 side pads plus a ground thermal pad | Product designers doing their own RF layout |
| System-in-package (ESP32-PICO-D4, PICO-V3, S3-PICO-1) | Chip, crystal, flash, filter caps and RF matching in one 7 x 7 mm package | Very compact custom boards |
| Surface-mount module (ESP32-WROOM, WROVER, etc.) | SoC plus flash (sometimes pSRAM) on a small PCB with a meandered inverted-F trace antenna | Soldering onto your own PCB |
| Development board | A module or chip plus USB, regulator and pin headers | Learning, prototyping, breadboards |
A few concrete numbers from the sources: the first PICO module, the ESP32-PICO-D4, has two CPUs at 240 MHz, 4 MiB internal flash, a 40 MHz oscillator and 34 GPIOs. In 2022 the ESP32-S3-PICO-1 added USB OTG and internal PSRAM. Some WROVER-class modules include pseudostatic RAM (pSRAM) alongside flash, which matters for camera, audio or display projects.
For a first project, buy a development board. It hides the hard parts (power, USB-to-serial, antenna) and exposes GPIO on headers. Pin counts and layouts vary by model and manufacturer, so always check the pinout for the exact board in your hand rather than a generic diagram.
\2Structure of a legacy BLE advertising packet (Bluetooth Core Specification 4.2)
How do Wi-Fi and Bluetooth share one radio on the ESP32?
This is the question most beginners never ask, and it explains most "my Bluetooth got flaky when Wi-Fi connected" complaints. Espressif chips support up to three radio modules (Bluetooth BT/BLE, IEEE 802.15.4 for Thread/Zigbee, and Wi-Fi), but each chip has exactly one RF path. Two radios cannot transmit or receive at the same instant, so the firmware uses time-division multiplexing: it slices time and hands the antenna back and forth between Wi-Fi and Bluetooth.
The ESP-IDF coexistence guide publishes a support matrix. For Wi-Fi plus BLE it looks like this (Y = supported with stable performance, C1 = supported but with performance caveats, S = supported with its own notes):
| Wi-Fi state | BLE Scan | BLE Advertising | BLE Connected |
|---|---|---|---|
| STA scanning | Y | Y | Y |
| STA connecting | Y | Y | Y |
| STA connected | Y | Y | Y |
| SoftAP TX beacon | Y | Y | Y |
| SoftAP connecting | C1 | C1 | C1 |
| SoftAP connected | C1 | C1 | C1 |
| Sniffer RX | C1 | C1 | C1 |
| ESP-NOW RX | S | S | S |
| ESP-NOW TX | Y | Y | Y |
The Classic Bluetooth (BR/EDR) table follows the same pattern across inquiry, inquiry scan, page, page scan and connected states. The practical takeaway: an ESP32 acting as a Wi-Fi station (joining your home router) coexists cleanly with BLE. Running the ESP32 as a Wi-Fi access point with clients attached, or in promiscuous sniffer mode, while also using Bluetooth is supported but you should expect reduced throughput or latency on one or both radios.
The docs also note that on the ESP32-C5 this shared RF path applies whether Wi-Fi is on 2.4 GHz or 5 GHz, so moving Wi-Fi to 5 GHz does not buy you a second antenna.
\2Timing of BLE advertising events and scan windows during device discovery
How does the Bluetooth side of the ESP32 actually work?
Bluetooth Low Energy on the ESP32 lives in the 2.4 GHz ISM band, the same crowded, license-free band as 2.4 GHz Wi-Fi. BLE splits that band into 40 channels of 2 MHz each, running from 2402 MHz to 2480 MHz, and uses Adaptive Frequency Hopping to dodge busy channels. Classic Bluetooth instead uses 79 channels of 1 MHz.
Before two BLE devices connect, one advertises and the other scans. Advertising packets go out on three dedicated channels (37, 38 and 39); once all three have been used, one advertising event is complete and the device waits for the next interval. The remaining 37 channels (0 to 36) carry data once connected.
Two parameters you will tune in almost every BLE project:
- Advertising interval: anywhere from 20 ms to 10.24 s in 0.625 ms steps. Shorter means faster discovery but higher power draw; longer saves battery but phones take longer to find you.
- Payload size: a legacy (Bluetooth 4.2) advertising packet carries at most 31 bytes. Bluetooth 5.0 Extended Advertising raises this to 254 bytes per packet and up to 1650 bytes total, by pointing from the primary channels to a secondary channel where the rest of the data lives.
ESP-IDF ships a getting-started example called NimBLE_Beacon, built on the NimBLE host stack, which is the simplest way to see your ESP32 appear in a phone's BLE scanner and inspect the raw advertising bytes.
\2A BLE advertiser receiving a scan request and replying with a scan response
How do I get started with an ESP32 Wi-Fi Bluetooth module?
- Pick a board. A development board with a WROOM or WROVER module is the safe default. Choose WROVER (with pSRAM) if you plan on cameras, audio or big displays.
- Pick a toolchain. The sources list plenty of options: ESP-IDF (Espressif's official framework, also available as a Visual Studio Code extension), Arduino-ESP32, MicroPython and CircuitPython, Rust, Espruino (JavaScript), NodeMCU (Lua), Mongoose OS and others. Arduino or MicroPython is the gentlest start; ESP-IDF gives you the full coexistence and Bluetooth stacks with the official examples.
- Get Wi-Fi up first. Connect as a station to your router. The coexistence matrix shows this mode plays best with Bluetooth, so it is the foundation to build on.
- Add Bluetooth. Run the
NimBLE_Beaconexample to confirm advertising works, then move to a connected profile. - Solve provisioning. Hard-coding your SSID and password is fine for a prototype but not for anything you hand to someone else. One accepted approach: on first boot the ESP32 opens its own access point and starts a small HTTP server acting as a REST API; a phone app or browser posts the SSID and password; the ESP32 then restarts as a Wi-Fi station. There are also BLE-based provisioning libraries (for example
react-native-esp-idf-ble-provisioning-rn) if you prefer sending credentials over Bluetooth.
If you are building on this site's other guides, the Wi-Fi example and BLE scanner example walk through steps 3 and 4 in detail.
What are the common pitfalls with ESP32 Wi-Fi and Bluetooth?
- Expecting both radios at full speed. There is one antenna path. SoftAP-with-clients plus Bluetooth, or sniffer mode plus Bluetooth, are rated C1 in Espressif's matrix. If you need both, keep Wi-Fi in station mode where possible.
- Fighting your own Wi-Fi. BLE and 2.4 GHz Wi-Fi share the same ISM band, and the ESP-IDF docs explicitly warn that it is crowded and prone to interference. Expect occasional retries and design your protocol to tolerate them.
- Advertising too often or too rarely. The interval range is 20 ms to 10.24 s. Very short intervals burn battery; very long ones make the device hard to find. Two advertisers on identical intervals can also collide, so avoid cloning timing across many identical devices.
- Overflowing a 31-byte advert. Legacy advertising packets stop at 31 bytes. If you need more, you must use Bluetooth 5.0 Extended Advertising, which not every phone or scanner supports.
- Trusting a generic pinout. GPIO breakouts differ between modules and board makers. Always use the diagram for your exact board.
- Ignoring chip revisions. The original ESP32 silicon was revised (ECO V3) to fix bugs. If you hit odd behaviour on an older board, check which revision you have.
- Assuming the Bluetooth firmware is fully documented. In March 2025 researchers at Tarlogic Security found undocumented HCI commands in the ESP32 Bluetooth firmware. For hobby use this is mostly a curiosity, but it is worth knowing if you are evaluating the part for a security-sensitive product.
Do I need certification to sell a product with an ESP32 module?
If you move beyond a desk prototype, the radio brings regulatory obligations. A question on Electronics Stack Exchange about a product combining an Arduino, a CE-marked Espressif module, a 240 V to 12 V adapter and a solenoid valve drew a detailed answer worth summarising.
In the EU the product falls under the Radio Equipment Directive (RED), which also covers the EMC directive, so you do not list EMC separately. The Low Voltage Directive still applies when mains voltage is involved. Relevant harmonised standards named in the answer include EN 300 328 for 2.4 GHz radio spectrum use, EN 301 489-1 (and likely part 3 for short-range devices) for EMC, and EN IEC 62368-1 for safety. RoHS (EN/IEC 62321) is mandatory for CE marking of all electronics, and WEEE applies to anything you put on the market. The answer stresses stating the exact ETSI standard versions, because requirements changed significantly when RED arrived.
Using a pre-certified Espressif module simplifies the radio portion considerably compared with a bare chip and your own antenna layout, but it does not exempt the finished product. Talk to a test house before you print labels.
Frequently asked questions
Can the ESP32 use Wi-Fi and Bluetooth at the same time?
Yes. The two radios share one RF path through time-division multiplexing. Wi-Fi station mode with any BLE state is rated stable; SoftAP-with-clients and sniffer mode alongside Bluetooth are supported with performance caveats.
Does the ESP32 support Bluetooth Classic or only BLE?
The ESP32 family supports both Bluetooth Classic (BR/EDR) and Bluetooth Low Energy, and Espressif publishes coexistence tables for each alongside Wi-Fi. Exact support depends on the variant.
What frequency does ESP32 Bluetooth use?
The 2.4 GHz ISM band. BLE uses 40 channels of 2 MHz from 2402 to 2480 MHz, with channels 37 to 39 reserved for advertising; Classic Bluetooth uses 79 channels of 1 MHz.
How do I give an ESP32 my Wi-Fi password without hard-coding it?
A common approach is to have the ESP32 start as an access point with an HTTP REST server, accept the SSID and password from a phone or browser, then restart as a station. BLE provisioning libraries are another option.
What languages can I program an ESP32 Wi-Fi Bluetooth module in?
ESP-IDF (C), Arduino-ESP32, MicroPython and CircuitPython, Rust, JavaScript via Espruino or Mongoose OS, Lua via NodeMCU, Swift, Nim, Zig and more.
The ESP32 is the default answer when you want Wi-Fi and Bluetooth in one cheap, well-supported module, with a mature SDK and a dozen language options. Just remember that both radios share a single antenna path: keep Wi-Fi in station mode when you also need Bluetooth, and check Espressif's coexistence matrix before promising performance you cannot deliver.
Sources
en.wikipedia.orgESP32 (Wikipedia)github.comRF Coexistence (esp-idf docs)github.comDevice Discovery (esp-idf docs)stackoverflow.comESP32 smart wifi configuration via esp32 wifi AP(Access Point)electronics.stackexchange.comCE certification of new project Radio Equipment DirectiveThis guide summarises the public sources listed above in our own words. Check the original documentation before relying on exact figures.


