Skip to the content
2 layers100 × 135 mmVacControl, the printed circuit board in 3D

Festool Bluetooth protocol and interfacing

Size
100 × 135 mm
Copper layers
2
Thickness
1.6 mm
Parts
33
Nets
45
Pads
178
Tracks, vias
107, 1
Pours
6
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
17 Mar 2023
Updated
12 Sep 2026

Overview

VacControl is an open-source printed circuit board by tjob, from the tjob/ft-vac-control repository on GitHub, published under the MIT licence. It is a 2-layer board of 100 × 135 mm with 33 parts on 45 nets, routed with 107 tracks and 1 via.

It is built around the BSS138. Its parts include 7 connectors, 5 capacitors, 3 resistors, 2 transistors and 1 IC. It belongs with the radio and wireless boards and the RP2040 boards of this library.

Main components

1

README

README.md

Use a Festool Bluetooth remote control with any vacuum

Use the Festool Bluetooth remote with vacuum extractors from other manufacturers.

Video Demo

The project contains the schematics and PCB layout designed using KiCad 7, and the firmware (written in C) for the Raspberry Pi Pico to interface with a Festool No. 202097 Bluetooth Remote Control add-on.

Assembled project

Festool sell an upgrade for their CT26/36/48 vacuum extractors to give remote control using Bluetooth, CT-F I/M-Set. It has two parts: the "CT-F I/M" installs in the extractor and the "CT-F I" is the button that attaches to the end of the vacuum hose. The button then starts and stops the extractor. Paired cordless tools with their Bluetooth-enabled batteries can also control the extractor.

Festool's bluetooth kit

But I don't have a CT26/36/48 extractor from Festool, so I wanted to create an adaptor that uses the module and controls a standard power socket to control any device attached. With a custom PCB, a Raspberry Pi Pico, some firmware, a Solid State Relay, and an enclosure I had a working solution. Along the way I had to reverse-engineer the non-standard serial protocol and try to make sense of the bytes sent.

Inside the box

Features

  • Allows connecting any vacuum extractor that has a physical switch capable of being always on. A vacuum with an NVR will not work.
  • Works with an unmodified Festool No. 202097 receiver. It's Plug and Play. At a later date if I ever get a CT extractor I wanted to be able to use this module again.
  • Has software safety features: automatically turns off if left on for an extended period. Uses the RP2040's hardware watchdog to shut off the power if the software stops for any reason.
  • Should work with Festool cordless tools with their Bluetooth batteries (untested).

How it works

The Festool module has three electrical connections to the host vacuum: two for power and one for data. The data line is serial, probably bidirectional, and uses a form of Manchester encoding. For more details on the serial stream and commands, see the description of the traces captured with a logic analyzer.

Decoded serial steam

The serial data from the receiver feeds the Raspberry Pi Pico via a BSS138 MOSFET as a level shifter. The Pico decodes the Manchester-encoded stream. When the Start/Stop commands are seen the software switches a Solid State Relay controlling mains AC supply to the output socket.

Wanting an excuse to learn KiCad, I designed a custom PCB to host the Pi Pico and a 4-pin 3.96 mm header to plug the CT-F I/M Bluetooth module into. The board contains a 240V switch-mode regulator providing 5V DC power to both the Pico and the CT-F I/M.

Circuit schematic diagram

:zap: Mains voltage electricity can kill! :zap:

[!WARNING] This project description is not a guide and does not detail how to assemble a unit safely. If you are not sure how to build one that is safe and complies with local laws and regulations, DO NOT ATTEMPT TO RECREATE.

Bill of Materials

Parts on the PCB

