
Pl60c dmx mini
tsmiltonAgents/pl60c-dmx-wakeup
A small ESP32-S3 board that drives the wired DMX512 input of a Neewer PL60C panel light so the light can be ramped up slowly in the morning (sunrise alarm). Rev A, 2026-09-02.

ATtiny85 + ATECC608A crypto experimentation platform — embedded crypto, U2F hardware key, ESP32 integration
Tinycrypt key is an open-source printed circuit board by nakomis, from the nakomis/tinycrypt repository on GitHub, published under the CC0-1.0 licence. It is a 2-layer board of 21 × 35 mm with 25 parts on 14 nets, routed with 119 tracks and 42 vias.
It is built around the ESP32-S3-MINI-1-N8, AP2112K-3.3TRG1 and ATECC608B-SSHDA-T, with the USBLC6-2SC6, TS-1187A-B-A-B and WS2812B-2020-V6 among its other parts. Its parts include 8 capacitors, 6 resistors, 4 ICs, 1 diode and 1 connector. It belongs with the ESP32 boards of this library.
If you find this useful, please consider buying me a coffee:
A YubiKey-style FIDO2/WebAuthn USB security key built on an ESP32-S3, where the "touch the key" step happens on your wrist instead: the key sends a push notification to an Apple Watch, you tap Approve, and the watch proves it over Bluetooth before the key signs you in.
The first target is signing into AWS IAM Identity Center with the "Security key" MFA option.
Hardware:
Status: feasibility spikes. Spike A passed: an ESP32-S3 running the
SoloKeys solo1 CTAP2 core, with an insecure software key and a
BOOT-button presence check, registered and signed into IAM Identity Center from Chrome. The earlier
ATtiny85 / U2F experiments live on the spike branch.
The firmware is split into a portable CTAP2 core with swappable transport, crypto, presence and notifier back ends, so most of it also runs as a simulator on macOS.
Testing builds can use a software key instead of the ATECC608. That build is deliberately insecure, is for testing only, and must only ever be registered against a read-only test user.
All the firmware lives in embedded/, and the commands below run from there. The CTAP2 core is
SoloKeys solo1 (Apache-2.0 OR MIT), pinned as a submodule in
embedded/third_party/solo1 under its own licence. Fetch it and the libraries it builds:
cd embedded
git submodule update --init third_party/solo1
git -C third_party/solo1 submodule update --init crypto/cifra crypto/micro-ecc crypto/tiny-AES-c tinycborPath (under embedded/) | What it is |
|---|---|
cmake/solo_sources.cmake | The core's source list, shared by both builds |
port/ | Portable code: the secure-element interface and solo1's crypto routed through it, presence, the soft element (TINYCRYPT_INSECURE_SOFT_KEY, refused in release builds) |
sim/ | Mac simulator: CTAPHID over UDP, state in a directory |
esp32s3/ | ESP-IDF firmware: TinyUSB FIDO HID, the ATECC608B (or the soft element in NVS), presence, the provisioner |
tests/ | python-fido2 tests against the sim, plus hw_smoke.py for a real key |
Mac sim (needs brew install libsodium):
cmake -S . -B build -DTINYCRYPT_INSECURE_SOFT_KEY=ON && cmake --build build
python3 -m venv tests/.venv && tests/.venv/bin/pip install -r tests/requirements.txt
tests/.venv/bin/python -m pytest tests
build/tinycrypt-sim --presence prompt # run it by hand; press Enter to approveESP32-S3 (ESP-IDF 5.5 in ~/esp/v5.5/esp-idf):
esp32s3/build.sh # build (KEYSTORE=atecc for the ATECC608B; soft by default)
esp32s3/build.sh -p /dev/cu.usbmodemXXXX flash # flash over the UART port
esp32s3/flash-manual.sh /dev/cu.usbmodemXXXX # if auto-reset fails: hold BOOT, tap RST, release BOOT first
tests/.venv/bin/python tests/hw_smoke.py # register + authenticate; press BOOT when askedThe key enumerates on the S3's native USB port (not the UART one) as "tinycrypt INSECURE TEST KEY", USB ID 303a:4004.
ATECC608B (CRYPT-22). Wire a breakout to the dev board: VCC to 3V3, GND, SDA to GPIO38, SCL to
GPIO21 (the PCB's pins; change them under esp-cryptoauthlib in esp32s3/build.sh menuconfig). The
breakouts have their own pull-ups. A blank chip answers at 0xC0 (8-bit); the M5Stack Trust&GO unit
(0x6A) is factory-locked and can't take tinycrypt's configuration. Locking is permanent: do a
sacrificial chip first. The provisioner's console is the native USB port (USB-Serial-JTAG), so
connect that one; flashing it and the key image straight after needs no BOOT+RST.
KEYSTORE=atecc esp32s3/build.sh provisioner # the provisioner image
ESPTOOL_BEFORE=default_reset esp32s3/flash-manual.sh --provisioner /dev/cu.usbmodemXXXX # else BOOT+RST first
esp32s3/tools/atecc_provision.py /dev/cu.usbmodemXXXX info
esp32s3/tools/atecc_provision.py /dev/cu.usbmodemXXXX lock # PERMANENT; asks for the serial
esp32s3/tools/atecc_provision.py /dev/cu.usbmodemXXXX csr tinycrypt-sandbox-key-1 /tmp/key-1.csr
infra/scripts/provision-key.sh key-1 --csr /tmp/key-1.csr # certificate from the chip's own key
KEYSTORE=atecc esp32s3/build.sh && ESPTOOL_BEFORE=default_reset esp32s3/flash-manual.sh /dev/cu.usbmodemXXXX # the key againThe same steps with the default soft keystore move a key's IoT private key out of prov into its
(INSECURE) soft element, with no chip.
docs/architecture/tinycrypt.drawio will be the source for the architecture diagram; the SVG is
auto-regenerated on commit by the pre-commit hook in .githooks/pre-commit.
To activate the hook after cloning:
git config core.hooksPath .githooksIf you find this useful, please consider buying me a coffee:
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100nF | C0402 | C3, C5, C7, C8 |
| 3 | 10uF | C0603 | C1, C2, C4 |
| 2 | 10k | R0402 | R2, R3 |
| 2 | 4k7 | R0402 | R4, R5 |
| 2 | M2 hole | MountingHole_M2_2.2mm_Pad4.4 | H1, H2 |
| 1 | ART1 | ART1 | |
| 1 | 1uF | C0402 | C6 |
| 1 | 330R | R0402 | R6 |
| 1 | 5k1 | R0402 | R1 |
| 1 | AP2112K-3.3TRG1 | SOT-25-5_L2.9-W1.6-P0.95-LS2.8-BL | U2 |
| 1 | ATECC608B-SSHDA-T | SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL | U4 |
| 1 | Debug pads | DebugPads_1x5_P2.54 | TP1 |
| 1 | ESP32-S3-MINI-1-N8 | BULETM-SMD_ESP32-S3-MINI-1-N8 | U1 |
| 1 | SM05B-SRSS-G-TB | CONN-SMD_SM05B-SRSS-G-TB-LF-SN | J1 |
| 1 | TS-1187A-B-A-B | SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5 | SW1 |
| 1 | USBLC6-2SC6 | SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BL | U3 |
| 1 | WS2812B-2020-V6 | LED-SMD_4P-L2.2-W2.0-P1.00_WS2815C-2020-4P | D1 |
It measures 21 × 35 mm and has 2 copper layers, 1.6 mm thick.
25 parts, built around the ESP32-S3-MINI-1-N8, AP2112K-3.3TRG1, ATECC608B-SSHDA-T and USBLC6-2SC6. 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 nakomis/tinycrypt repository on GitHub, at the commit this page was made from: the board is hardware/key-board/out/key/tinycrypt-key.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the CC0-1.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).

