Skip to main content

Programmatically generate Raspberry Pi GPIO connection diagrams

Project description

PinViz

PinViz Logo

CI Coverage Documentation License: MIT Python 3.12+ PyPI version PyPI Downloads

Programmatically generate beautiful GPIO connection diagrams for Raspberry Pi and ESP32/ESP8266 boards in SVG format.

PinViz makes it easy to create clear, professional wiring diagrams for your microcontroller projects. Define your connections using simple YAML/JSON files or Python code, and automatically generate publication-ready SVG diagrams.

Example Diagram

BH1750 Light Sensor Wiring Diagram

→ See more examples

Features

  • 📝 Declarative Configuration: Define diagrams using YAML or JSON files
  • 🎨 Automatic Wire Routing: Smart wire routing with configurable styles (orthogonal, curved, mixed)
  • 🎯 Color-Coded Wires: Automatic color assignment based on pin function (I2C, SPI, power, ground, etc.)
  • Inline Components: Add resistors, capacitors, and diodes directly on wires
  • 🔌 Built-in Templates: Pre-configured boards (Raspberry Pi, ESP32, ESP8266) and common devices
  • 🐍 Python API: Create diagrams programmatically with Python code
  • 🤖 MCP Server: Generate diagrams from natural language with AI assistants
  • 🌙 Dark Mode: Built-in light and dark themes for better visibility
  • 📦 SVG Output: Scalable, high-quality vector graphics
  • Modern CLI: Rich terminal output with progress indicators and colored messages
  • 🔧 JSON Output: Machine-readable output for CI/CD integration

Multi-Level Device Support ✨

New in v0.11.0: PinViz now supports device-to-device connections, enabling complex multi-level wiring diagrams!

What's New

  • Connect devices to other devices (not just to the board)
  • Automatic horizontal tier layout based on connection depth
  • Supports power distribution chains, sensor chains, motor controllers, and more
  • Backward compatible with existing configurations

Example: Power Distribution Chain

connections:
  # Board to regulator
  - from: {board_pin: 2}
    to: {device: "Regulator", device_pin: "VIN"}

  # Regulator to LED (device-to-device!)
  - from: {device: "Regulator", device_pin: "VOUT"}
    to: {device: "LED", device_pin: "VCC"}

See examples/multi_level_simple.yaml for a complete example.

Dark Mode 🌙

Generate diagrams optimized for dark backgrounds. Perfect for documentation displayed in dark themes.

title: "My Diagram"
board: "raspberry_pi_5"
theme: "dark"  # or "light" (default)
devices: [...]
connections: [...]

Or use the CLI flag:

pinviz render diagram.yaml --theme dark -o output.svg

See examples/bh1750_dark.yaml for a complete example.

Supported Boards

Board Aliases GPIO Pins Description
Raspberry Pi 5 raspberry_pi_5, rpi5, rpi 40-pin Latest Raspberry Pi with improved GPIO capabilities
Raspberry Pi 4 raspberry_pi_4, rpi4 40-pin Popular Raspberry Pi model with full GPIO header
Raspberry Pi Pico raspberry_pi_pico, pico 40-pin (dual-sided) RP2040-based microcontroller board
ESP32 DevKit V1 esp32_devkit_v1, esp32, esp32_devkit 30-pin (dual-sided) ESP32 development board with WiFi/Bluetooth
ESP8266 NodeMCU esp8266_nodemcu, esp8266, nodemcu 30-pin (dual-sided) ESP8266 WiFi development board
Wemos D1 Mini wemos_d1_mini, d1mini, wemos 16-pin (dual-sided) Compact ESP8266 development board

All boards include full pin definitions with GPIO numbers, I2C, SPI, UART, and PWM support.

Installation

Install as a standalone tool with global CLI access:

uv tool install pinviz

Or as a project dependency:

# Using uv
uv add pinviz

# Using pip
pip install pinviz

Quick Start

PinViz Quick Demo

Try a Built-in Example

