A Raspberry Pi Pico 2–based network diagnostic tool with an integrated 2" LCD display.
A small handheld device that plugs into any computer's USB port and probes the host over a virtual network link. The Pico appears to the host as a composite USB device (CDC-NCM network adapter + HID + web portal), so it gets its own interface on the machine without needing any drivers or software installed. It then queries the host and displays what it can discover:
- Host identity — hostname, domain, and OS version (via an SMB2 negotiate exchange)
- Host MAC address and vendor lookup (via OUI database)
- Open TCP ports on the host
- SNMP info, where available
- A local web portal for deeper inspection
It does NOT report the host's real/public/LAN IP — only the IP the host assigned to the Pico's virtual USB interface. This is a diagnostic tool for identifying which machine you plugged into, not a network scanner of the wider network.
| Part | Model |
|---|---|
| MCU | Raspberry Pi Pico 2 (RP2350, USB device mode) |
| Display | Waveshare Pico-LCD-2 (2" IPS, 320×240, ST7789VW) |
| Case | 3D-printed, PLA |
| Screws | 2× M2 × 8 mm (LCD case ↔ Pico case tabs, self-tapped into PLA) |
.
├── README.md you are here
├── Documentation/ design + build docs
│ ├── 00-Project-Index.md project overview + status
│ ├── 01-Parts-List.md bill of materials
│ ├── 02-Architecture-Overview.md
│ │ USB gadget mode, host probing, data flow
│ ├── 03-Reference-Projects.md related prior art
│ ├── 04-Build-Plan.md phased build checklist
│ ├── 05-Dev-Environment-Setup.md
│ │ VS Code + Pico SDK toolchain setup
│ └── 06-Feature-Roadmap.md tier-1/2/3 feature plan
├── blink-test/ minimal "hello world" firmware
├── usb-net-firmware/ main firmware (TinyUSB + lwIP + CDC-NCM)
├── case/ printable STLs
│ ├── LCD_CASE.stl LCD case (Fusion 360)
│ ├── pico-case-lower-with-tabs.stl
│ │ Pico lower + integrated side tabs for
│ │ screwing the LCD case on top
│ └── Case_Upper_GOOD.3mf Pico case upper (unchanged from source)
└── tools/ measurement and analysis helpers
├── measure_lcd_stl.py auto-dimension any reference STL
├── capture_smb.py SMB2 packet capture helper
└── smb_info.py SMB2 host identity extractor
See Documentation/05-Dev-Environment-Setup.md. Summary:
# Install the Pico SDK (one-time, external to this repo)
# https://github.com/raspberrypi/pico-sdk
export PICO_SDK_PATH=/path/to/pico-sdk
cd usb-net-firmware
mkdir -p build && cd build
cmake -G Ninja -DPICO_BOARD=pico2 ..
ninja
# flash build/usb-net-firmware.uf2 onto the Pico 2Three STLs in case/:
| File | What |
|---|---|
LCD_CASE.stl |
LCD module holder (Fusion 360 rebuild) |
pico-case-lower-with-tabs.stl |
Pico case lower with integrated M2 side-mount tabs |
Case_Upper_GOOD.3mf |
Pico case upper, unchanged from the original |
Slice in Bambu Studio — PLA, 0.2 mm layers. Use tree supports for the LCD case tabs (they overhang). Assemble with 2× M2 × 8 mm screws through the aligned side tabs. For the self-tap holes in PLA, heat-drive a screw once to cut permanent threads.
- Pico 2 case — based on the Raspberry Pi Pico case designed by maximilliampere on Thingiverse: thing:4808999, licensed under CC BY-NC 4.0. The
Case_Upper_GOOD.3mfupper half is used unchanged from the original; the lower half was re-generated with added side mounting tabs (seepico-case-lower-with-tabs.stl) using OpenSCAD to combine the original mesh with new tab geometry. Full credit for the original Pico case design goes to maximilliampere. - LCD module — Waveshare Pico-LCD-2.
See LICENSE for the full text. Summary:
Everything in this repo is MIT-licensed — free to use, modify, distribute, and incorporate into commercial projects, with attribution and no warranty. This includes:
usb-net-firmware/andblink-test/(all C source and headers)tools/(Python scripts)Documentation/(design docs)case/LCD_CASE.stl(original work in Fusion 360)
Two files in case/ are derivatives of maximilliampere's Pico case and carry the original's CC BY-NC 4.0 license:
case/Case_Upper_GOOD.3mf— used unchangedcase/pico-case-lower-with-tabs.stl— derivative with added side tabs
Under CC BY-NC 4.0 you can share/adapt them for non-commercial use with attribution. Selling printed copies or including them in a commercial product is not permitted.