tsmiltonAgents/pl60c-dmx-wakeup
A small ESP32-S3 board that drives the wired DMX512 input of a Neewer PL60C panel light so the light can be ramped up slowly in the morning (sunrise alarm). Rev A, 2026-09-02.

FujiNetWIFI/fujinet-hardware
Schematics and design files for FujiNet hardware

PaulBichl/VibePCB-bench-psu
USB-C PD (20 V) powered bench supply, 2 independent channels, 1.6-16.6 V / 3 A each, constant voltage / constant current, designed with VibePCB.

kartben/hw-testing-rack
3D-printed, tilted test shelf for 16 dev boards: sliding drawers, per-bay ESP32-S3 running Zephyr (USB/IP, power switching, metering), KiCad PCBs, OpenSCAD parts, BOM and an interactive 3D viewer

Eniemooo/Sensor-HAT
Open-hardware indoor air sensor (CO2, VOC/NOx, T/RH, light, sound): HAT for Raspberry Pi or standalone with Seeed XIAO + ESPHome. KiCad 10.

Chicken-Fried/Cave-Uno
Modernized Arduino Uno R3 compatible board powered by Microchip ATmega328PB. Features driverless USB-C, 1.5A sync buck, ideal-diode OR-ing, dual I2C/SPI/UART, and LiDAR topographic artwork.

rein-baremetal/REIN_R1_KiCad
Dual-MCU baremetal embedded development board featuring high-speed QSPI storage, hardware USB hub, and flexible power management. Open for PCB trace routing collaboration

planmarks/2FAK
2FAK Programmable USB and 2-Factor Authentication Key