
Readme Generator
- 71 installs
- 19 repo stars
- Updated May 26, 2026
- wedsamuel1230/arduino-skills
Helps with documentation tasks.
About
readme-generator is a Claude Code skill for documentation. It helps solo builders move faster with AI-assisted development.
- readme-generator
- Documentation
- AI-coding skill
Readme Generator by the numbers
- 71 all-time installs (skills.sh)
- +5 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #717 of 1,879 Documentation skills by installs in the Skillselion catalog
- Data as of Aug 1, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wedsamuel1230/arduino-skills --skill readme-generatorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 71 |
|---|---|
| repo stars | ★ 19 |
| Last updated | May 26, 2026 |
| Repository | wedsamuel1230/arduino-skills ↗ |
What it does
Helps with documentation tasks.
Files
README Generator
Creates professional, beginner-friendly README files for maker projects.
Resources
This skill includes bundled tools:
- scripts/generate_readme.py - Full README generator with wiring diagrams and templates
Quick Start
Interactive mode:
uv run --no-project scripts/generate_readme.py --interactiveQuick generation:
uv run --no-project scripts/generate_readme.py --project "Weather Station" --board "ESP32" --output README.mdScan existing project:
uv run --no-project scripts/generate_readme.py --scan /path/to/arduino/project --output README.mdWhen to Use
- "Help me document this project"
- "I want to share this on GitHub"
- "Write a README for my project"
- User has working project, needs documentation
- Before publishing to GitHub/Instructables
Information Gathering
Ask User For:
1. Project name and one-line description
2. What problem does it solve / why did you build it?
3. Main features (3-5 bullet points)
4. Hardware components used
5. Software libraries required
6. Any photos/videos/GIFs available?
7. License preference (MIT recommended for open source)
8. Target audience (beginners/intermediate/advanced)Auto-Extract From Code:
- Pin assignments from config.h
- Library includes
- WiFi/Bluetooth features
- Sensor types
---
README Template
Generate using this structure (based on awesome-readme best practices):
# 🎯 [Project Name]



> One-line description of what this project does and why it's useful.