# Generate a BH1750 light sensor wiring diagram
pinviz example bh1750 -o bh1750.svg

# See all available examples
pinviz list

Create Your Own Diagram

Create a YAML configuration file (my-diagram.yaml):

title: "BH1750 Light Sensor Wiring"
board: "raspberry_pi_5"

devices:
  - type: "bh1750"
    name: "BH1750"
    color: "turquoise"  # Named color support (or use hex: "#50E3C2")

connections:
  - board_pin: 1     # 3V3
    device: "BH1750"
    device_pin: "VCC"

  - board_pin: 6     # GND
    device: "BH1750"
    device_pin: "GND"

  - board_pin: 5     # GPIO3 (I2C SCL)
    device: "BH1750"
    device_pin: "SCL"

  - board_pin: 3     # GPIO2 (I2C SDA)
    device: "BH1750"
    device_pin: "SDA"

Generate your diagram:

pinviz render my-diagram.yaml -o output.svg

Python API

from pinviz import boards, devices, Connection, Diagram, SVGRenderer

board = boards.raspberry_pi_5()
sensor = devices.bh1750_light_sensor()

connections = [
    Connection(1, "BH1750", "VCC"),  # 3V3 to VCC
    Connection(6, "BH1750", "GND"),  # GND to GND
    Connection(5, "BH1750", "SCL"),  # GPIO3/SCL to SCL
    Connection(3, "BH1750", "SDA"),  # GPIO2/SDA to SDA
]

diagram = Diagram(
    title="BH1750 Light Sensor",
    board=board,
    devices=[sensor],
    connections=connections
)

renderer = SVGRenderer()
renderer.render(diagram, "output.svg")

CLI Commands Examples

PinViz provides a modern CLI

Rendering Diagrams

# Generate diagram from YAML config
pinviz render examples/bh1750.yaml -o output.svg

Validation

# Validate diagram configuration
pinviz validate examples/bh1750.yaml

List Templates

# List all boards, devices, and examples
pinviz list

MCP Server (AI-Powered)

PinViz includes an MCP (Model Context Protocol) server that enables natural language diagram generation through AI assistants like Claude Desktop. Generate diagrams with prompts like "Connect a BME280 temperature sensor to my Raspberry Pi 5" with intelligent pin assignment, automatic I2C bus sharing, and conflict detection.

→ Full MCP documentation

Documentation

Full documentation: nordstad.github.io/PinViz

Contributing

Contributions are welcome! Please see our Contributing Guide for details.

Adding new devices: See guides/DEVICE_CONFIG_GUIDE.md for device configuration details.

License

MIT License - See LICENSE file for details

Credits

Board and GPIO pin SVG assets courtesy of Wikimedia Commons

Author

Even Nordstad

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pinviz-0.16.0.tar.gz (449.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pinviz-0.16.0-py3-none-any.whl (492.0 kB view details)

Uploaded Python 3

File details

Details for the file pinviz-0.16.0.tar.gz.

File metadata

  • Download URL: pinviz-0.16.0.tar.gz
  • Upload date:
  • Size: 449.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pinviz-0.16.0.tar.gz
Algorithm Hash digest
SHA256 0e3839e5797143edc65222aa0fa948d8669f30ebe655183cb50ebac07f721fe3
MD5 6984312d4fdc2ff78d682632c9cb9d55
BLAKE2b-256 c892d90486223427522d024805bd64f116959cf1589dc6e96880c4a669593876

See more details on using hashes here.

File details

Details for the file pinviz-0.16.0-py3-none-any.whl.

File metadata

  • Download URL: pinviz-0.16.0-py3-none-any.whl
  • Upload date:
  • Size: 492.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pinviz-0.16.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3a1a1625d691f5a4e029870072fbc9ef8ffeb25713de86106dbd5fa80954aa2c
MD5 d3e9de3fa257aa314634e3148a58a9e1
BLAKE2b-256 26545ccce362500583eba12ecdbedfa87a03babe5ccb818d767ca191d5954135

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page