Skip to content

V2 PCB: ESP32-S3-MINI-1U with an optional castellated XBee carrier - #99

Merged
thePunderWoman merged 1 commit into
mainfrom
pcb-v2-esp32-xbee-carrier
Oct 31, 2026
Merged

thePunderWoman merged 1 commit into
mainfrom
pcb-v2-esp32-xbee-carrier

Conversation

@thePunderWoman

Copy link
Copy Markdown
Owner

Replaces the BT840XE on the V2 board with an ESP32-S3-MINI-1U-N8, and moves the XBee to an optional daughter board. Builders who only want Bluetooth and ESP-NOW can leave the XBee off. The daughter board itself is a follow-up.

What changed

  • Module: ESP32-S3-MINI-1U-N8 on the top, between the macro row and USB. There is 17.5 mm there, so the 19.2 mm WROOM-1U does not fit. Its antenna connector is W.FL/MHF III, not standard U.FL.
  • XBee: a row of 12 hand-solder pads on the bottom for a 22 x 17 mm castellated carrier, which holds the XBee and its support parts. The link is UART with flow control, not SPI. RTS and DTR also allow serial firmware recovery through the ESP32.
  • Pin map: the module is turned 270 degrees and pins are assigned by position, so the signal pins face what they connect to. See PCB/v2.x/GPIO_table.md.
  • Power: the buck and charger are back on the bottom. BUCK_FB routes around the inductor and C_BUCK_IN1 sits next to VIN.
  • Hall sensor: moved to (6.5, 4.75) mm, rotated 180 degrees, 7.8 mm from the stick's nearest pot pin. It is placed for a 2 x 2 mm N52 magnet swinging up under the package.
  • Removed: SW_RST1, the Tag-Connect SWD footprint, and the BT840XE parts and library files.
  • Production: regenerated in PCB/v2.x/production/. U_XBEE1 and J_STICK1 are excluded from the assembly files.

Pin decisions to keep

  • PWR_HOLD stays on RXD0. Its pull-up stays on through reset, so a reset reboots the board and does not cut power.
  • Power button sense stays on an RTC-domain pin (IO21), because the node is lifted with the board off, as it was on V1's IO2.
  • IO26 stays unconnected. Arduino's PSRAM probe drives it at every boot, so the bumper is on IO47.
  • Keep IO3, IO45 and IO46 unconnected. They are strap pins.

Checks

  • DRC at full severity: 0 violations, 0 unconnected
  • stackup check: 0 errors, 0 warnings
  • PCB sync check clean, and all 277 pin connections match the Stackup netlist
  • Latch simulation: 9 of 9 pass, latch parts identical to V1
  • Module pin numbers checked against Espressif's Table 3-1
  • Production files: hole counts match the board, all assembled parts have LCSC numbers, no BT840XE references

Not verified yet

  • No hardware exists. Nothing here has been built or powered.
  • Stick and trigger magnet interaction is calculated, not measured: about 0.35-0.48 mT of stray swing, against a rough 0.6-1.2 mT deadzone estimate. Bench-test it with a real magnet and stick.
  • OLED cable: the connector moved 2 mm toward USB. Try a real Qwiic cable before designing the shell.
  • The carrier board is not designed yet. If its pads change, the production files need regenerating.
  • Check rotations in the assembler's preview, especially U_MCU1 and U_HALL1.

Follow-up work

  • Design the XBee daughter board.
  • Firmware needs a V2 pin map and a UART transport. Do not flash V1 firmware on V2: it would hold the XBee in reset, because IO42 is XBee RESET here.
  • Firmware also needs a watchdog, since there is no reset button, and must not start UART0, which would take over the PWR_HOLD pin.

🤖 Generated with Claude Code

Replace the BT840XE with an ESP32-S3-MINI-1U-N8 on the top side, and move
the XBee to an optional hand-soldered daughter board on the underside,
linked by UART with flow control instead of SPI. The WROOM-1U does not fit
between the macro row and USB; the MINI-1U does.

Turn the module 270 degrees and assign pins by position, so the signal
pins face the stick, OLED and carrier. PWR_HOLD stays on RXD0, whose
reset pull-up holds the latch, and IO26 stays unconnected because
Arduino's PSRAM probe drives it at every boot.

Put the buck and charger back on the bottom, remove the reset button and
SWD footprint, move the hall sensor away from the stick, reroute the
board, and regenerate the production files.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@thePunderWoman
thePunderWoman merged commit da389d1 into main Oct 31, 2026
3 checks passed
@thePunderWoman
thePunderWoman deleted the pcb-v2-esp32-xbee-carrier branch October 31, 2026 21:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant