

Bleriot REG6
REG6 is a six-channel solid-state-relay controller built around a PY32F030 and PAN2110. This repository contains the KiCad hardware and a standalone TinyGo/BleRiot module under fw/ that exposes one integer percentage…
- Size
- 314 × 27 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 85
- Nets
- 55
- Pads
- 229
- Tracks, vias
- 362, 314
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 29 Aug 2026
- Updated
- 12 Oct 2026
Overview
Bleriot REG6 is an open-source printed circuit board by burgrp, from the burgrp/bleriot-REG6 repository on GitHub. It is a 2-layer board of 314 × 27 mm with 85 parts on 55 nets, routed with 362 tracks and 314 vias.
It is built around the PAN2110P0AA, LM358 and LM1117MP-3.3, with the WS2812B among its other parts. Its parts include 31 capacitors, 31 resistors, 6 ICs, 6 diodes and 2 crystals.
Main components
4PAN2110P0AA
SOP-8-102dBm -40℃~+85℃ 1.8V~3.6V 10.5mA 2.4GHz 2.4GHz~2.483GHz 2Mbps 7mA 9dBm Bluetooth、ISM SPI、I2C Supports RSSI function、CRC check function、Automatic response function、Automatic retransmission function transceiver SOP-8 RF Transceiver ICs ROHSVollgoRF Transceiver ICsLM358
SOP-8-18V~18V 0℃~+70℃ 1.2MHz 10nA 2 24mA 3V~36V 500uA 50nA 5mV 80dB Built-in compensation SOP-8 Operational Amplifier ROHSMSKSEMIOperational AmplifierLM1117MP-3.3
SOT-2230℃~+125℃@(Ta) 1 1.2V@(800mA) 15V 3.3V 5mA 75dB@(120Hz) 800mA 99uVrms Fixed Over Current Protection、Over Temperature Protection Positive SOT-223 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSTexas InstrumentsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsWS2812B
5mm X 5mm Surface Mount RGB LED with Intelligent ControlWorldsemiUncategorised
README
README.mdBleRiot REG6
REG6 is a six-channel solid-state-relay controller built around a
PY32F030 and PAN2110. This repository contains the KiCad hardware and a
standalone TinyGo/BleRiot module under fw/ that exposes one integer percentage
for each channel.

