Compute
| Property | Value |
| Board | Raspberry Pi Pico 2 W |
| Microcontroller | RP2350 (dual-core Arm Cortex-M33) |
| Flash | 4 MB onboard |
| SRAM | 520 KB |
| OTP | 8 KB (customer data region used for key storage) |
| Wireless | Infineon CYW43439 - 2.4 GHz Wi-Fi, Bluetooth 5.2 |
| Runtime | MicroPython (custom build with machine.OTP C module) |
Peripherals
| Component | Interface | Pins |
| OLED display | I²C | GP2, GP3 |
| Buzzer | PWM | GP15 |
| Pico UPS B (INA219) | I²C0 | GP6, GP7 |
| Battery | - | 600 mAh Li-po |
Power
| Property | Value |
| Input | 5V via Micro-USB |
| Adapter | Any standard 5V USB wall adapter |
| Battery backup | 600 mAh Li-po via Pico UPS B |
| Battery monitor | INA219 - voltage, current, power, charge percentage |
Network
| Property | Value |
| Wi-Fi | 2.4 GHz (CYW43439) |
| Hostname | heron.local (mDNS) |
| DNS server | UDP 53, transparent forward to 1.1.1.1 / 8.8.8.8 |
| HTTP API | :8080, CORS *, no authentication |
| USB provisioning | CDC/ACM at 115200 baud, newline-delimited JSON |
Cryptographic identity
| Property | Value |
| Curve | NIST P-256 (secp256r1) |
| Signature | ECDSA with SHA-256 |
| Certificate format | Binary, fixed layout (sigLen ‖ sig ‖ serial ‖ pubKey) |
| Key storage | RP2350 OTP (primary), /keys.bin flash file (fallback) |
| OTP layout | 254 bytes - priv(32) ‖ pub(65) ‖ serial(8) ‖ cert(148) ‖ magic(1) |
| Signing time | ~3 seconds on RP2350 (pure Python) |
| Browser verification | Web Crypto SubtleCrypto, no dependencies |
Software stack
| Component | Stack |
| Firmware | MicroPython, main.py + lib/ |
| Onboarding PWA | SvelteKit 5 + TypeScript, static adapter, GitHub Pages |
| Dashboard | SvelteKit 5 + TypeScript, static adapter, local |
| CLI | Python 3.8+ standard library only, zero dependencies |
| Manufacturing | Python, cryptography, mpremote |
Browser compatibility
| Browser | Setup (WebSerial) | Dashboard (HTTP) |
| Chrome | Supported | Supported |
| Edge | Supported | Supported |
| Safari | Not supported (no WebSerial) | Supported |
| Firefox | Not supported (no WebSerial) | Supported |
Free GPIO
GP16–GP19 are free for future use. The MicroSD adapter on SPI0 was in the original pinout but never used in firmware and was removed from the BOM on 2026-06-18.
Hardware revisions
| Revision | Change |
| MVP (current) | Breadboard. Pico 2 W with wired peripherals. No enclosure. |
| Production (planned) | PCB + enclosure. Summer packaging goal. |