

A high-intensity IR blaster built on the RP2040. Browser-native control over WebSerial, MOSFET-driven IR output, 38kHz NEC modulation. Fully open source.
- Copper layers
- 4
- Thickness
- 1.6 mm
- Parts
- 50
- Nets
- 73
- Pads
- 253
- Tracks, vias
- 0, 0
- Routed
- Not yet
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 23 Apr 2026
- Updated
- 11 Sep 2026
Overview
LBD is an open-source printed circuit board by chaowoses, from the chaowoses/LottBespittingDiode repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board with 50 parts on 73 nets.
It is built around the RP2040, TPSM828214SILR and W25Q128JVSIQ, with the IN-S126ESGHIR, AO3400A and MM3Z6V2 among its other parts. Its parts include 18 capacitors, 15 resistors, 9 diodes, 3 ICs and 2 connectors. It belongs with the RP2040 boards of this library.
Main components
7RP2040
LQFN-56(7x7)12bit 133MHz 30 LQFN-56(7x7) Microcontrollers (MCU/MPU/SOC) ROHSRaspberry PiMicrocontrollers (MCU/MPU/SOC)TPSM828214SILR
TFDFN-10(2x2.5)-40℃~+125℃@(TJ) 1 1A 2.4V~5.5V 4MHz Buck Buck Built-in Yes TFDFN-10(2x2.5) DC-DC Converters ROHSTexas InstrumentsDC-DC ConvertersW25Q128JVSIQ
SOIC-8-208mil-40℃~+85℃ 100,000 cycles 120ms@(32KB) 128Mbit 133MHz 1uA 2.7V~3.6V 20 Years 3ms Power-on reset、Hardware write protection、Software write protection、Write enable latch、Absolute write protection SPI SOIC-8-208mil NOR FLASH ROHSWinbondNOR FLASHIN-S126ESGHIR
1210-40℃~+85℃ 1.46V 92mW/sr@IF=100mA 940nm 1210 Infrared LED Emitters ROHSInoluxInfrared LED EmittersAO3400A
SOT-23-55℃~+150℃ 1 N-channel 1.45V 1.4W 30V 48mΩ@2.5V 5.7A 50pF 630pF 75pF 7nC@10V N-Channel SOT-23 MOSFETs ROHSAlpha & Omega SemiconductorMOSFETsMM3Z6V2
SOD-323-65℃~+150℃ 100Ω 10Ω 300mW 3uA@4V 5.8V~6.6V 6.2V Independent SOD-323 Zener Diodes ROHSonsemiZener DiodesUSB4155-03-C
SMD-30℃~+85℃ 1 24P 48V 5A Black Male Type-C USB 3.2 SMD USB Connectors ROHSGlobal Connector Technology (GCT)USB Connectors
README
README.mdLott-Bespitting Diode (LBD)
A high-intensity IR blaster built on the RP2040. Browser-native control over WebSerial, MOSFET-driven IR output, 38kHz NEC modulation. Fully open source.
Named for Mrs. Lott, the worst teacher I ever had, and her classroom projector.
Features
- Web Controller: Full single-page app to manage IR remotes, browse the Flipper-IRDB, compose NEC signals, and transmit over WebSerial
- In-Browser Schematic Viewer: Browse all hardware schematics directly on the landing page via KiCanvas
- Auto-Generated BOM: Bill of materials extracted from KiCad schematics and embedded in the landing page, updated on every push
- IRDB Integration: Browse and import from Lucaslhm/Flipper-IRDB directly from the controller
- NEC Protocol Engine: CircuitPython firmware with hardware-timed 38kHz carrier modulation
- Library Management: Organize remotes and signals in folders with drag-and-drop, favorites, and inline editing
Project Structure
app/ # Web front-end
index.html # Landing page (hero, BOM, schematic viewer, docs)
controller.html # WebSerial controller app
landing/
index.css # Landing page styles (dark theme, purple/amber)
index.js # Landing page interactivity (tabs, viewer)
insults.json # Footer quotes
three-scene.js # Three.js particle background
controller/
style.css # Controller styles
scripts/
app.js # Init, event listeners, tab switching
state.js # State management, library CRUD, localStorage
serial.js # WebSerial connection, log bar
transmit.js # Hex input, NEC encoding, transmit history, save form
library-ui.js # Library pane, remote view, favorites, inline edits
sidebar.js # Sidebar toggle, resize, tree rendering
modals.js # Modal dialogs (folder, rename, delete, clear)
drag-drop.js # Drag-and-drop reordering in sidebar tree
import.js # .ir file parsing and import
irdb.js # Flipper-IRDB browsing and import
utils.js # escHtml, escAttr helpers
firmware/ # CircuitPython firmwareHardware
The embedded PCB design isn't finalized yet. Build the prototype on a breadboard or perfboard using the prototype schematic.
The full design targets a custom PCB with an RP2040, MOSFET-switched IR LED array, USB-C, and external flash. Five KiCad schematics cover the main board, power regulation, flash memory, USB connector, and a simplified prototype variant.
Firmware
The CircuitPython firmware implements a standard NEC protocol engine:
- 38kHz carrier modulation via
pulseio.PulseOut - Listens for 4-byte NEC arrays over USB serial
- Drives a status LED and the IR output on GPIO
- Header: 9000µs mark / 4500µs space
- Bit coding: 560µs mark + 1690µs (1) or 560µs (0)
- Compatible with any NEC IR receiver
import time
import board
import pwmio
# 38kHz carrier wave initialization
ir_pwm = pwmio.PWMOut(board.GP16, frequency=38000, duty_cycle=0)
def pulse_nec(mark_us, space_us):
# Enable carrier wave modulation for duration of mark
ir_pwm.duty_cycle = 32768 # 50% duty cycle
time.sleep_us(mark_us)
# Disable carrier wave modulation for duration of space
ir_pwm.duty_cycle = 0
time.sleep_us(space_us)Web Interface
Two pages are served via GitHub Pages:
| Page | Description |
|---|---|
Landing Page (index.html) | Project overview, BOM table, KiCanvas schematic viewer, architecture docs, features, setup guide |
Controller (controller.html) | Full WebSerial-based remote control app with library management, IRDB browser, signal composer, and transmit history |
Setup & Flash
Build the prototype on a breadboard or perfboard using the prototype schematic.
DIY / Prototype Only: Steps 1 and 2 (skip if you have a pre-assembled unit)
Step 1: Enter Bootloader Mode
Press and hold the BOOT button on the board, then connect it to your computer via a data-capable USB cable. Release the button once the drive mounts.
Step 2: Install CircuitPython
A mass storage volume named RPI-RP2 will appear. Drag and drop the appropriate CircuitPython .uf2 payload onto its root directory. The board will automatically reboot and remount as CIRCUITPY.
Step 3: Deploy Firmware
Copy the contents of firmware/ onto the CIRCUITPY volume root:
code.pylib/
Step 4: Plug It In & Open the Controller
Keep the device connected via USB, then open the web controller in a Chromium-based browser. Click Connect to establish the WebSerial session.
To run locally (required for development):
git clone https://github.com/chaowoses/LottBespittingDiode.git
cd LottBespittingDiode
python -m http.server 8080
# open http://localhost:8080License & Terms of Use
[!CAUTION] STRICTLY PROHIBITED FOR ILLEGAL USE
This project is designed solely for personal engineering research, hardware prototyping, and authorized testing. You may only operate this device on equipment you personally own or have explicit permission to control. The creator assumes no liability for misuse, property disruption, or equipment damage.
This project (software, firmware, schematics, PCB layouts, and documentation) is licensed under the GNU General Public License v3.0 (GPL-3.0).
Copyright © 2026 Josh Felder (Chaos). All Rights Reserved.
Parts
50| Qty | Value | Footprint | References |
|---|---|---|---|
| 11 | 100n | Capacitor_SMD:C_0201_0603Metric | C6, C7, C8, C9, C10, C11, C12, C13, C16, C17, C18 |
| 8 | IN-S126ESGHIR | LBD_Footprints:LED_IN-S12_INL | D1, D2, D3, D4, D5, D6, D7, D8 |
| 4 | 22 | Resistor_SMD:R_0603_1608Metric | R14, R15, R16, R17 |
| 3 | 10k | Resistor_SMD:R_0201_0603Metric | R8, R9, R18 |
| 2 | 15p | Capacitor_SMD:C_0201_0603Metric | C4, C5 |
| 2 | 1u | Capacitor_SMD:C_0402_1005Metric | C19, C20 |
| 2 | 22 | Resistor_SMD:R_0201_0603Metric | R11, R12 |
| 2 | 5.1k | Resistor_SMD:R_0201_0603Metric | R3, R13 |
| 1 | 100k | Resistor_SMD:R_0201_0603Metric | R10 |
| 1 | 10u | Capacitor_SMD:C_0603_1608Metric | C21 |
| 1 | 12 MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 1k | Resistor_SMD:R_0201_0603Metric | R7 |
| 1 | 1k (0603) | Resistor_SMD:R_0603_1608Metric | R6 |
| 1 | 22u | Capacitor_SMD:C_0603_1608Metric | C15 |
| 1 | 33 | Resistor_SMD:R_0603_1608Metric | R19 |
| 1 | 4.7u | Capacitor_SMD:C_0603_1608Metric | C14 |
| 1 | AO3400A | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | BOOTSEL | Button_Switch_SMD:SW_SPST_B3U-1000P | SW2 |
| 1 | Conn_01x03_Pin | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical_SMD_Pin1Left | J1 |
| 1 | MM3Z6V2 | Diode_SMD:D_SOD-323 | D9 |
| 1 | RP2040 | Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm | U1 |
| 1 | TPSM828214SILR | LBD_Footprints:TPSM828214SILR | U4 |
| 1 | USB4155-03-C | LBD_Footprints:GCT_USB4155-03-C_REVA | J2 |
| 1 | W25Q128JVSIQ | LBD_Footprints:W25Q128JVSIQ | U5 |
Questions
What parts does the LBD use?
50 parts, built around the RP2040, TPSM828214SILR, W25Q128JVSIQ and IN-S126ESGHIR. 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 LBD KiCad files?
From the chaowoses/LottBespittingDiode repository on GitHub, at the commit this page was made from: the board is hardware/LBD.kicad_pcb and its schematic hardware/LBD.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the LBD design in my own project?
Its repository publishes it under the GPL-3.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).
Similar boards
- 2 layers40.1 × 80.1 mm

- 4 layers33.5 × 24 mm

USBPowerMeter
JunKimmmy/USBPowerMeter
A compact USB-C passthrough power meter that displays real-time voltage, current, and power on an integrated 128×64 OLED screen.
84 parts8 - 4 layers135.8 × 149.3 mm

TapBadgeV2
Xasin/TapBadgeV2
The second, far more ambitious version of the TapBadge wearable
110 parts6GPL-3.0 - 4 layers36 × 150 mm

- 4 layers17.8 × 21.4 mm

Epsilon PCB
yassin-v2/Epsilon
A very compact development board integrating the RP2354A MCU, named Epsilon.
41 partsApache-2.0 - 6 layers35 × 50 mm

Power stage rev8
oresat/oresat-adcs-hardware
Controller PCB for OreSat reaction wheels, magnetorquers, IMU, and magnetometers
239 parts21GPL-2.0 - 4 layers25 × 16 mm

- 4 layers17.8 × 41.9 mm
