Programmatically generate Raspberry Pi GPIO connection diagrams
Project description
PinViz
Programmatically generate beautiful Raspberry Pi GPIO connection diagrams in SVG format.
PinViz makes it easy to create clear, professional wiring diagrams for your Raspberry Pi projects. Define your connections using simple YAML/JSON files or Python code, and automatically generate publication-ready SVG diagrams.
Features
- Declarative Configuration: Define diagrams using YAML or JSON
- Programmatic API: Create diagrams with Python code
- Automatic Wire Routing: Smart wire routing with configurable styles (orthogonal, curved, mixed)
- Inline Components: Add resistors, capacitors, and diodes directly on wires
- Color-Coded Wires: Automatic color assignment based on pin function (I2C, SPI, power, ground, etc.)
- Built-in Templates: Pre-configured boards (Raspberry Pi 5) and common devices (BH1750, IR LED rings, etc.)
- GPIO Pin Reference: Optional GPIO pinout diagram for easy reference
- SVG Output: Scalable, high-quality vector graphics
Installation
Using uv (recommended):
uv add pinviz
Using pip:
pip install pinviz
Quick Start
Using YAML Configuration
Create a configuration file my-diagram.yaml:
title: "BH1750 Light Sensor Wiring"
board: "raspberry_pi_5"
devices:
- type: "bh1750"
name: "BH1750"
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"
show_gpio_diagram: true # Optional: include GPIO pin reference
Generate the diagram:
pinviz my-diagram.yaml -o output.svg
Using Python API
from pinviz import boards, devices, Connection, Diagram, SVGRenderer
# Create board and device
board = boards.raspberry_pi_5()
sensor = devices.bh1750_light_sensor()
# Define connections
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
]
# Create and render diagram
diagram = Diagram(
title="BH1750 Light Sensor Wiring",
board=board,
devices=[sensor],
connections=connections,
show_gpio_diagram=True # Optional: include GPIO pin reference
)
renderer = SVGRenderer()
renderer.render(diagram, "output.svg")
Custom Wire Colors
Use the WireColor enum for standard electronics wire colors:
from pinviz import (
boards, devices, Connection, Diagram, SVGRenderer, WireColor
)
# Define connections with custom colors
connections = [
Connection(1, "BH1750", "VCC", color=WireColor.RED),
Connection(6, "BH1750", "GND", color=WireColor.BLACK),
Connection(5, "BH1750", "SCL", color=WireColor.BLUE),
Connection(3, "BH1750", "SDA", color=WireColor.GREEN),
]
# Or use hex colors directly
connections = [
Connection(1, "BH1750", "VCC", color="#FF0000"), # Red
]
Available colors: RED, BLACK, WHITE, GREEN, BLUE, YELLOW, ORANGE, PURPLE, GRAY, BROWN, PINK, CYAN, MAGENTA, LIME, TURQUOISE
CLI Commands
Render a Diagram
# From YAML/JSON file
pinviz my-diagram.yaml -o output.svg
# Short form (output defaults to <config>.svg)
pinviz my-diagram.yaml
Example Diagrams
LED with Resistor
Simple LED circuit with inline current-limiting resistor:
Multi-Device Setup
BH1750 light sensor + IR LED ring with custom wire colors:
Traffic Light
Three LEDs with individual resistors:
Generate Built-in Examples
# BH1750 light sensor
pinviz example bh1750 -o bh1750.svg
# IR LED ring
pinviz example ir_led -o ir_led.svg
# Multiple I2C and SPI devices
pinviz example i2c_spi -o i2c_spi.svg
List Available Templates
pinviz list
Configuration Reference
Diagram Options
show_gpio_diagram: true # Include GPIO pin reference (default: false)
The GPIO pin reference diagram displays all 40 GPIO pins with their functions, providing a helpful reference when wiring your project.
Board Selection
Currently supported boards:
raspberry_pi_5(aliases:rpi5,rpi)
Built-in Device Types
bh1750- BH1750 I2C light sensorir_led_ring- IR LED ring modulei2c_device- Generic I2C devicespi_device- Generic SPI deviceled- Simple LEDbutton- Push button/switch
Connection Configuration
Connections use physical pin numbers (1-40), not BCM GPIO numbers:
connections:
- board_pin: 1 # Physical pin number (required)
device: "Device Name" # Device name (required)
device_pin: "VCC" # Device pin name (required)
color: "#FF0000" # Custom wire color (optional)
style: "mixed" # Wire style: orthogonal, curved, mixed (optional)
components: # Inline components (optional)
- type: "resistor"
value: "220Ω"
position: 0.55 # Position along wire (0.0-1.0, default: 0.55)
Inline Components
Add resistors, capacitors, or diodes directly on wire connections:
connections:
- board_pin: 11
device: "Red LED"
device_pin: "+"
color: "#FF0000"
components:
- type: "resistor" # Component type: resistor, capacitor, diode
value: "220Ω" # Display value (required)
position: 0.55 # Position along wire path (0.0 = board, 1.0 = device)
Python API:
from pinviz import Component, ComponentType, Connection
connection = Connection(
board_pin=11,
device_name="Red LED",
device_pin_name="+",
color="#FF0000",
components=[
Component(
type=ComponentType.RESISTOR,
value="220Ω",
position=0.55
)
]
)
Custom Devices
Define custom devices inline:
devices:
- name: "My Custom Sensor"
width: 80.0
height: 50.0
color: "#4A90E2"
pins:
- name: "VCC"
role: "3V3"
position: {x: 5.0, y: 10.0}
- name: "GND"
role: "GND"
position: {x: 5.0, y: 20.0}
- name: "SDA"
role: "I2C_SDA"
position: {x: 5.0, y: 30.0}
- name: "SCL"
role: "I2C_SCL"
position: {x: 5.0, y: 40.0}
Pin Roles
Supported pin roles (for automatic color assignment):
3V3,5V- Power railsGND- GroundGPIO- General purpose I/OI2C_SDA,I2C_SCL- I2C busSPI_MOSI,SPI_MISO,SPI_SCLK,SPI_CE0,SPI_CE1- SPI busUART_TX,UART_RX- UART serialPWM- PWM output
Development
Setup
# Clone repository
git clone https://gitlab.com/borkempire/pinviz.git
cd pinviz
# Install dependencies
uv sync --dev
Code Quality
# Lint and format
uv run ruff check .
uv run ruff format .
# Run tests
uv run pytest
Examples
The examples/ directory contains:
bh1750.yaml/bh1750_python.py- I2C light sensorbh1750_ir_led.yaml/bh1750_ir_led_python.py- Light sensor + IR LED ringled_with_resistor.yaml/led_with_resistor_python.py- LED with inline resistortraffic_light.yaml- Traffic light with 3 LEDs and resistors
All generated diagrams are in the images/ directory.
License
MIT License - See LICENSE file for details
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Credits
Board and GPIO pin SVG assets courtesy of FreeSVG.org
Author
Even Nordstad
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pinviz-0.1.2.tar.gz.
File metadata
- Download URL: pinviz-0.1.2.tar.gz
- Upload date:
- Size: 30.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb68aabfb3b3ccc692c74dbd65a030790c5218740d3754e054d9402185d20f0f
|
|
| MD5 |
44109f9a5d3f7eaf16204e61141b09a1
|
|
| BLAKE2b-256 |
df041a0cef8591ccfc1144eaa28bf001ce8c66ded1330679df93355f10227c5e
|
File details
Details for the file pinviz-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pinviz-0.1.2-py3-none-any.whl
- Upload date:
- Size: 36.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ba5ca6f15c46fb25e2a7d86a0e6c951b0f960fa3cf89d2eb6458a89f548a6a3
|
|
| MD5 |
61bbc71ee3fe22e33eae5159f1905ccd
|
|
| BLAKE2b-256 |
69b2d5330f85d0eae346c534240bc2c152a190e9690cd3021353f34572134e7c
|