Know what’s on your board
Plug in a microcontroller and HardwareContext reads every bus and pin on it, then hands you a clean report to paste into any AI chat. It probes hardware and formats text. That is all it does.
On a laptop you don't control, or want it running natively instead of in a browser tab? Download the desktop app.
Open boards work free, forever. No key, no account, no check.
It reads the board, not a description of it
Everything below is a measurement taken over the wire. Where a part can prove its identity, the report says confirmed. Where it cannot, you get the raw bytes and an honest label.
I2C
0x08 – 0x77
Every address on the bus, then a read of the identity register on parts that publish one. A device that confirms itself is reported as confirmed. One that cannot is reported with its raw bytes instead of a guess.
GPIO
20 pins
Each pin is read twice, once pulled up and once pulled down. A pin that follows the pull has nothing on it. A pin that refuses to move has something holding it, and that difference is the whole point.
ADC
12 channels
Analog-capable pins report calibrated millivolts, so a half-scale reading arrives as 2.100 V rather than 2606 counts.
OneWire
ROM read
Reads the 64-bit ROM code and resolves the family byte, which is how a DS18B20 announces itself.
UART
9600 · 115200
Listens on the spare hardware UART at the rates hobby modules ship with, and reports anything that arrives unprompted.
Three steps, once
Flashing the sketch is a one-time job. After that, scanning is two clicks whenever you rewire something.
- 01
Flash the sketch
Open hardwarecontext_esp32.ino in the Arduino IDE and upload it to your ESP32. Nothing to install — it uses the core only.
- 02
Plug the board in
Leave your project wired up as it is. The scanner wants to see what you actually built, not a bare board.
- 03
Scan and paste
Pick the port when Chrome asks, then copy the report into Claude, ChatGPT, or whatever you use. The prompt is already on it.
Adding a board is one file
Every board lives as a definition with a signature, a pin map and an ADC list. Copy the nearest one, edit the pins, and it works. No rewrite, no plugin system to learn.
ESP32-WROOM-32
ESP32-D0WDQ6 (Xtensa LX6 dual-core)
20 pins · 12 ADC · SDA 21 / SCL 22
ESP32-S3
ESP32-S3 (Xtensa LX7 dual-core)
19 pins · 10 ADC · SDA 8 / SCL 9
ESP32-C3
ESP32-C3 (RISC-V single-core)
12 pins · 5 ADC · SDA 8 / SCL 9
ESP8266 (NodeMCU / Wemos D1)
Tensilica L106
8 pins · 1 ADC · SDA 4 / SCL 5
Arduino Uno / Nano
ATmega328P
12 pins · 6 ADC · SDA 18 / SCL 19
Arduino Mega 2560
ATmega2560
24 pins · 8 ADC · SDA 20 / SCL 21
Raspberry Pi Pico
RP2040 (dual Cortex-M0+)
26 pins · 3 ADC · SDA 4 / SCL 5
STM32 Blue Pill
STM32F103C8T6 (Cortex-M3)
16 pins · 8 ADC · SDA 7 / SCL 6
ESP32-S2
ESP32-S2 (Xtensa LX7 single-core)
31 pins · 18 ADC · SDA 8 / SCL 9
ESP32-C6
ESP32-C6 (RISC-V single-core)
16 pins · 7 ADC · SDA 6 / SCL 7
ESP32-H2
ESP32-H2 (RISC-V single-core)
16 pins · 5 ADC · SDA 12 / SCL 13
Arduino Leonardo / Micro
ATmega32U4
12 pins · 11 ADC · SDA 2 / SCL 3
Arduino Nano Every
ATmega4809 (megaAVR 0-series)
12 pins · 8 ADC · SDA 18 / SCL 19
Arduino Due
AT91SAM3X8E (Cortex-M3)
50 pins · 12 ADC · SDA 20 / SCL 21
Raspberry Pi Pico 2
RP2350 (dual Cortex-M33 / dual Hazard3)
26 pins · 3 ADC · SDA 4 / SCL 5
Teensy 4.0
IMXRT1062 (Cortex-M7)
23 pins · 10 ADC · SDA 18 / SCL 19
STM32F401 Black Pill
STM32F401CCU6 (Cortex-M4)
15 pins · 8 ADC · SDA 9 / SCL 8
Arduino Zero / SAMD21
ATSAMD21G18 (Cortex-M0+)
12 pins · 8 ADC · SDA 20 / SCL 21
ATtiny85
ATtiny85
5 pins · 3 ADC · SDA 0 / SCL 2
Arduino Nano 33 BLE
nRF52840 (Cortex-M4F)
12 pins · 6 ADC · SDA 31 / SCL 2
The ESP32 sketch ships today. The rest are defined in the registry and land as their firmware is written.