PartReference DesignatorDescription
MCUU1Raspberry Pi Pico, the cheap one
5V PCB mount PSUPS1Vigortronix VTX-214-005-005 5W Miniature SMPS AC-DC Converter 5V Output
Fuse holderF15.2x20mm PCB Fuse Holder W/Cover 6.3A 250VAC
PSU protection diodeD1Optional, diode to stop power from USB flowing back into the PSU. If not installed, bridge JP2 instead
RX data portJ1Connects to the Festool receiver module. 4 pin, 3.96mm pitch header with plastic tab cut off - e.g. JST B4P-VH(LF)(SN)
SSR driver headerJ22 way, 2.54mm board-to-wire header for connecting to the input of the SSR
Wago 3 way PCB connectorJ5, J6Wago part number 2604-1103
Wago 4 way PCB connectorJ7Wago part number 2604-1104
Signal MOSFETsQ1, Q2BSS138, in SOT-23 package
10k ResistorsR1, R2, R3SMT 1206 package
4.7uHL1Inductor, RLB0913-4R7K
100nFC2, C4, C6, C7Decoupling capacitors, through-hole, 2.5mm pitch
470uF 10VC1Suntan TS13DJ1A471MSB040R 470uf 10V Low Imp Electrolytic Capacitor
X2 CapacitorX2-Cap1Vishay BFC2-336-20224 220n 275V X2 Suppression Capacitor
Debug UARTJ4Optional (usefully only for firmware development)
Test pointsTP1, TP2Optional, do not populate
Aux portJ3Optional and currently unused
Reset switchSW1Optional (usefully only for firmware development)

Other mechanical and electrical parts

PartsCountDescription
Enclosure1190mm x 190mm x 67mm die-cast aluminum box
Mains plug + inlet cable1I used a molded plug on a cable cut from an IEC lead
Power in strain relief1Cable Gland M16 10mm - e.g. 50616PA7001SET
Output socket113A Circular Panel Mount Socket Outlet, 13A - e.g. 735WHI
Green indicator1Panel mount, 22.5mm, 220-240v, to show if the incoming power is on - e.g. LEDTECGREEN230VAC
Yellow indicator1Panel mount, 22.5mm, 220-240v, LED lamp, to show if the vacuum power is on - e.g. LEDTECYELLOW230VAC
PCB standoffs5M4 - length dependent on the enclosure used
M6 x 35mm cap screws2Black, for securing the Festool receiver module
Custom M6 standoffs2To receive the M6 screws from the Festool receiver module. Length depends on the enclosure used, 39.1mm was correct for me
PCB screws5M4 x 8mm
SSR1Random on Solid State Relay, must be switchable by 5V DC - e.g. i-Autoc Panel Mount Solid State Relay, 25 A Max. Load, 280V AC
SSR cover1i-Autoc Kudom KPC-0A Solid State Relay Accessory Protective Cover Single Phase
SSR thermal pad1i-Autoc Kudom KTP-0A Solid State Relay Accessory Thermal Pad KSI/KSJ
Mains wiring loomAssortedLine, Neutral, Earth (CPC), sided appropriately for your max load. I used stranded 2.5mm2
Bits 'n' BobsAssortedHardware to attach standoffs to enclosure and to mount the SSR, earth bonding nuts and bolds, and crimp eyelets and spade connectors

License

The software, schematic designs and PCB layout contained in this repository are released under the MIT license.

Credits

I got the pinout for the Bluetooth receiver from YouTube channel "My Project Box". His video "Festool Bluetooth Hack / Mod works with any dust extractor!" shows a very neat solution with a different approach; avoiding any software.

On Github, user gilbertf published libft capable of both sending and receiving. It's not used by this project but his encoder appears to send the same bytes my decoder expects, which gave me some confidence that the implementation here is somewhat interoperable.

I used the Pi Pico KiCAD symbol and footprint from ncarandini/KiCad-RP-Pico

Other projects inspired by this one

This project helped Loriowar create a Festool receiver handler for Arduino.

Parts