## 📋 Table of Contents
- [Overview](#overview)
- [Features](#features)
- [Hardware Components](#hardware-components)
- [Wiring Diagram](#wiring-diagram)
- [Software Dependencies](#software-dependencies)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
- [Troubleshooting](#troubleshooting)
- [Contributing](#contributing)
- [License](#license)
- [Acknowledgments](#acknowledgments)
## 🔍 Overview
[2-3 paragraphs explaining:]
- What the project does
- Why you built it / what problem it solves
- Who it's for (target audience)
### Demo
[Embed video or GIF showing project in action]
## ✨ Features
- ✅ Feature 1 - brief description
- ✅ Feature 2 - brief description
- ✅ Feature 3 - brief description
- 🚧 Planned: Feature 4 (coming soon)
## 🔧 Hardware Components
| Component | Quantity | Purpose | Notes |
|-----------|----------|---------|-------|
| [MCU Board] | 1 | Main controller | [version/variant] |
| [Sensor 1] | 1 | [function] | [I2C address, etc.] |
| [Display] | 1 | User interface | [resolution] |
| ... | ... | ... | ... |
**Estimated Cost:** $XX-XX
### Where to Buy
- [Component 1](link) - Amazon/AliExpress
- [Component 2](link) - Adafruit/SparkFun
## 📐 Wiring Diagram

### Pin Connections
| MCU Pin | Component | Pin | Function |
|---------|-----------|-----|----------|
| GPIO21 | BME280 | SDA | I2C Data |
| GPIO22 | BME280 | SCL | I2C Clock |
| GPIO4 | LED | Anode | Status indicator |
| ... | ... | ... | ... |
## 💻 Software Dependencies
### Required Software
- [Arduino IDE](https://www.arduino.cc/en/software) (v2.0+) or [PlatformIO](https://platformio.org/)
- [Board package] - [installation link]
### Required Libraries
| Library | Version | Purpose | Install via |
|---------|---------|---------|-------------|
| [Library1] | >=1.0.0 | [function] | Library Manager |
| [Library2] | >=2.3.0 | [function] | Library Manager |
| ... | ... | ... | ... |
## 📦 Installation
### Option 1: Arduino IDE
1. **Install Arduino IDE**
- Download from [arduino.cc](https://www.arduino.cc/en/software)
2. **Add Board Support** (if using ESP32/RP2040)File → Preferences → Additional Board Manager URLs: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Then: Tools → Board → Boards Manager → Search "[board]" → Install
3. **Install Required Libraries**
- Sketch → Include Library → Manage Libraries
- Search and install each library from the table above
4. **Clone or Download This Repository**git clone https://github.com/[username]/[repo-name].git
Or download ZIP and extract
5. **Open the Project**
- Open `[project-name].ino` in Arduino IDE
### Option 2: PlatformIO (Recommended for Advanced Users)
1. Install [VS Code](https://code.visualstudio.com/) + [PlatformIO extension](https://platformio.org/install/ide?install=vscode)
2. Clone and open:git clone https://github.com/[username]/[repo-name].git cd [repo-name] code .
3. PlatformIO will automatically install dependencies from `platformio.ini`
## ⚙️ Configuration
Before uploading, customize `config.h`:
// === NETWORK SETTINGS === #define WIFI_SSID "your-wifi-name" #define WIFI_PASSWORD "your-wifi-password"
// === HARDWARE PINS === #define LED_PIN 4 #define SENSOR_SDA 21 #define SENSOR_SCL 22
// === FEATURE FLAGS === #define ENABLE_OLED true #define ENABLE_WIFI true #define DEBUG_MODE true
### Environment-Specific Settings
| Setting | Development | Production |
|---------|-------------|------------|
| DEBUG_MODE | true | false |
| SERIAL_BAUD | 115200 | 9600 |
| SLEEP_INTERVAL | 10s | 300s |
## 🚀 Usage
### Basic Operation
1. **Power On** - Connect USB or battery
2. **Wait for Boot** - Status LED blinks during initialization
3. **[Normal Operation]** - Description of what happens
### LED Status Indicators
| LED State | Meaning |
|-----------|---------|
| Solid Green | Normal operation |
| Blinking Blue | WiFi connecting |
| Red Flash | Error (check serial) |
### Serial Monitor
Open Serial Monitor at 115200 baud to see:[BOOT] Project Name v1.0.0 [INFO] Initializing sensors... [OK] BME280 found at 0x76 [INFO] Connecting to WiFi... [OK] Connected: 192.168.1.100 [DATA] Temp: 23.5°C, Humidity: 45%
### Web Interface (if applicable)
Navigate to `http://[device-ip]` to access:
- Real-time sensor readings
- Configuration panel
- Data export
## ❓ Troubleshooting
### Common Issues
<details>
<summary><b>Upload fails: "Failed to connect"</b></summary>
**ESP32:** Hold BOOT button while clicking Upload, release when "Connecting..." appears.
**Arduino:** Check correct COM port selected in Tools → Port.
</details>
<details>
<summary><b>Sensor not detected</b></summary>
1. Check wiring (SDA/SCL not swapped?)
2. Run I2C scanner sketch to verify address
3. Add pull-up resistors (4.7kΩ) if not on module
4. Check voltage compatibility (3.3V vs 5V)
</details>
<details>
<summary><b>WiFi won't connect</b></summary>
1. Verify SSID/password in config.h (case-sensitive!)
2. 2.4GHz only (ESP32 doesn't support 5GHz)
3. Check router isn't blocking new devices
4. Try moving closer to router
</details>
<details>
<summary><b>Random resets</b></summary>
1. Power supply too weak - use 500mA+ source
2. Add 100µF capacitor near MCU
3. Check for short circuits
4. Disable brownout detector (ESP32)
</details>
### Still Stuck?
1. Check [Issues](https://github.com/[username]/[repo]/issues) for similar problems
2. Open a new issue with:
- Hardware setup (board, sensors)
- Error messages (full serial output)
- Steps to reproduce
## 🤝 Contributing
Contributions are welcome! Here's how:
### Reporting Bugs
1. Check existing issues first
2. Use the bug report template
3. Include serial output and hardware details
### Suggesting Features
1. Open an issue with `[Feature Request]` prefix
2. Describe use case and expected behavior
### Pull Requests
1. Fork the repository
2. Create a feature branch: `git checkout -b feature/amazing-feature`
3. Make your changes
4. Test thoroughly
5. Commit: `git commit -m 'Add amazing feature'`
6. Push: `git push origin feature/amazing-feature`
7. Open a Pull Request
### Code Style
- Use meaningful variable names
- Comment complex logic
- Follow existing formatting
- Test on actual hardware before PR
## 📄 License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
MIT License
Copyright (c) [year] [author]
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
## 🙏 Acknowledgments
- [Library/Project] - for [what it provides]
- [Person/Tutorial] - inspiration/guidance
- [Community] - testing and feedback
## 📬 Contact
**[Your Name]** - [@twitter_handle](https://twitter.com/handle) - email@example.com
Project Link: [https://github.com/[username]/[repo-name]](https://github.com/[username]/[repo-name])
---
⭐ If this project helped you, please give it a star!---
Section Guidelines
Good vs Bad Examples
Project Description:
❌ Bad: "An Arduino project with sensors"
✅ Good: "Battery-powered environmental monitor that tracks temperature,
humidity, and air quality, sending alerts when thresholds are exceeded"Features:
❌ Bad: "Has WiFi"
✅ Good: "📶 WiFi connectivity with automatic reconnection and OTA updates"Installation Steps:
❌ Bad: "Install the libraries and upload"
✅ Good: Step-by-step with screenshots, version numbers, exact menu pathsVisual Assets
Recommended:
- Project photo (hero image)
- Wiring diagram (Fritzing or hand-drawn)
- Demo GIF (< 5MB, 10-15 seconds)
- Schematic (KiCad export)
Creating GIFs:
- Use ScreenToGif (Windows) or Peek (Linux)
- Optimize with ezgif.com
- Keep under 5MB for GitHub
Badges
<!-- Status badges -->



<!-- Platform badges -->



<!-- Social badges -->

---
File Structure Recommendation
project-name/
├── README.md # Main documentation
├── LICENSE # MIT license file
├── .gitignore # Ignore build files
├── src/
│ ├── main.ino # Main sketch
│ └── config.h # User configuration
├── lib/ # Local libraries (optional)
├── docs/
│ ├── WIRING.md # Detailed wiring guide
│ ├── API.md # API documentation (if applicable)
│ └── CHANGELOG.md # Version history
├── images/
│ ├── project-photo.jpg
│ ├── wiring-diagram.png
│ └── demo.gif
├── hardware/ # PCB/enclosure files (optional)
│ ├── schematic.pdf
│ └── enclosure.stl
└── examples/ # Additional example sketches
└── basic/---
Quick README Checklist
Before publishing, verify:
□ Project name is clear and memorable
□ One-line description explains the "what" and "why"
□ Hero image/GIF shows project in action
□ All hardware components listed with links
□ Wiring diagram included
□ All libraries listed with versions
□ Step-by-step installation instructions
□ Configuration section explains all settings
□ Usage section shows expected output
□ Troubleshooting covers common issues
□ License file present
□ Contact information included
□ No broken links
□ Spelling/grammar checked{
"name": "readme-generator",
"metadata": {
"description": "Generates professional README.md files for Arduino/ESP32/RP2040 projects. Use when user needs documentation, wants to publish a project to GitHub, or asks for help writing a README. Creates structured docs with installation, usage, hardware setup, and troubleshooting sections.",
"version": "0.8.0",
"license": "MIT",
"author": "arduino-skills contributors",
"tags": ["documentation", "readme", "github", "project-publishing", "maker"],
"category": "maker-tools"
},
"plugins": [
{
"name": "readme-generator",
"description": "Generate professional README.md files with installation, usage, and troubleshooting sections",
"enabled": true
}
]
}
#!/usr/bin/env python3
"""
README Generator - Creates professional README.md for Arduino/maker projects
Analyzes project structure and generates documentation including:
- Project description
- Hardware requirements
- Wiring diagrams (ASCII)
- Installation instructions
- Usage examples
- License
Usage:
uv run --no-project scripts/generate_readme.py --interactive
uv run --no-project scripts/generate_readme.py --project "Weather Station" --board "ESP32"
uv run --no-project scripts/generate_readme.py --scan /path/to/project
"""
import argparse
import os
import re
from datetime import datetime
from dataclasses import dataclass, field
from typing import List, Optional, Dict
# =============================================================================
# Templates
# =============================================================================
README_TEMPLATE = '''# {project_name}
{badges}
{description}
## 📋 Features
{features}
## 🔧 Hardware Required
{hardware_list}
### Wiring Diagram
{wiring_diagram}
## 📦 Dependencies
{dependencies}
## 🚀 Installation
{installation}
## 📖 Usage
{usage}
## ⚙️ Configuration
{configuration}
## 🐛 Troubleshooting
{troubleshooting}
## 📄 License
{license}
---
{footer}
'''
ASCII_WIRING_TEMPLATES = {
"i2c": '''```
{board}
┌──────────┐
│ VIN 5V │─────────────┐
│ GND │───────────┐ │
│ SDA {sda} │────────┐ │ │
│ SCL {scl} │──────┐ │ │ │
└──────────┘ │ │ │ │
│ │ │ │
{device} │ │ │ │
┌──────────────┐ │ │ │ │
│ VCC │──────────────────┼─┼─┼─┘
│ GND │──────────────────┼─┼─┘
│ SDA │──────────────────┼─┘
│ SCL │──────────────────┘
└──────────────┘
```''',
"spi": '''```
{board}
┌──────────┐
│ VIN 5V │─────────────┐
│ GND │───────────┐ │
│ MOSI {mosi}│────────┐ │ │
│ MISO {miso}│──────┐ │ │ │
│ SCK {sck}│────┐ │ │ │ │
│ CS {cs}│──┐ │ │ │ │ │
└──────────┘ │ │ │ │ │ │
│ │ │ │ │ │
{device} │ │ │ │ │ │
┌──────────────┐ │ │ │ │ │ │
│ VCC │──────────────┼─┼─┼─┼─┼─┘
│ GND │──────────────┼─┼─┼─┼─┘
│ DIN/MOSI │──────────────┼─┼─┼─┘
│ DOUT/MISO │──────────────┼─┼─┘
│ CLK/SCK │──────────────┼─┘
│ CS/SS │──────────────┘
└──────────────┘
```''',
"simple_led": '''```
{board} LED + Resistor
┌──────────┐
│ Pin {pin} │─────────┬─────[{resistor}Ω]────►├──
│ GND │─────────┴────────────────────────┘
└──────────┘
```''',
"servo": '''```
{board} Servo
┌──────────┐ ┌────────┐
│ VIN 5V │─────────│ Red │
│ GND │─────────│ Brown │
│ Pin {pin} │─────────│ Orange │
└──────────┘ └────────┘
```''',
"generic": '''```
Connections:
{connections}
```'''
}
BOARD_PINOUTS = {
"Arduino Uno": {"sda": "A4", "scl": "A5", "mosi": "11", "miso": "12", "sck": "13"},
"Arduino Nano": {"sda": "A4", "scl": "A5", "mosi": "11", "miso": "12", "sck": "13"},
"Arduino Mega": {"sda": "20", "scl": "21", "mosi": "51", "miso": "50", "sck": "52"},
"ESP32": {"sda": "21", "scl": "22", "mosi": "23", "miso": "19", "sck": "18"},
"ESP8266": {"sda": "D2", "scl": "D1", "mosi": "D7", "miso": "D6", "sck": "D5"},
"Raspberry Pi Pico": {"sda": "GP4", "scl": "GP5", "mosi": "GP19", "miso": "GP16", "sck": "GP18"},
}
@dataclass
class ProjectInfo:
"""Project information"""
name: str = "My Arduino Project"
description: str = "An Arduino-based project."
board: str = "Arduino Uno"
features: List[str] = field(default_factory=list)
hardware: List[Dict] = field(default_factory=list)
libraries: List[str] = field(default_factory=list)
wiring_type: str = "generic"
connections: List[Dict] = field(default_factory=list)
license: str = "MIT"
author: str = ""
version: str = "1.0.0"
def scan_ino_file(filepath: str) -> Dict:
"""Scan .ino file for libraries and pin definitions"""
info = {
"libraries": [],
"pins": [],
"functions": []
}
try:
with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()
except:
return info
# Find includes
includes = re.findall(r'#include\s*[<"]([^>"]+)[>"]', content)
info["libraries"] = [inc.replace('.h', '') for inc in includes]
# Find pin definitions
pin_defs = re.findall(r'(?:const\s+int|#define)\s+(\w*(?:PIN|LED|BTN|BUTTON|SERVO|MOTOR)\w*)\s*[=\s]+(\d+)',
content, re.IGNORECASE)
info["pins"] = [(name, num) for name, num in pin_defs]
# Check for I2C usage
if 'Wire' in content or 'Wire.h' in str(includes):
info["uses_i2c"] = True
# Check for SPI usage
if 'SPI' in content or 'SPI.h' in str(includes):
info["uses_spi"] = True
return info
def generate_wiring_diagram(project: ProjectInfo) -> str:
"""Generate ASCII wiring diagram"""
pinout = BOARD_PINOUTS.get(project.board, BOARD_PINOUTS["Arduino Uno"])
if project.wiring_type == "i2c" and project.hardware:
device = project.hardware[0].get("name", "I2C Device")
return ASCII_WIRING_TEMPLATES["i2c"].format(
board=project.board,
device=device,
sda=pinout["sda"],
scl=pinout["scl"]
)
elif project.wiring_type == "spi" and project.hardware:
device = project.hardware[0].get("name", "SPI Device")
return ASCII_WIRING_TEMPLATES["spi"].format(
board=project.board,
device=device,
mosi=pinout["mosi"],
miso=pinout["miso"],
sck=pinout["sck"],
cs="10"
)
elif project.connections:
# Generic connection list
lines = []
for conn in project.connections:
lines.append(f" {project.board} {conn.get('from', '?')} ──── {conn.get('to', '?')} {conn.get('device', '')}")
return ASCII_WIRING_TEMPLATES["generic"].format(
connections="\n".join(lines)
)
return "_Add wiring diagram here_"
def generate_hardware_list(project: ProjectInfo) -> str:
"""Generate hardware requirements list"""
lines = [f"- 1x {project.board}"]
for hw in project.hardware:
qty = hw.get("qty", 1)
name = hw.get("name", "Component")
note = hw.get("note", "")
line = f"- {qty}x {name}"
if note:
line += f" ({note})"
lines.append(line)
# Add common items
lines.extend([
"- USB cable for programming",
"- Breadboard and jumper wires"
])
return "\n".join(lines)
def generate_dependencies(project: ProjectInfo) -> str:
"""Generate dependencies section"""
if not project.libraries:
return "No external libraries required."
lines = ["Install these libraries via Arduino Library Manager:"]
lines.append("")
for lib in project.libraries:
lines.append(f"- `{lib}`")
lines.extend([
"",
"**To install:**",
"1. Open Arduino IDE",
"2. Go to Sketch → Include Library → Manage Libraries",
"3. Search for each library and click Install"
])
return "\n".join(lines)
def generate_installation(project: ProjectInfo) -> str:
"""Generate installation instructions"""
return f'''1. **Clone or download** this repository
```bash
git clone https://github.com/yourusername/{project.name.lower().replace(" ", "-")}.git
```
2. **Open the project** in Arduino IDE
- File → Open → Select the `.ino` file
3. **Install required libraries** (see Dependencies section)
4. **Select your board**
- Tools → Board → {project.board}
5. **Select the port**
- Tools → Port → (select your Arduino's port)
6. **Upload the sketch**
- Click the Upload button (→) or press Ctrl+U'''
def generate_usage(project: ProjectInfo) -> str:
"""Generate usage instructions"""
return f'''1. Connect the hardware according to the wiring diagram
2. Upload the code to your {project.board}
3. Open Serial Monitor at 115200 baud
4. The system will start automatically
### Serial Commands
| Command | Description |
|---------|-------------|
| `status` | Show current status |
| `help` | List available commands |
_Customize this section based on your project's functionality._'''
def generate_readme(project: ProjectInfo) -> str:
"""Generate complete README"""
# Generate badges
badges = f" "
badges += f"}-green) "
badges += f""
# Generate features list
features = ""
if project.features:
features = "\n".join(f"- ✅ {f}" for f in project.features)
else:
features = "- ✅ Feature 1\n- ✅ Feature 2\n- ✅ Feature 3"
# Generate sections
readme = README_TEMPLATE.format(
project_name=project.name,
badges=badges,
description=project.description,
features=features,
hardware_list=generate_hardware_list(project),
wiring_diagram=generate_wiring_diagram(project),
dependencies=generate_dependencies(project),
installation=generate_installation(project),
usage=generate_usage(project),
configuration="_Add configuration options here_",
troubleshooting='''| Problem | Solution |
|---------|----------|
| Won't compile | Check library installations |
| No serial output | Verify baud rate is 115200 |
| Device not detected | Check wiring connections |''',
license=f"This project is licensed under the {project.license} License.",
footer=f"Made with ❤️ for the maker community • {datetime.now().year}"
)
return readme
def interactive_mode():
"""Interactive README generator"""
print("=" * 60)
print("README Generator - Interactive Mode")
print("=" * 60)
print()
project = ProjectInfo()
# Basic info
project.name = input("Project name [My Arduino Project]: ").strip() or "My Arduino Project"
project.description = input("Short description: ").strip() or "An Arduino-based project."
# Board selection
print("\nAvailable boards:")
boards = list(BOARD_PINOUTS.keys())
for i, b in enumerate(boards, 1):
print(f" {i}. {b}")
choice = input(f"Select board (1-{len(boards)}) [1]: ").strip() or "1"
try:
project.board = boards[int(choice) - 1]
except:
project.board = "Arduino Uno"
# Features
print("\nEnter features (one per line, empty to finish):")
while True:
feat = input(" - ").strip()
if not feat:
break
project.features.append(feat)
# Hardware
print("\nEnter hardware components (empty name to finish):")
while True:
name = input(" Component name: ").strip()
if not name:
break
qty = input(" Quantity [1]: ").strip() or "1"
project.hardware.append({"name": name, "qty": int(qty)})
# Libraries
print("\nEnter required libraries (empty to finish):")
while True:
lib = input(" Library: ").strip()
if not lib:
break
project.libraries.append(lib)
# Wiring type
print("\nWiring diagram type:")
print(" 1. I2C device")
print(" 2. SPI device")
print(" 3. Generic/Custom")
wtype = input("Select (1-3) [3]: ").strip() or "3"
project.wiring_type = {"1": "i2c", "2": "spi", "3": "generic"}.get(wtype, "generic")
# Generate
readme = generate_readme(project)
# Output
filename = input("\nOutput filename [README.md]: ").strip() or "README.md"
with open(filename, 'w') as f:
f.write(readme)
print(f"\n✓ Generated: {filename}")
print(f" Project: {project.name}")
print(f" Board: {project.board}")
def main():
parser = argparse.ArgumentParser(description="README Generator for Arduino Projects")
parser.add_argument("--interactive", "-i", action="store_true", help="Interactive mode")
parser.add_argument("--project", "-p", type=str, help="Project name")
parser.add_argument("--board", "-b", type=str, default="Arduino Uno", help="Board type")
parser.add_argument("--description", "-d", type=str, help="Project description")
parser.add_argument("--scan", "-s", type=str, help="Scan directory for .ino files")
parser.add_argument("--output", "-o", type=str, default="README.md", help="Output file")
args = parser.parse_args()
if args.interactive:
interactive_mode()
return
project = ProjectInfo(
name=args.project or "My Arduino Project",
board=args.board,
description=args.description or "An Arduino-based project."
)
# Scan directory if provided
if args.scan:
for root, dirs, files in os.walk(args.scan):
for f in files:
if f.endswith('.ino'):
info = scan_ino_file(os.path.join(root, f))
project.libraries.extend(info.get("libraries", []))
if info.get("uses_i2c"):
project.wiring_type = "i2c"
elif info.get("uses_spi"):
project.wiring_type = "spi"
project.libraries = list(set(project.libraries)) # Remove duplicates
readme = generate_readme(project)
with open(args.output, 'w') as f:
f.write(readme)
print(f"Generated: {args.output}")
if __name__ == "__main__":
main()