Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

USB-NET

A Raspberry Pi Pico 2–based network diagnostic tool with an integrated 2" LCD display.

Status

What it is

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.

Hardware

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)

Repository layout

.
├── 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

Building the firmware

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 2

Printing the case

Three 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.

Credits

  • 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.3mf upper half is used unchanged from the original; the lower half was re-generated with added side mounting tabs (see pico-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 moduleWaveshare Pico-LCD-2.

License

See LICENSE for the full text. Summary:

Firmware, tools, documentation, LCD case — MIT License

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/ and blink-test/ (all C source and headers)
  • tools/ (Python scripts)
  • Documentation/ (design docs)
  • case/LCD_CASE.stl (original work in Fusion 360)

Pico case files — CC BY-NC 4.0 (inherited)

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 unchanged
  • case/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.

About

Smoll network-scanner for network troubleshooting. Quick and efficent!

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages