
Whisker
HeyPCB/whisker
Drop-in controller for Petoi's Nybble robot cat running the stock OpenCat firmware: ATmega328P, PCA9685, MPU-6050, USB-C, 3 A buck, protected battery input. 4-layer KiCad 10 board plus printed cradle.

USB-C (USB 2.0) to M.2 Key-E carrier for the Gateworks GW16170 Wi-Fi HaLow card. KiCad 10, generated from Python, Rev A sent to JLCPCB.
USBC M2E HaLow Adapter is an open-source printed circuit board by Diode663, from the Diode663/USBC_M2E_HaLow_Adapter repository on GitHub, published under the CERN-OHL-P-2.0 licence. It is a 2-layer board of 56.5 × 40.5 mm with 30 parts on 63 nets, routed with 125 tracks and 44 vias.
It is built around the TPS563201DDCR, USBLC6-2SC6 and CL21A226MAQNNNE, with the CL31A107MQHNNNE, CYA0630-2.2UH and FRC0402F3322TS among its other parts. Its parts include 9 capacitors, 4 resistors, 2 ICs, 2 connectors and 1 diode. It belongs with the radio and wireless and computers and single-board computers boards of this library.
USB 2.0 over a USB-C receptacle to an M.2 2230 Key-E socket, for the Gateworks GW16170 (Morse Micro MM8108-M20) Wi-Fi HaLow card. 56.5 x 40.5 mm, 2-layer (JLCPCB JLC0216A), single-sided assembly.

