In developmentNot released yet — features and data may change without notice.

ESP32-WROOM On Board — The Module Carries the Certification for You

Why a module rather than a bare chip, where KC · 技適 · FCC · CE attach, the EN · IO0 support circuitry and strapping-pin warnings, and antenna placement rules.

7 min readUpdated Sep 8, 2026

The most frequently chosen target for L3 production conversion is the ESP32-WROOM-32. This guide summarizes what ibouPCB inserts automatically when the module is mounted directly on the board, what it warns about, and what you need to know about certification.

Why a module rather than a bare chip

To use a standalone ESP32 chip you would have to design the 40 MHz crystal, flash, RF matching network, antenna, and power sequencing yourself, and obtain radio certification yourself. The ESP32-WROOM-32 module is a component that encapsulates all of this inside a metal shield. All you have to draw is module + 3.3 V power + connectors + sensor interfaces, and a two-layer board with autorouting is enough. Fully integrated bare-chip design is out of scope for ibouPCB.

Certification — what the module carries and what it does not

The ESP32-WROOM-32 holds modular certifications for KC (Korea), 技適 (Giteki, Japan), FCC (United States), and CE (Europe). This is the catalog's certification { kc, giteki, fcc, ce } field, and when selecting an L3 target, certified modules are offered first.

  • Radio (RF) certification attaches to the module. In most cases, if you do not modify the module, do not change the antenna, and mount it per the datasheet reference, the final product does not need new RF testing.
  • End-product certification is separate. If it is a product for sale, end-product procedures such as KC conformity assessment · 技適 marking · CE declaration are still required. Modular certification greatly simplifies those procedures but does not replace them.
  • What voids the certification: swapping to an external antenna (separate certification needed depending on the module variant), removing the shield, transmit power settings outside the datasheet.
The Production tier's certification checklist shows, item by item for each country of sale, what is covered by the modular certification and what remains. It is a checklist, not legal advice — confirm the final answer with the certification body.

Support circuitry inserted automatically

PartValueWhy
3.3 V regulatorAMS1117-3.3 or equivalent, 10 µF input / 10 µF + 100 nF outputThe ESP32 draws 500 mA momentarily during Wi-Fi transmission. The 3.3 V rail needs at least 500 mA of headroom
EN pull-up + cap10 kΩ + 0.1 µFRC delay so reset is released after power stabilizes. Without it, cold boot is unreliable
3V3 decoupling10 µF + 0.1 µF (next to the module pins)Absorbs transmit pulse currents
IO0 pull-up (warning)10 kΩ or internal pull-up + buttonIf IO0 is LOW at boot, the chip enters download mode
UART programming headerTX · RX · EN · IO0 · 3V3 · GNDAn L3 board has no USB-Serial. You need a way to load the first firmware

The IO0 pull-up is an interesting case. When four Olimex ESP32 boards were imported into the golden pattern corpus, the EN 10 k pull-up and 3V3 bulk capacitor matched the hand-written pattern, but none of the four boards had an external IO0 pull-up (button + internal pull-up was enough). So a missing IO0 pull-up is a warning, not an error. This is how the verifier is adjusted on the evidence of real boards.

Strapping pins — why a pin your code used gets reassigned

Right after reset, the ESP32 reads the level of a few GPIOs to decide how to boot. If a sensor or LED is attached to those pins, the boot changes or fails. The "boot-strapping pin misuse" rule in P4 ERC catches this, warns, and proposes another pin.

  • IO0 — LOW at boot means download mode. Do not attach a load that can pull it LOW at boot (e.g. an active-LOW relay input).
  • IO2 — must be LOW or floating when entering download mode. An onboard LED is fine.
  • IO12 (MTDI) — HIGH at boot sets the internal flash voltage to 1.8 V, and a 3.3 V flash module will not boot. No external pull-up allowed.
  • IO15 (MTDO) — controls boot log output. LOW silences the boot messages.
  • IO6–IO11 — connected to the internal flash. Never used. Excluded from assignment in the catalog.
  • IO34–IO39 — input only. No internal pull-up · pull-down, and no output. If you attach a button, an external pull-up is auto-inserted.

Layout — the antenna

Copper under or around the PCB antenna at the end of the module degrades radiated performance significantly and also falls outside the certification conditions. ibouPCB's placer follows the Espressif guidelines: it aligns the module's antenna end with the board edge and mirrors the antenna keep-out as a rule area on every copper layer, so it is excluded from the bottom GND pour as well. A measured example (temperature + relay, 32 parts · 21 nets) completed at 83 × 46 mm with 0 DRC violations under these rules.

3.3 V logic

The ESP32's GPIO is 3.3 V. The 5 V modules you used with an Arduino Uno (HC-SR04 ECHO, 5 V relay modules, some OLEDs) cannot be connected as-is, so the converter inserts voltage dividers · level shifters · driver transistors. The list shows the "Why?" alongside each.

Simulation

The ESP32 has no browser engine, so it runs on Espressif QEMU on the server (a separate process). The target build is compiled in DIO flash mode, and the 4 MB merged.bin boots as the flash image as-is. GPIO edges and UART output are captured and used for P8 regression. Wi-Fi and Bluetooth are not simulated — the logic gate is verification at the GPIO · UART · I²C level.