
Sensor hat
mikedahlgren/Pool-Controller
This runs a pool from a Waveshare ESP32-S3-RELAY-6CH and the PoolVeras sensor hat plugged onto its Pico headers.

A fully wireless switch panel for a race car using two Raspberry Pi Pico 2 W boards. One board acts as the Transmitter (switch panel), the other as the Receiver (12 V output driver).
Wireless switch is an open-source printed circuit board by hkymstr, from the hkymstr/Wireless-switch repository on GitHub. It is a 4-layer board of 70.1 × 46.4 mm with 102 parts on 76 nets, routed with 419 tracks and 43 vias.
It is built around the RCT-0C, LTST-C171KGKT and PPPC201LFBN-RC. Its parts include 51 resistors, 10 diodes, 9 capacitors, 9 transistors and 3 connectors.
A fully wireless switch panel for a race car using two Raspberry Pi Pico 2 W boards.
One board acts as the Transmitter (switch panel), the other as the Receiver (12 V output driver).
Bluetooth version: see the
bluetoothbranch.
┌──────────────────────────┐ WiFi (AP/STA) ┌─────────────────────────────┐
│ TRANSMITTER │ ◄──── UDP 20 Hz ──────► │ RECEIVER │
│ Raspberry Pi Pico 2W │ │ Raspberry Pi Pico 2W │
│ │ Web UI: 192.168.4.1 │ Web UI: <RX-IP> │
│ GPIO 1-5 ← 5 switches │ │ GPIO 8-11 → 4× MOSFET │
│ GPIO 0 → Connected LED │ │ GPIO 12 → Relay K2 │
│ GPIO 7 → Searching LED │ │ GPIO 0 → Connected LED │
│ Powered from 12 V via │ │ GPIO 7 → Searching LED │
│ on-board 5 V regulator │ │ Takes 12 V from car │
└──────────────────────────┘ └─────────────────────────────┘TX creates an open WiFi access point (WirelessSwitch-1 by default). RX connects as a station.
Both boards host a web settings page — join the WiFi network and open a browser to configure.
| Board | URL | What you can change |
|---|---|---|
| TX | http://192.168.4.1 | Pair ID |
| RX | http://<RX-IP> (linked from TX page) | Pair ID, hold time, channel modes |
Connect any phone or laptop to the WirelessSwitch-N WiFi network (no password), then open the URL above. Settings are saved to flash and survive power cycles.
| GPIO | Function | Behaviour |
|---|---|---|
| 0 | CONNECTED LED | Solid ON when wireless link is up |
| 7 | SEARCHING LED | Flashes 2 Hz while searching; OFF when linked |
Switches are active-low (connect switch between GPIO pin and GND).
Internal pull-ups enabled in firmware.
| GPIO | Channel | Description |
|---|---|---|
| 1 | SW1 | Switch 1 input |
| 2 | SW2 | Switch 2 input |
| 3 | SW3 | Switch 3 input |
| 4 | SW4 | Switch 4 input |
| 5 | SW5 | Switch 5 input |
Outputs are active-high (GPIO HIGH = output energised).
| GPIO | Channel | Type | Max Load |
|---|---|---|---|
| 8 | CH1 | N-ch MOSFET | 5 A @ 12 V |
| 9 | CH2 | N-ch MOSFET | 5 A @ 12 V |
| 10 | CH3 | N-ch MOSFET | 5 A @ 12 V |
| 11 | CH4 | N-ch MOSFET | 5 A @ 12 V |
| 12 | CH5 | Relay K2 (SPDT) | Per relay rating |
├── kicad/
│ ├── wireless_switch.kicad_pro KiCad project file
│ ├── wireless_switch.kicad_sch Top-level schematic
│ ├── Pico_interface.kicad_sch Pico 2 W GPIO interface sub-sheet
│ ├── analog_in.kicad_sch Output channel sub-sheet (MOSFET + relay)
│ ├── input_power.kicad_sch 12 V → 5 V power supply sub-sheet
│ ├── wireless_switch.kicad_pcb PCB layout
│ └── sym-lib-table KiCad symbol library table
│
├── firmware/
│ ├── config.py Shared configuration (defaults – overridden by web UI)
│ ├── tx_main.py Transmitter MicroPython firmware
│ ├── rx_main.py Receiver MicroPython firmware
│ ├── install_tx.bat Windows transmitter installer (default COM3)
│ ├── install_rx.bat Windows receiver installer (default COM5)
│ ├── install_tx.sh Linux / macOS transmitter installer
│ ├── install_rx.sh Linux / macOS receiver installer
│ ├── verify.bat 18-point verification script (Windows)
│ ├── led_test.bat LED blink test (Windows)
│ └── polarity_test.bat LED polarity / GPIO finder (Windows)
│
└── docs/
└── wireless_switch.pdf Full schematic PDFkicad/wireless_switch.kicad_pcbinput_power.kicad_sch)https://micropython.org/download/RPI_PICO2_W/RPI-RP2 mass storage.uf2 onto the drive — Pico reboots automaticallympremotepip install mpremoteWindows (default COM3):
cd firmware
install_tx.bat
install_tx.bat COM4 ← specify a different port if neededLinux / macOS:
cd firmware
chmod +x install_tx.sh && ./install_tx.shConfirm: board blinks SEARCHING LED 3× quickly then flashes slowly.
Windows (default COM5):
install_rx.batLinux / macOS:
./install_rx.shverify.bat COM3 COM5
led_test.bat COM3 COM5| Parameter | Value |
|---|---|
| Update rate | 20 Hz (every 50 ms) |
| Link timeout | 2 s |
| Hold on disconnect | 10 s (configurable) |
| Protocol | UDP port 4210 |
| WiFi mode | TX = AP, RX = Station |
| Network | Open (no password) |
Each output channel can be set independently via the RX web interface:
| Mode | Behaviour |
|---|---|
| Momentary | Output ON while switch is held; OFF when released |
| Latch | First press turns output ON; next press turns it OFF |
Latch state is preserved through brief disconnects (within hold window).
A disconnection longer than the hold time resets all latch states to OFF.
If two TX/RX pairs operate at the same time, each pair needs a unique Pair ID so they don't cross-connect.
Set the same Pair ID on both boards in a pair via the web interface:
| Pair | TX SSID | RX connects to |
|---|---|---|
| 1 | WirelessSwitch-1 | WirelessSwitch-1 |
| 2 | WirelessSwitch-2 | WirelessSwitch-2 |
Procedure for changing Pair ID:
| Symptom | Likely cause | Fix |
|---|---|---|
| No 3× startup blink | Firmware not installed | Re-run the installer; verify MicroPython UF2 was flashed first |
| SEARCHING LED never stops flashing | Wrong Pair ID or TX not powered | Check both boards have the same Pair ID; confirm TX SEARCHING LED is also flashing |
| TX AP has stale WPA2 password | Old security settings cached in chip | Firmware resets the AP before configuring — power-cycle TX |
| Can't open web interface | Not connected to WirelessSwitch-N WiFi | Join the WiFi network first (no password), then open the URL |
| RX web page not reachable | RX IP unknown | Open TX page (192.168.4.1) first — it shows a clickable link to the RX page |
| Outputs don't activate | Wrong firmware on board | Confirm TX has tx_main.py installed as main.py |
| Latch output stuck after reboot | Expected — latch state is in RAM only | Press the switch once to toggle off |
mpremote cannot find device | Driver missing or wrong port | Run python -m mpremote connect list |
| Pico not detected as storage | Not holding BOOTSEL | Hold BOOTSEL before plugging USB |
UDP packet format (7 bytes, TX → RX, port 4210):
Byte 0 : 0xAA (start marker)
Byte 1 : Switch 1 state (0 = open, 1 = pressed)
Byte 2 : Switch 2 state
Byte 3 : Switch 3 state
Byte 4 : Switch 4 state
Byte 5 : Switch 5 state
Byte 6 : Checksum = (SW1+SW2+SW3+SW4+SW5) & 0xFFRX → TX heartbeat: b"RXHERE" (6 bytes, every 50 ms) — tells TX the RX's IP address.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 25 | 1k | Resistor_SMD:R_0603_1608Metric | R1, R2, R3, R13, R14, R15, R16, R17, R18, R21, R22, R23, R26, R27, R28, R35 +9 |
| 16 | RCT-0C | Connector_Wire:SolderWire-0.5sqmm_1x01_D0.9mm_OD2.1mm | RLY_CM1, RLY_NC1, RLY_NO1, SW_GND1, SW_GND2, SW_GPIO15, SW1, SW1_OUT1, SW2, SW2_OUT1, SW3, SW3_OUT1, SW4, SW4_OUT1, SW5, SW6 |
| 10 | 50milli | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R19, R20, R29, R30, R31, R33, R44, R48, R57, R60 |
| 8 | 1k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R24, R25, R32, R34, R38, R39, R65, R66 |
| 8 | LTST-C171KGKT | LED_SMD:LED_0805_2012Metric | D1, D2, D3, D4, D5, D6, D12, D13 |
| 7 | 0.1uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C1, C2, C3, C4, C5, C6, C8 |
| 7 | 10k | Resistor_SMD:R_0603_1608Metric | R7, R8, R9, R10, R11, R12, R47 |
| 4 | MOSFET P-CH 30V | Package_TO_SOT_SMD:SOT-23 | Q2, Q5, Q6, Q13 |
| 4 | MOSTFET N-CH 50V | Package_TO_SOT_SMD:SOT-323_SC-70 | Q7, Q8, Q9, Q10 |
| 2 | 1N4148 | Diode_SMD:D_SOD-523 | D9, D14 |
| 2 | PPPC201LFBN-RC | ESQ-120-24-G-S:SAMTEC_ESQ-120-24-G-S | J2, J3 |
| 1 | 2.2uF | Capacitor_SMD:C_1206_3216Metric | C7 |
| 1 | 22uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C9 |
| 1 | 22uH | Inductor_SMD:L_1210_3225Metric_Pad1.42x2.65mm_HandSolder | L1 |
| 1 | 30.1k | Resistor_SMD:R_0603_1608Metric | R46 |
| 1 | 691137710002 | 691137710002:691137710002 | J1 |
| 1 | G5V-1 | Relay_THT:Relay_SPDT_Omron_G5V-1 | K2 |
| 1 | LT1933IS6_TRPBF | Package_TO_SOT_SMD:TSOT-23-6_HandSoldering | U2 |
| 1 | MBRM140T3G | Diode_SMD:D_Powermite_AK | U1 |
| 1 | Q_NMOS_GSD | Package_TO_SOT_SMD:SOT-323_SC-70 | Q14 |
It measures 70.1 × 46.4 mm and has 4 copper layers, 1.6 mm thick.
102 parts, built around the RCT-0C, LTST-C171KGKT and PPPC201LFBN-RC. 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.
From the hkymstr/Wireless-switch repository on GitHub, at the commit this page was made from: the board is kicad/wireless_switch.kicad_pcb and its schematic kicad/Pico_interface.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask hkymstr before reusing the design.

mikedahlgren/Pool-Controller
This runs a pool from a Waveshare ESP32-S3-RELAY-6CH and the PoolVeras sensor hat plugged onto its Pico headers.

lucask07/covg_clamp
kicad schematic and layout for COVG bath and guard clamps




BrownSpaceEngineering/PVDX-EPS_V1
Avionics files related to new overhauled EPS schematics, pcb design, and documentation

dineshkiran97/Battery-Protected-Multi-Rail-Regulator-PCB
KiCad project for a battery-powered linear regulator board that generates two regulated rails (5V and 3.3V) from a single-cell battery input, with reverse-polarity protection and a power-on indicator.

kian09/Guardian
A compact health monitoring device that is worn on the wrist. Its capabilities are measuring your heart rate and detecting accidental falls using an accelerometer.