Status: Rev A is built and works as designed (boards assembled by JLCPCB, confirmed by the author on 2026-09-29). The project is closed; no Rev B is planned. Test procedure:
docs/Test_Procedure.md. Pre-fabrication review:docs/Design_Review_2026-09-20.md.
| Block | Parts |
|---|---|
| USB-C input | J1 HRO TYPE-C-31-M-12, R1/R2 5.1k CC pull-downs, U1 USBLC6-2SC6, D1 SMF5.0A |
| 3.3 V / 3 A buck | U2 TPS563201, L1 2.2 uH, C1/C2 in, C4/C5 out, R3/R4 33.2k/10k = 3.32 V |
| M.2 socket | J2 MLD-NGFF-E-4.2H, C6 100 uF, C7 10 uF, C8/C9 100 nF |
| Mechanical | H1-H4 M3, H5 SMTSOM225BTR M2 x 2.5 mm SMT nut for the card |
Only USB D+/D- (M.2 pins 3 and 5), 3.3 V and ground go to the card. W_DISABLE1# (the card's reset) and W_DISABLE2# (wake) are left open on purpose: the card has its own pull-ups, and its reset pin uses a power-on RC that an external pull-up would defeat.
Full BOM with notes and the parts you supply yourself: BOM.md.
The CSV that went to JLCPCB: fab/USBC_M2E_HaLow_Adapter_bom.csv.
| Ref | Qty | Value | Part number | LCSC |
|---|---|---|---|---|
| U2 | 1 | 3 A buck regulator | TPS563201DDCR | C116592 |
| U1 | 1 | USB ESD array | USBLC6-2SC6 | C7519 |
| D1 | 1 | 5 V TVS | SMF5.0A | C19077497 |
| L1 | 1 | 2.2 µH | CYA0630-2.2UH | C5189746 |
| J1 | 1 | USB-C receptacle | TYPE-C-31-M-12 | C165948 |
| J2 | 1 | M.2 Key-E socket, 4.2 mm | MLD-NGFF-E-4.2H | C52766479 |
| H5 | 1 | M2 x 2.5 mm SMT nut | SMTSOM225BTR | C5301773 |
| C1 | 1 | 10 µF 25 V, 1210 | GRM32DR71E106KA12L | C77100 |
| C6 | 1 | 100 µF 6.3 V, 1206 | CL31A107MQHNNNE | C15008 |
| C4, C5 | 2 | 22 µF 25 V, 0805 | CL21A226MAQNNNE | C45783 |
| C7 | 1 | 10 µF 10 V, 0603 | CL10A106KP8NNNC | C19702 |
| C2, C3, C8, C9 | 4 | 100 nF 16 V, 0402 | CL05B104KO5NNNC | C1525 |
| R1, R2 | 2 | 5.1 kΩ 1 %, 0402 | 0402WGF5101TCE | C25905 |
| R3 | 1 | 33.2 kΩ 1 %, 0402 | FRC0402F3322TS | C2930001 |
| R4 | 1 | 10 kΩ 1 %, 0402 | 0402WGF1002TCE | C25744 |
You also need the GW16170 card, an M2 x 3–4 mm screw, an MMCX antenna or pigtail, and a short 3 A USB-C cable on a port that can supply about 0.9 A.
Everything is generated from Python. Edit the scripts, not the KiCad files. Run with KiCad's Python:
"C:\Program Files\KiCad\10.0\bin\python.exe" generate_schematic.py --force
"C:\Program Files\KiCad\10.0\bin\python.exe" autoplace.py . --floorplan
"C:\Program Files\KiCad\10.0\bin\python.exe" autoplace.py . --place --force
"C:\Program Files\KiCad\10.0\bin\python.exe" setup_fab.py
"C:\Program Files\KiCad\10.0\bin\python.exe" route_board.py
"C:\Program Files\KiCad\10.0\bin\python.exe" drc_report.py
"C:\Program Files\KiCad\10.0\bin\python.exe" check_m2_clearance.py
"C:\Program Files\KiCad\10.0\bin\python.exe" build_package.py--place resets every unlocked footprint. Designators moved by hand in KiCad are detected and
kept (.pcbgen-refs.json). route_board.py redraws every track, via and pour each time it runs.
build_package.py writes fab/ and refuses to run unless DRC is clean.
Mechanical facts, from the MLD-NGFF-E-4.2H drawing:
JLCPCB: setup_fab.py writes their 2-layer rules into the project and into
USBC_M2E_HaLow_Adapter.kicad_dru, with the source pages and date in its docstring. The USB pair
is 0.3345 / 0.1524 mm with ground pour 0.2032 mm either side, from JLCPCB's own calculator for
stackup JLC0216A. JLCPCB does not test impedance on 2-layer boards. jlc_rotations.json holds
the placement-file corrections with the evidence for each.
USBC_M2E_HaLow_Adapter.kicad_*: the KiCad 10 project, schematic, routed board and custom design rules.fab/: the package sent to JLCPCB for Rev A (gerbers zip, BOM, placement file, order notes).docs/: schematic PDF, renders, copper images, the pre-fabrication design review and the board test procedure.library/: project symbols, footprints and 3D models.*.py: the generators. schlib.py, subcircuits.py, pcblib.py, autoplace.py, recipes.py and jlc_cpl.py are copies of the libraries the project was generated with.Copyright Diode663 2026.
Hardware (the KiCad project, schematic, board, the project's own symbols and footprints,
fabrication outputs and documentation): this source describes Open Hardware and is licensed under
the CERN-OHL-P v2. You may redistribute and modify this source and make products using it under
the terms of the CERN-OHL-P v2 (https://ohwr.org/cern_ohl_p_v2.txt), a copy of which is in
LICENSE. This source is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY,
INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. Please
see the CERN-OHL-P v2 for applicable conditions.
Source location: https://github.com/Diode663/USBC_M2E_HaLow_Adapter
Software (every *.py file): MIT, see LICENSE-MIT.
Not covered by either licence — third-party material, included for convenience and owned by its respective rights holders:
easyeda2kicad:
library/HaLowAdapter.pretty/CONN-SMD_MLD-NGFF-E-4.2H.kicad_mod, IND-SMD_L7.2-W6.6_GPSR07X0.kicad_mod,
SMTSO_M2_H2.5_SMTSOM225BTR.kicad_mod, and in library/HaLowAdapter.3dshapes/ the
USB-C_SMD-TYPE-C-31-M-12_1, IND-SMD_L7.2-W6.6-H3.0_GPSR07X0 and SMD_BD5.6-D3.6 models;USB_C_Receptacle_HRO_TYPE-C-31-M-12.kicad_mod and the M.2 socket symbol, which are modified
copies from the KiCad libraries (CC-BY-SA 4.0 with the KiCad library exception).Gateworks, Morse Micro, JLCPCB and the part manufacturers are not affiliated with this project.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100nF | Capacitor_SMD:C_0402_1005Metric | C2, C3, C8, C9 |
| 4 | M3 | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H1, H2, H3, H4 |
| 3 | Fiducial | Fiducial:Fiducial_1mm_Mask2mm | FID1, FID2, FID3 |
| 2 | 22uF | Capacitor_SMD:C_0805_2012Metric | C4, C5 |
| 2 | 5.1k | Resistor_SMD:R_0402_1005Metric | R1, R2 |
| 1 | +3V3 | TestPoint:TestPoint_Pad_D1.5mm | TP1 |
| 1 | 100uF | Capacitor_SMD:C_1206_3216Metric | C6 |
| 1 | 10k | Resistor_SMD:R_0402_1005Metric | R4 |
| 1 | 10uF | Capacitor_SMD:C_0603_1608Metric | C7 |
| 1 | 10uF/25V | Capacitor_SMD:C_1210_3225Metric | C1 |
| 1 | 2.2uH | HaLowAdapter:IND-SMD_L7.2-W6.6_GPSR07X0 | L1 |
| 1 | 33.2k | Resistor_SMD:R_0402_1005Metric | R3 |
| 1 | GND | TestPoint:TestPoint_Pad_D1.5mm | TP3 |
| 1 | M.2 Key-E (GW16170) | HaLowAdapter:CONN-SMD_MLD-NGFF-E-4.2H | J2 |
| 1 | M2 standoff H2.5 | HaLowAdapter:SMTSO_M2_H2.5_SMTSOM225BTR | H5 |
| 1 | SMF5.0A | Diode_SMD:D_SOD-123F | D1 |
| 1 | TPS563201DDCR | Package_TO_SOT_SMD:SOT-23-6 | U2 |
| 1 | USB-C | HaLowAdapter:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U1 |
| 1 | VBUS | TestPoint:TestPoint_Pad_D1.5mm | TP2 |

HeyPCB/whisker
Drop-in controller for Petoi's Nybble robot cat running the stock OpenCat firmware: ATmega328P, PCA9685, MPU-6050, USB-C, 3 A buck, protected battery input. 4-layer KiCad 10 board plus printed cradle.

Majorwhiskey/gps-lora
Theoros is a USB-C GPS logger and LoRa tracker built on the ESP32-S3. It logs 1 Hz u-blox M10 fixes to microSD, shows status on an OLED and sends AES-128-CCM encrypted position over 868 MHz LoRa.


gcormier/esphome-pressure
esphome board with a differential pressure sensor, supporting a variety of power sources


vaknin/PCB
Hardware ideas to fab-ready PCBs as code: Rust pcbgen on KiCad 10, Freerouting, ESP-IDF firmware with QEMU/Wokwi simulation, CadQuery enclosures

eshelton328/forge
Hardware design monorepo with software-grade CI/CD. KiCad PCB projects with automated ERC/DRC, multi-fab rule validation, schematic & BOM checks, and auto-generated board documentation.

HeyPCB/power-kit
Six open power and charging boards: KiCad 10, JLCPCB-ready, CERN-OHL-S-2.0
It measures 56.5 × 40.5 mm and has 2 copper layers, 1.6 mm thick.
30 parts, built around the TPS563201DDCR, USBLC6-2SC6, CL21A226MAQNNNE and CL31A107MQHNNNE. 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 Diode663/USBC_M2E_HaLow_Adapter repository on GitHub, at the commit this page was made from: the board is USBC_M2E_HaLow_Adapter.kicad_pcb and its schematic USBC_M2E_HaLow_Adapter.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the CERN-OHL-P-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).