
SeaTalk1
dotnet/iot
This repo includes .NET Core implementations for various IoT boards, chips, displays and PCBs.

ESP32-based physical status monitor — polls New Relic alerts and Azure DevOps deployments to drive a 4-segment stacklight
Stacklight is an open-source printed circuit board by AnthonyBrown-CPU, from the AnthonyBrown-CPU/Stacklight repository on GitHub. It is a 2-layer board of 64 × 64 mm with 24 parts on 42 nets, routed with 96 tracks and 0 vias.
It is built around the BC547 and BC557. Its parts include 8 resistors, 8 transistors and 8 connectors.
An ESP32-based physical status monitor that polls New Relic alert statuses and Azure DevOps deployment states, driving a 4-segment stacklight to provide an at-a-glance view of system health.

The ESP32 polls two data sources every 60 seconds:
alertSeverity across multiple APM entity GUIDs via NerdGraph (GraphQL). The worst-case severity across all entities determines the main light colour.| Condition | Light | Colour |
|---|---|---|
| No alerts | Green | On |
| Warning | Yellow | On |
| Critical | Red | On |
| WiFi / API error | Yellow | Flashing |
| Deployment in progress | Blue | On |
| Deployment overdue | Blue | Flashing |
| Component | Value / Part | Notes |
|---|---|---|
| Microcontroller | ESP32-WROOM-32D Dev Board | Standard 30-pin DevKit |
| Transistor (NPN) | BC547 x4 | Low-side driver |
| Transistor (PNP) | BC557 x4 | High-side driver |
| Resistors | 10KΩ x8 | Base resistors for transistor pairs |
| Buck Converter | MP1584 (fixed 5V) | 12V → 5V for ESP32 |
| Power Input | 12V DC Barrel Jack | PS0519 |
| Output Connector | 5-pin Screw Terminal | 5.08mm pitch, 55° entry |
| PCB | Custom, manufactured by JLCPCB | HASL lead-free surface finish |
Each segment draws approximately 46mA. Total current draw across all four channels is ~181mA.
| Screw Terminal Pin | Net | Stacklight Wire | GPIO |
|---|---|---|---|
| 1 | SL_R | Red | 12 |
| 2 | SL_Y | Yellow | 14 |
| 3 | SL_G | Green | 27 |
| 4 | SL_B | Blue | 26 |
| 5 | GND | Common Ground | — |
Pins are active high. GPIO12 is a strapping pin on the ESP32-WROOM-32D — it may briefly pulse during boot, which does not affect normal operation.
Each output channel uses a complementary BC547/BC557 transistor pair to level-shift the ESP32's 3.3V GPIO logic to the 12V stacklight supply. The MP1584 buck converter steps 12V down to 5V to power the ESP32. All grounds are common.
The PCB was designed in KiCad 10 and manufactured by JLCPCB. KiCad project files are in stacklight PCB/.
| Front | Back |
|---|---|
![]() | ![]() |
The enclosure was modelled in Autodesk Fusion and sliced with OrcaSlicer. STL files are in enclosure model/.
Built with PlatformIO using the Arduino framework for ESP32.
bblanchon/ArduinoJson@^7.2.2)platform-espressif32 via git)The firmware is split into focused modules, each with a corresponding unit test suite:
| Module | Responsibility |
|---|---|
Stacklight | LED state machine + ISR-based blink timer |
NewRelicMonitor | NerdGraph GraphQL polling; EU/US endpoint inferred from API key prefix |
AzureDevopsMonitor | ADO release deployments API; deployment timeout detection |
ConfigStore | NVS key-value store with OnChange callbacks |
SerialCommandParser | Runtime config updates via serial key=value commands |
PollingTimer | Reusable interval timer with injectable clock |
NtpSync | NTP time synchronisation |
Hardware dependencies are isolated behind IGpioHal and IHttpClient interfaces, making all modules unit testable without hardware.
Configuration is split into two categories:
Build-time constants (entity GUIDs, ADO org/project/pipeline IDs, pins, timeout) live in src/config.h, which is gitignored. Copy src/config.h.example to src/config.h and fill in your values before building.
Runtime credentials (WiFi SSID/password, New Relic API key, Azure DevOps PAT) are stored in ESP32 NVS flash and set via serial commands at any time after flashing:
ssid=YourNetwork
password=YourPassword
nr_key=NRAK-xxxxxxxxxxxx
ado_pat=your_ado_personal_access_tokenConnect at 115200 baud using the PlatformIO serial monitor or any terminal.
alertSeverity for each configured entity GUID — NOT_ALERTING, WARNING, or CRITICAL. Worst case across all entities drives the light colour.DEPLOY_TIMEOUT_MINUTES cause the blue light to flash.NRAK- prefix for US, eu01xx- prefix for EU)src/config.h and set the API key via serial (nr_key=your_key)src/config.h and set the PAT via serial (ado_pat=your_pat)Runtime credentials are stored in ESP32 NVS (non-volatile storage) flash, not in firmware. This means:
src/config.h (build-time constants) is gitignored — commit src/config.h.example insteadIf the device is decommissioned, revoke the New Relic API key and ADO PAT.
Unit tests run on-device using the Unity test framework via PlatformIO.
pio test -e test_esp32To run a single suite:
pio test -e test_esp32 --filter test_polling_timerAvailable suites: test_polling_timer, test_serial_parser, test_ado_monitor, test_nr_monitor, test_stacklight, test_config_store.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | R10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R2, R3, R4, R5, R6, R7, R8 |
| 4 | BC547 | Package_TO_SOT_THT:TO-92_Inline | Q1, Q4, Q6, Q8 |
| 4 | BC557 | Package_TO_SOT_THT:TO-92_Inline | Q2, Q3, Q5, Q7 |
| 4 | Conn_01x02_Pin | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J5, J6, J7, J8 |
| 2 | Conn_01x15 | Connector_PinHeader_2.54mm:PinHeader_1x15_P2.54mm_Vertical | J3, J4 |
| 1 | Barrel_Jack_MountingPin | Connector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_Horizontal | J1 |
| 1 | Screw_Terminal_01x05 | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-5-5.08_1x05_P5.08mm_Horizontal | J9 |
It measures 64 × 64 mm and has 2 copper layers, 1.6 mm thick.
24 parts, built around the BC547 and BC557. 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 AnthonyBrown-CPU/Stacklight repository on GitHub, at the commit this page was made from: the board is stacklight PCB/Stacklight.kicad_pcb and its schematic stacklight PCB/Stacklight.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask AnthonyBrown-CPU before reusing the design.

dotnet/iot
This repo includes .NET Core implementations for various IoT boards, chips, displays and PCBs.

robsonsmartins/usbflashprog
A memory device programmer (Flash/EPROM/E2PROM) board and software, connected to PC by USB port.



telec16/modular-synth
Little side project, don't expect much updates.

nodep/NovaBox
Circuit and PCB design of simple Bluetooth stereo receiver and amplifier