33
QtyValueFootprintReferences
5MountingHoleMountingHole:MountingHole_4.3mm_M4H1, H2, H3, H4, H5
4100nFCapacitor_THT:C_Rect_L4.6mm_W3.0mm_P2.50mm_MKS02_FKP02C2, C4, C6, C7
310kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR1, R2, R3
22604-1103wago-2604-11xx:2604-1103J5, J6
2BSS138Package_TO_SOT_SMD:SOT-23_HandsolderingQ1, Q2
10.22uF 275V ACCapacitor_THT:C_Rect_L18.0mm_W7.0mm_P15.00mm_FKS3_FKP3X2-Cap1
1250mA slow blowFuse:Fuseholder_Cylinder-5x20mm_Stelvio-Kontek_PTF78_Horizontal_OpenF1
12604-1104wago-2604-11xx:2604-1104J7
14.7uHInductor_THT:L_Radial_D7.8mm_P5.00mm_Fastron_07HCPL1
1470uF 10vCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC1
1D_SchottkyDiode_SMD:D_SMC_HandsolderingD1
1Festool BT receiverfestool BT module:BT receiverJ1
1GNDConnector_Pin:Pin_D0.9mm_L10.0mm_W2.4mm_FlatForkTP2
1Jumper_2_OpenTestPoint:TestPoint_2Pads_Pitch2.54mm_Drill0.8mmJP1
1PicoMCU_RaspberryPi_and_Boards:RPi_Pico_SMD_THU1
1SSRConnector_Molex:Molex_KK-254_AE-6410-02A_1x02_P2.54mm_VerticalJ2
1SW_PushButton_Switch_THT:SW_PUSH_6mm_H4.3mmSW1
1UARTConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ4
1VTX-214-005-005VTX-214-005-0xx:Converter_ACDC_Vigortronix_VTX-214-005-0xx_THTPS1
1WarningSymbol:Symbol_HighVoltage_Type2_CopperTop_VerySmallCAUTION: High Voltage (240VAC)
1auxConnector_IDC:IDC-Header_2x05_P2.54mm_VerticalJ3
1bt_serConnector_Pin:Pin_D0.9mm_L10.0mm_W2.4mm_FlatForkTP1

Similar boards

  • 4 layers36 × 50.2 mmRacer, the printed circuit board in 3D

    Racer

    StuckAtPrototype/Racer

    These are structured into their own files. I could have used submodules, but decided against it.

    83 parts3.8kApache-2.0
  • 4 layers95 × 95 mmCube motherboard, the printed circuit board in 3D

    Cube motherboard

    willem-pennings/balancing-cube

    A cube that balances itself in a corner or edge using reaction wheels

    52 parts1.1kGPL-3.0
  • 2 layers54.6 × 70.9 mmBeagleLogic Cape, the printed circuit board in 3D

    BeagleLogic Cape

    abhishek-kakkar/BeagleLogic

    A Software Suite that implements a logic analyzer with the PRU on the BeagleBone / BeagleBone Black.

    22 parts479GPL-3.0
  • 2 layers44.2 × 29.3 mmI2c tiny usb, the printed circuit board in 3D

    I2c tiny usb

    harbaum/I2C-Tiny-USB

    Cheap and simple I²C to USB interface

    27 parts454
  • 2 layers21.6 × 52.3 mmPs2 pico hat, the printed circuit board in 3D

    Ps2 pico hat

    No0ne/ps2x2pico

    USB keyboard/mouse to PS/2 interface converter using a Raspberry Pi Pico

    17 parts399MIT
  • 2 layers45 × 45 mmAirCube, the printed circuit board in 3D

    AirCube

    StuckAtPrototype/AirCube

    Works standalone out of the box. Pairs with Home Assistant in minutes. Other platforms are supported through community-contributed extensions.

    61 parts379Apache-2.0
  • 4 layers74 × 104 mmBeepy, the printed circuit board in 3D

    Beepy

    sqfmi/beepy-hardware

    Beepy Hardware

    160 parts348MIT

Questions

How big is the VacControl PCB?

It measures 100 × 135 mm and has 2 copper layers, 1.6 mm thick.

What parts does the VacControl use?

33 parts, built around the BSS138. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the VacControl KiCad files?

From the tjob/ft-vac-control repository on GitHub, at the commit this page was made from: the board is pcb/VacControl.kicad_pcb and its schematic pcb/VacControl.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the VacControl design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).