Skip to the content
PCBKitNew board
2 layers314 × 27 mmBleriot REG6, the printed circuit board in 3D

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

4

README

README.md

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 for each channel.

REG6 - top REG6 - bottom

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.

FunctionMCU pinPeripheralAlternate function
PWM channel 1PA8TIM1_CH1AF2
PWM channel 2PA9TIM1_CH2AF2
PWM channel 3PA10TIM1_CH3AF2
PWM channel 4PB4TIM3_CH1AF1
PWM channel 5PB5TIM3_CH2AF1
PWM channel 6PF3TIM3_CH3AF13
PAN2110 CSNPF1GPIO-
PAN2110 SCKPA2GPIO, bit-banged SPI-
PAN2110 DATAPA3GPIO, bidirectional SPI-
WS2812B data, D1-D6PF4GPIO-

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 nameWire tagRegistry typeRange
ssr.channel.11int0..100
ssr.channel.22int0..100
ssr.channel.33int0..100
ssr.channel.44int0..100
ssr.channel.55int0..100
ssr.channel.66int0..100
ssr.watchdog7int0..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:

sh
go -C fw test ./...
make -C fw build
make -C fw install-pack
make -C fw flash

Firmware 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:

sh
go -C fw run ./cmd/dev node build --name ssr
go -C fw run ./cmd/dev node gen --name ssr

Run the hub against a Registry service with:

sh
go -C fw run ./cmd/dev hub --registry http://localhost:8080 --diagnostics rf

With 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:

  1. Build and flash the firmware, then verify D1 pulses orange-red and every PWM pin is low before the hub sends a valid packet.
  2. 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.
  3. Confirm D1-D6 track their corresponding values using the configured level colors, with the chain limited to approximately 25% brightness.
  4. 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.
  5. 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.
  6. 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.
  7. 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
QtyValueFootprintReferences
21100nCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25 +5
12100kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2, R5, R7, R10, R12, R15, R17, R20, R22, R25, R27, R30
121k5Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3, R4, R8, R9, R13, R14, R18, R19, R23, R24, R28, R29
656kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR6, R11, R16, R21, R26, R31
6Conn_01x02_Socketbleriot-reg6:ssr-contactRE1, RE2, RE3, RE4, RE5, RE6
6WS2812BLED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD1, D2, D3, D4, D5, D6
5100nCapacitor_SMD:C_0805_2012MetricC3, C4, C7, C30, C31
310u/16VCapacitor_SMD:C_0805_2012MetricC1, C6, C29
3LM358Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU1, U2, U3
21uCapacitor_SMD:C_0805_2012MetricC2, C5
110kResistor_SMD:R_0805_2012MetricR1
116MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
168uHInductor_SMD:L_Wuerth_MAPI-4020L1
1Antenna_ShieldRF_Antenna:Texas_SWRA117D_2.4GHz_LeftA1
1LM1117MP-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U4
1PAN2110P0AAPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU6
1POWERConnector_Phoenix_MSTB:PhoenixContact_MSTBA_2,5_2-G_1x02_P5.00mm_HorizontalJ1
1PY32F030F1xPxPackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU5
1SWDDrake:SWDX1

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 mmBleriot rs485, the printed circuit board in 3D

    Bleriot rs485

    burgrp/bleriot-rs485

    DIN rail mounted RS485 to WiFi bridge

    21 parts1
  • 2 layers77 × 51 mmAt32f455-bob, the printed circuit board in 3D

    At32f455-bob

    burgrp/hw-at32f455-bob

    66 parts
  • 4 layers68 × 19 mmBob, the printed circuit board in 3D

    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 mmFan switch, the printed circuit board in 3D

    Fan switch

    burgrp/hw-fan-switch

    12V DC Fan switch based on ESP8266

    23 parts
  • 2 layers60 × 62 mmCPG, the printed circuit board in 3D

    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 mmSSR5A, the printed circuit board in 3D

    SSR5A

    burgrp/bleriot-SSR5A

    10 channel mains switch

    66 parts
  • 2 layers90 × 100 mmPCB MAQUEEN V1, the printed circuit board in 3D

    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