Hardware
The firmware targets a PY32F030x8 at 24 MHz. TIM1 and TIM3 generate all six PWM outputs in hardware at a common 24 kHz frequency. Each analog path uses a loaded two-stage 1.5 kOhm/100 nF RC ladder, whose poles are approximately 405 Hz and 2.78 kHz, followed by an LM358 with a nominal gain of 1.56. At 50% duty, the ideal nominal filter model predicts about 12 mV peak-to-peak ripple at 24 kHz, compared with about 2.56 V peak-to-peak at 1 kHz. The PAN2110 uses the BleRiot three-wire SPI driver, and six chained WS2812B LEDs report channel and link state.
| Function | MCU pin | Peripheral | Alternate function |
|---|---|---|---|
| PWM channel 1 | PA8 | TIM1_CH1 | AF2 |
| PWM channel 2 | PA9 | TIM1_CH2 | AF2 |
| PWM channel 3 | PA10 | TIM1_CH3 | AF2 |
| PWM channel 4 | PB4 | TIM3_CH1 | AF1 |
| PWM channel 5 | PB5 | TIM3_CH2 | AF1 |
| PWM channel 6 | PF3 | TIM3_CH3 | AF13 |
| PAN2110 CSN | PF1 | GPIO | - |
| PAN2110 SCK | PA2 | GPIO, bit-banged SPI | - |
| PAN2110 DATA | PA3 | GPIO, bidirectional SPI | - |
| WS2812B data, D1-D6 | PF4 | GPIO | - |
The development inventory uses raw RF channel 37 with BLE Coded PHY S8. Its
address and XTEA key were generated offline with BleRiot's node new command
and are baked into the image by node build. This checked-in identity is public
bench provisioning; deployments must use a separately generated private
inventory identity and key.
Registers
The ssr inventory instance publishes exactly these writable Registry
registers:
| Registry name | Wire tag | Registry type | Range |
|---|---|---|---|
ssr.channel.1 | 1 | int | 0..100 |
ssr.channel.2 | 2 | int | 0..100 |
ssr.channel.3 | 3 | int | 0..100 |
ssr.channel.4 | 4 | int | 0..100 |
ssr.channel.5 | 5 | int | 0..100 |
ssr.channel.6 | 6 | int | 0..100 |
ssr.watchdog | 7 | int | 0..60 seconds |
Values are direct integer percentages on the Registry and int32 wire protocol.
Firmware clamps assignments to 0..100, and a Registry NULL assignment clears
that channel to zero. ssr.watchdog is a lease counter. Positive writes arm it
for up to 60 seconds, with larger values clamped to 60; zero, negative, and NULL
writes expire it. Reads return the remaining whole seconds rounded up, or zero
at and after the monotonic deadline.
Register tags are permanent wire identities and must not be renumbered or
reused.
Status And Safety
While BleRiot is online and the watchdog is armed, each LED represents its matching channel level. Status indicators use the WS2812 driver's global brightness of 128/255 (approximately 50%); normal channel colors render at half that, approximately 25%.
The watchdog starts expired. While it is expired, channel SET requests are acknowledged but ignored. Expiry clears all six retained channel levels and forces both PWM timers to 0% duty. Writing a positive watchdog value re-arms channel writes but does not restore cleared levels; every active channel needs a fresh SET. While the radio remains online and the watchdog is expired, only D2 blinks pure blue using the BleRiot heartbeat phase.
The node starts offline. If no valid packet has arrived, or packets stop for more than five seconds, firmware clears all six retained levels and forces both timers to update with 0% duty immediately. D1 then pulses orange-red for 200 ms once per second; D2-D6 remain off. A radio initialization failure follows the same safe output and heartbeat behavior. Reconnection does not restore old levels: each active channel requires a fresh SET. This RF-offline indication has priority over the online watchdog-expired indication.
Build And Run
The module uses released BleRiot and TinyGo driver modules pinned in fw/go.mod.
Install TinyGo and the PY32 pyOCD pack, then run:
go -C fw test ./...
make -C fw build
make -C fw install-pack
make -C fw flashFirmware v0.1.0 was built with Go 1.26.3, TinyGo commit
f8e1f465ecae33c58772c099f9b7667c00cea9c1, LLVM 18.1.8, pyOCD 0.44.0, and
the Puya PY32F030 CMSIS pack 1.2.8.
make -C fw flash builds the ssr inventory instance, programs it through
pyOCD, and opens RTT under reset. Confirm the intended board and probe before
using that target. To inspect generated firmware without flashing:
go -C fw run ./cmd/dev node build --name ssr
go -C fw run ./cmd/dev node gen --name ssrRun the hub against a Registry service with:
go -C fw run ./cmd/dev hub --registry http://localhost:8080 --diagnostics rfWith the hub and Registry running, ./fw/color-test.sh continuously renews a
five-second watchdog lease before writing the six demonstration channel levels.
Set the REGISTRY environment variable to use a URL other than
http://localhost:8080.
make -C fw new prints another random inventory stub; it does not update the
checked-in development identity automatically.
Bench Validation
Perform initial validation with low-voltage loads only and no mains connected:
- Build and flash the firmware, then verify D1 pulses orange-red and every PWM pin is low before the hub sends a valid packet.
- Start the hub, arm
ssr.watchdog, and write 0, 50, and 100 to each Registry channel in turn. Scope PA8, PA9, PA10, PB4, PB5, and PF3; expect a constant low at 0%, a 24 kHz waveform at 50%, and a constant high at 100% duty. - Confirm D1-D6 track their corresponding values using the configured level colors, with the chain limited to approximately 25% brightness.
- Set a short watchdog lease and all channels nonzero, then stop renewing the watchdog while RF stays online. Verify every PWM output goes low, all channel GETs return zero, and only D2 blinks pure blue. Confirm channel SETs remain ineffective until the watchdog is re-armed, and that re-arming alone does not restore outputs.
- Set all channels nonzero, stop RF traffic for more than five seconds, and verify every PWM output goes low and only D1 pulses orange-red for 200 ms per second, even after the watchdog expires.
- Restore RF traffic without sending SETs and confirm all outputs remain off. Re-arm the watchdog, send fresh channel SETs, and verify only those channels resume.
- Repeat power-up with the PAN2110 unavailable or misconfigured and confirm all PWM outputs remain low while the offline heartbeat continues.
After logic-level validation, verify the complete channel output stages and load polarity against the schematic before connecting actual SSR loads.
Parts
85| Qty | Value | Footprint | References |
|---|---|---|---|
| 21 | 100n | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25 +5 |
| 12 | 100k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R2, R5, R7, R10, R12, R15, R17, R20, R22, R25, R27, R30 |
| 12 | 1k5 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R3, R4, R8, R9, R13, R14, R18, R19, R23, R24, R28, R29 |
| 6 | 56k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R6, R11, R16, R21, R26, R31 |
| 6 | Conn_01x02_Socket | bleriot-reg6:ssr-contact | RE1, RE2, RE3, RE4, RE5, RE6 |
| 6 | WS2812B | LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm | D1, D2, D3, D4, D5, D6 |
| 5 | 100n | Capacitor_SMD:C_0805_2012Metric | C3, C4, C7, C30, C31 |
| 3 | 10u/16V | Capacitor_SMD:C_0805_2012Metric | C1, C6, C29 |
| 3 | LM358 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U1, U2, U3 |
| 2 | 1u | Capacitor_SMD:C_0805_2012Metric | C2, C5 |
| 1 | 10k | Resistor_SMD:R_0805_2012Metric | R1 |
| 1 | 16MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 68uH | Inductor_SMD:L_Wuerth_MAPI-4020 | L1 |
| 1 | Antenna_Shield | RF_Antenna:Texas_SWRA117D_2.4GHz_Left | A1 |
| 1 | LM1117MP-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U4 |
| 1 | PAN2110P0AA | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U6 |
| 1 | POWER | Connector_Phoenix_MSTB:PhoenixContact_MSTBA_2,5_2-G_1x02_P5.00mm_Horizontal | J1 |
| 1 | PY32F030F1xPx | Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm | U5 |
| 1 | SWD | Drake:SWD | X1 |
Questions
How big is the Bleriot REG6 PCB?
It measures 314 × 27 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Bleriot REG6 use?
85 parts, built around the PAN2110P0AA, LM358, LM1117MP-3.3 and WS2812B. 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 Bleriot REG6 KiCad files?
From the burgrp/bleriot-REG6 repository on GitHub, at the commit this page was made from: the board is board/bleriot-reg6.kicad_pcb and its schematic board/bleriot-reg6.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Bleriot REG6 design in my own project?
Its repository states no licence, so its author keeps all rights: ask burgrp before reusing the design.
Similar boards
- 2 layers40 × 42 mm

- 2 layers80 × 40 mm

- 2 layers77 × 51 mm

- 4 layers68 × 19 mm

Bob
burgrp/bleriot
BleRiot is a compact request/response protocol for reading and writing named integer registers on low-power RF nodes. A Linux hub polls the nodes and bridges their registers to an external Registry service.
25 parts - 2 layers50 × 35 mm

- 2 layers60 × 62 mm

CPG
burgrp/bleriot-CPG
CPG is a mains-powered BleRiot node for controlling a circulation pump and a motorized 3-way or 4-way valve in floor-heating and radiator-heating circuits.
39 parts - 2 layers150 × 48 mm

- 2 layers90 × 100 mm

PCB MAQUEEN V1
vmfachini/Lumibot
Desenvolvimento de um Hardware Livre, com uso de energia limpa, baseado no micro:bit para criar robôs móveis acessíveis, promovendo ensino de robótica, pensamento computacional e sustentabilidade no Brasil.
62 partsMIT