
Niphar
mornepousse/Niphargus
Niphargus — a slim, indestructible wireless split keyboard. ESP32 + nRF24, wired fallback, and an emergency kit hidden behind the USB port. The successor to the Rouge-Gorge.

ESP-32 Simple Universal Remote
Ir remote is an open-source printed circuit board by Koontzie, from the Koontzie/ir-remote repository on GitHub, published under the MIT licence. It is a 2-layer board of 30 × 58 mm with 42 parts on 27 nets, routed with 295 tracks and 131 vias.
It is built around the ESP32-S3-WROOM-1-N8, HT7833 and USBLC6-2SC6, with the AO3400A among its other parts. Its parts include 14 resistors, 10 capacitors, 7 switches, 4 ICs and 3 diodes. It belongs with the ESP32 boards of this library.
KiCad 10 project for the custom board. Design decisions and rationale live in DESIGN-pcb.md; this file is the how-to-work-on-it notes.
Nothing here has been fabricated. Nothing is proven.
| File | What it is |
|---|---|
ir-remote.kicad_sch | Schematic — flat sheet, zoned power / MCU / USB / IR / inputs |
ir-remote.kicad_pcb | Board — 2-layer, 30 × 58mm |
ir-remote.kicad_pro | Project + net classes (POWER_IR, POWER_3V3, USB_DIFF) |
DESIGN-pcb.md | Pin map, power tree, BOM, sleep budget, decisions |
KiCad 10 (board format 20260206) references nets by name:
(net "GND") <- pads, tracks and vias, KiCad 10
(net 2 "GND") <- KiCad <= 9 pads; the numeric index and the top-level
(net N "name") table no longer existkicad-cli --save-board — KiCad's own serialiser — writes the name-only form,
and DRC resolves it correctly (Pad 5 [BTN1], Track [BTN1]). The kicad-mcp
writer produces the same thing, correctly.
This tripped me once. grep '(net [0-9]' returns zero on a perfectly healthy
KiCad 10 board, which looks alarming. I concluded the MCP was corrupting the
file and wrote a script to add the old index table back. It "worked" only
because KiCad still parses the legacy form — the board was never broken, and the
script eventually introduced a genuine inconsistency of its own. Deleted.
Check what this KiCad version actually writes before concluding a tool is broken:
kicad-cli pcb drc --output /tmp/drc.rpt ir-remote.kicad_pcb
grep -A3 unconnected /tmp/drc.rpt # healthy: nets show as [GND], [BTN1], ....kicad_pcb outside the
MCP and its next save is refused (mtime guard, diskChangedExternally);
your changes then exist only in server memory until they're lost. Call
open_project to re-sync first.assign_net_to_class and add_net_class are advertised but not
implemented — they return Unknown command. Net-class assignment has to be
written into ir-remote.kicad_pro (net_settings.netclass_patterns) directly.refill_zones has a documented segfault risk on the swig backend. Use
kicad-cli pcb drc --refill-zones --save-board instead — it fills zones
natively and safely.kicad-cli sch erc for a readable report.# ERC
kicad-cli sch erc --output erc.rpt --severity-all ir-remote.kicad_sch
# DRC, refilling zones first (DRC on unfilled pours is meaningless)
kicad-cli pcb drc --refill-zones --save-board --output drc.rpt --severity-error ir-remote.kicad_pcb
# 3D renders
kicad-cli pcb render --output layout-top.png --side top ir-remote.kicad_pcb
kicad-cli pcb render --output layout-bottom.png --side bottom ir-remote.kicad_pcbFreerouting, not the MCP's autoroute (it probes /usr/bin/java, the macOS
stub, and will not find a Homebrew JDK).
/opt/homebrew/opt/openjdk@21/bin/java (keg-only, not on PATH).java -Djava.awt.headless=true -jar ~/.kicad-mcp/freerouting.jar \
-de ir-remote.dsn -do ir-remote.ses -mp 50 -dct 0The MCP DSN export drops net classes — everything comes out at 0.2mm,
including the 220mA IR paths. The DSN must be patched to add POWER_IR (600µm),
POWER_3V3 (500µm) and USB_DIFF (250µm) classes before routing.
| Parameter | Value |
|---|---|
| Size | 30 × 58mm, 2mm corner radius |
| Layers / thickness | 2 / 1.6mm |
| Surface finish | HASL (lead-free fine) |
| Min track / clearance | 0.127mm / 0.2mm |
| Min drill | 0.3mm |
| Copper | 1oz |
Watch item: the stock KiCad ESP32-S3-WROOM-1 footprint ships 12 thermal
vias at 0.2mm drill, under JLCPCB's 0.3mm minimum. They are enlarged to
0.3mm in this board. If the footprint is ever re-imported from the library,
that fix is lost — re-check before ordering.
The ESP32-S3-WROOM-1 footprint declares a large antenna clearance area (x < 7.75mm for the full board height in the current orientation). No copper, no pour, no components, no stitching vias in it. The ground pours are cut back to respect it, which is why the left strip of the board looks empty.
The MCP's add_gnd_stitching_vias works off the board outline, not the pour
outline, and will happily place vias straight through the keepout. Use the
in_zones strategy or place them by hand.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C6, C7, C8, C9 |
| 2 | 100R | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R3, R4 |
| 2 | 100k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R5, R6 |
| 2 | 10k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R12, R13 |
| 2 | 10uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C3, C10 |
| 2 | 2M | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R10, R11 |
| 2 | 5.1k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R7, R8 |
| 2 | AO3400A | Package_TO_SOT_SMD:SOT-23 | Q1, Q2 |
| 1 | 100uF | Capacitor_SMD:C_1210_3225Metric | C1 |
| 1 | 12R | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R2 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R14 |
| 1 | 1uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C5 |
| 1 | 22R | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R1 |
| 1 | 22uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C2 |
| 1 | 4.7k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R9 |
| 1 | 4.7uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C4 |
| 1 | BOOT | Button_Switch_SMD:SW_SPST_SKQG_WithStem | SW6 |
| 1 | BTN1 | Button_Switch_SMD:SW_SPST_SKQG_WithStem | SW1 |
| 1 | BTN2 | Button_Switch_SMD:SW_SPST_SKQG_WithStem | SW2 |
| 1 | BTN3 | Button_Switch_SMD:SW_SPST_SKQG_WithStem | SW3 |
| 1 | BTN4 | Button_Switch_SMD:SW_SPST_SKQG_WithStem | SW4 |
| 1 | BTN5 | Button_Switch_SMD:SW_SPST_SKQG_WithStem | SW5 |
| 1 | CHG | LED_SMD:LED_0603_1608Metric | D3 |
| 1 | ESP32-S3-WROOM-1-N8 | RF_Module:ESP32-S3-WROOM-1 | U1 |
| 1 | HT7833 | Package_TO_SOT_SMD:SOT-89-3 | U2 |
| 1 | IR 940nm narrow | LED_THT:LED_D5.0mm | D2 |
| 1 | IR 940nm wide | LED_THT:LED_D5.0mm | D1 |
| 1 | LiPo 400-500mAh | Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal | J2 |
| 1 | MCP73831-2-OT | Package_TO_SOT_SMD:SOT-23-5 | U3 |
| 1 | RESET | Button_Switch_SMD:SW_SPST_SKQG_WithStem | SW7 |
| 1 | USB-C USB2.0 | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U4 |
It measures 30 × 58 mm and has 2 copper layers, 1.6 mm thick.
42 parts, built around the ESP32-S3-WROOM-1-N8, HT7833, USBLC6-2SC6 and AO3400A. 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 Koontzie/ir-remote repository on GitHub, at the commit this page was made from: the board is hardware/ir-remote.kicad_pcb and its schematic hardware/ir-remote.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
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).

mornepousse/Niphargus
Niphargus — a slim, indestructible wireless split keyboard. ESP32 + nRF24, wired fallback, and an emergency kit hidden behind the USB port. The successor to the Rouge-Gorge.

mornepousse/Conchodytes
Sleeper mouse: a wireless PMW3360 PCB inside a Logitech M100/M90 shell, talking to the same KaSe dongle as the Niphargus keyboard

JohnanLuca02/BYTE_Electronics
Repository for everything concerning the electronics (PCB, Electrical schemes, BOM, ...) of the robot dog project of the AiTeam called BYTE.


electromotif208/pcb-portfolio
👨💻 Electronics Engineer 📺 YouTube: ELECTROMOTIF 🔧 Tools: KiCad, EasyEDA 📡 Domains: Power Supply, ESP32, IoT, Embedded Hardware


huulanka/wisp
Open-source ESP32 room climate monitor — CO2, VOC, humidity, temperature and light sensing with custom PCB, MQTT/HomeKit integration, and OTA firmware updates. Full hardware + software, from schematic to BOM.
