Skip to the content
2 layers78 × 78 mmSoftswitcher rp2040, the printed circuit board in 3D

Softswitcher rp2040

oldsheeep3/TheHack

HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

Size
78 × 78 mm
Copper layers
2
Thickness
1.6 mm
Parts
76
Nets
97
Pads
375
Tracks, vias
257, 2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
28 Jul 2026
Updated
15 Oct 2026

Overview

Softswitcher rp2040 is an open-source printed circuit board by oldsheeep3, from the oldsheeep3/TheHack repository on GitHub, published under the GPL-2.0 licence. It is a 2-layer board of 78 × 78 mm with 76 parts on 97 nets, routed with 257 tracks and 2 vias.

It is built around the RP2350A, CH224K and TPS63001DRC, with the W25Q32JVZPIQ, 1N4148W and SK6812MINI-E among its other parts. Its parts include 21 capacitors, 17 diodes, 16 resistors, 8 switches and 4 ICs. It belongs with the RP2040 and RP2350 boards of this library.

Main components

8

README

README.md

HybridSwitcher — ハイブリッドIP映像スイッチャー

CI

既存機材(ATEM Mini)と自作ハードウェア(自作スイッチングモジュール群 + Pico 2W)、 ネットワーク技術(SRT / NDI / WebAPI)を融合した、次世代のハイブリッドIP映像スイッチャーシステム。

PC上に常駐する制御アプリを「脳」とし、複数プロトコル(UVC / NDI / SRT)の映像入力・PiP合成・ 仮想カメラ出力・タリー送出・外部機材(ATEM)の遠隔制御を一元化する。DIYでありながらプロ用 スイッチャーに匹敵する多人数オペレーション(メイン/サブ分業)と拡張性を目指す。

全体仕様は docs/specs/00-system-overview.md(親仕様書)を参照。

システム構成

text
[ サブ ATEM Mini ] ──(SRT/HDMI/NDI)──→ [ メインPC (常駐App) ] ──(仮想WebCam/HDMI)──→ [ 配信/録画/OBS等 ]
        ▲                                    ▲        │
        │ (ATEM遠隔制御: UDP 9910)            │        │ (UDPタリー: 9999 ブロードキャスト)
        └────────────────────────────────────┘        ▼
                                             ▲   [ ワイヤレスタリー子機(ESP32) ]  [ 赤/緑 LED ]
                                             │ (WebSocket / WebAPI: 8080)
                                    (USB/HID/Serial)
[ 自作コントローラー: Pico 2W ] ──┬── (USB直結) ──→ メインPC
        │                         └── (USB-OTG) ──→ [ スマホ (Web App) ] ──(Wi-Fi/WebSocket)──→ メインPC
        │
        ├─(内部制御: 後日詳細化)──→ [ 各スイッチングモジュール内マイコン ]
        └─(HDMI DDC/I2Cスニッフィング)──→ [ 物理タリー抽出 ]

コンポーネント

コンポーネント場所技術責務個別README / 仕様書
PC常駐アプリsrc/C# / .NET 9 + libobs(P/Invoke)映像入力デコード・PiP合成・仮想カメラ/HDMI出力・WebAPI/WebSocket・UDPタリー送出・ATEM制御App / 仕様 / 移行
ネイティブ映像エンジンnative/switcher-engine/C/C++ + libobs (GPLv2)libobs を駆動する IVideoEngine の実体(デュアルM/E=obs_view×2・ソース共有・出力・マルチビュー)switcher-engine
Pico 2W コントローラーfirmware/pico2w-controller/Pico SDK (C/C++)物理ボタン入力→PC/スマホ送信・モジュール統括・HDMI DDCタリー抽出Firmware / 仕様
スマホWebブリッジapps/phone-bridge/React / TypeScriptWeb Serial/WebUSBでPico 2Wを中継・ブラウザ設定UIphone-bridge / 仕様
ワイヤレスタリー子機(未着手)ESP32 (Arduino/ESP-IDF)UDPブロードキャスト受信→赤/緑LED点灯仕様

PC常駐アプリの .NET プロジェクト構成(src/)

プロジェクト役割
Switcher.Contracts共通インターフェース・DTO(IVideoEngine 抽象を含む契約層)
Switcher.EngineIVideoEngine の実体。ネイティブ switcher-engine(libobs) への P/Invoke + テスト用 FakeVideoEngine
Switcher.AtemATEM遠隔制御クライアント(UDP 9910)
Switcher.WebWebAPI/WebSocketサーバ・UDPタリーブロードキャスト
Switcher.AppWPFホスト。上記を1つの常駐プロセスに結線するDI合成ルート

libobs 移行: 旧 Switcher.Media(GStreamer/DirectX 合成) / Switcher.VirtualCam(自作仮想カメラ) は廃止し、映像パスは libobs に一本化した(docs/specs/libobs-engine-migration.md)。ネイティブ switcher-engine.dll は Windows + OBS でのみビルド/実行し、.sln には含まない(テストは FakeVideoEngine 注入でヘッドレス実行)。

リポジトリ構成

text
.
├── src/                       # PC常駐アプリ (.NET 9) — HybridSwitcher.sln
├── native/switcher-engine/    # ネイティブ映像エンジン (C/C++ + libobs, CMake, .sln外)
├── tests/                     # 上記各プロジェクトのユニットテスト
├── apps/phone-bridge/         # スマホWebブリッジ & 設定UI (React/TS)
├── firmware/pico2w-controller/# Pico 2W コントローラー / タリー抽出ファーム
├── docs/
│   ├── specs/                 # 仕様書(親仕様書 + コンポーネント別)
│   └── tasks/                 # マルチエージェント実装計画・タスク指示書
├── softswitcher*/             # 既存KiCadハードウェア設計(参考資産)
└── HybridSwitcher.sln         # .NET ソリューション

セットアップ(clone 直後に一度)

sh
./setup.sh          # 共通(.NET / phone-bridge / firmware)
powershell
.\setup.ps1         # Windows で映像エンジンまで動かす場合(追加で実行)

clone しただけの状態では、次の理由で初回ビルドが必ず落ちる。setup.sh がこれを一括で潰す。

落ちる理由setup.sh の対応
dotnet / node が ~/.bashrc 経由でしか PATH に乗らない(非ログインシェル・CI では不在)DOTNET_ROOT と nvm を解決して検証。--install-missing で .NET SDK を ~/.dotnet に導入
firmware/switcher-module/ch32v003fun サブモジュールが未初期化git submodule update --init --recursive
scripts → .claude/scripts のリンク切れ(.claude は gitignore).claude を取得してリンクを復旧(失敗しても警告のみ。ビルドには不要)
NuGet / npm の依存が未取得dotnet restore と npm ci(CI と同じ lock 厳守)

主なオプション(何度実行しても同じ結果になる):

オプション用途
--check検証のみ。取得も生成もせず状態を報告する
--ci対話なし。.env を作らず、サブモジュールと .claude を触らない
--install-missing.NET SDK が無ければ dotnet-install.sh で導入する
--skip-submodules / --skip-restore / --skip-npm / --skip-agent-scripts個別スキップ

未解決の問題が残ると終了コード 1 で終わるので、CI からそのまま呼べる(./setup.sh --ci)。

Windows でネイティブ映像エンジンまで用意する(setup.ps1)

Visual Studio で F5 したときの DllNotFoundException / 0x8007007E は、ネイティブの switcher-engine.dll が未ビルドなことが原因。この DLL は .sln 外の CMake ビルドで、さらにその手前に libobs の import lib obs.lib が要る。obs.lib は OBS のインストーラには含まれず、OBS 本体をソースからビルドしないと手に入らない。

setup.ps1 はその依存の連鎖を通しで面倒を見る。

text
インストール済み OBS を検出 → 同じ版の obs-studio を clone
  → libobs だけビルド → obs.lib
    → .env に LIBOBS_* を記録
      → build.bat → switcher-engine.dll
        → Switcher.App.csproj が App 出力へ自動コピー(既存の仕組み)
オプション用途
-Check検証のみ。clone もビルドも .env の書き換えもしない
-ObsVersion <version>使う OBS の版を明示する
-Forceobs-studio\ を作り直す(版を切り替えるとき)
-Bundletools/bundle-obs-runtime.ps1 を呼び、App 出力に obs-runtime\ を同梱する
-SkipLibobs / -SkipEngine個別スキップ

初回は数十分かかる(obs-studio の clone が数 GB、libobs のビルドがその後)。2 回目以降は済んだ工程を飛ばす。

バージョンは固定していない。 マネージド側(ObsRuntime.cs)は libobs 30.0〜32.99 を受け入れ、範囲外でも警告を出すだけで拒否しない。setup.ps1 もそれに合わせ、インストール済み OBS の版を検出してその版のソースをビルドする。OBS が入っていない場合だけ既定の 32.0.4(実機検証済み)を使う。

⚠️ obs.lib(ビルド時)と obs.dll(実行時)の版が食い違うと起動失敗・クラッシュする。バージョンを検出に任せるのはこの事故を避けるため。手動で -ObsVersion を指定してインストール済みの版と食い違う場合は警告が出る。

エンドユーザーは OBS のインストールが不要。 ObsRuntime.Locate() は実行ファイルの隣の obs-runtime\ を最優先で見る(ObsRuntime.cs:83-90)ので、-Bundle で同梱した配布物は自己完結する。OBS インストールが要るのはビルドする側だけ。

GPL: obs-runtime\ を同梱した配布物は GPL-2.0 になる。LICENSE / THIRD-PARTY-NOTICES.md 参照。

環境変数(.env)

ツールチェーン関連の変数は .env.example をひな形に .env へ書く(setup.sh が無ければ自動生成する)。.env は gitignore 済み。既に export 済みの環境変数が .env より優先されるので、CI の env: / secrets が上書きされることはない。

⚠️ .env に書けるのはビルド/ツールチェーンの変数だけ。アプリの動作設定(AtemIp / WebPort / ProjectorDisplayIndex 等)は src/Switcher.App/appsettings.json を System.Text.Json が直接読む実装で、環境変数は見ない(Configuration/AppConfigLoader.cs)。

ビルド & テスト

PC常駐アプリ(.NET 9)

./setup.sh 済みでも、dotnet が PATH に乗るのは setup.sh の中だけ。呼び出し元のシェルには以下を前置きする。

sh
export DOTNET_ROOT=$HOME/.dotnet PATH=$HOME/.dotnet:$PATH

dotnet build HybridSwitcher.sln     # 全プロジェクトのビルド
dotnet test  HybridSwitcher.sln     # 全ユニットテスト

Switcher.App は WPF (net9.0-windows) だが EnableWindowsTargeting によりLinuxでもCIでも コンパイルは可能。ただしネイティブ switcher-engine(libobs) ランタイムは Windows 限定で、 実行には Windows 10/11 と下記の起動順が必要。

ネイティブ映像エンジン(libobs)のビルド & Windows 実起動 — 起動順

switcher-engine.dll(native/switcher-engine/)は Windows + OBS 専用で .sln 外。以下が検証済みの順序 (詳細は switcher-engine README / L-002 タスク)。

以下は手順の内訳。通常は setup.ps1 が 1〜2 を自動でやるので、手で追う必要があるのは仕組みを確認したいときだけ。

前提: Windows / Visual Studio 2022(「C++によるデスクトップ開発」)/ CMake ≥ 3.24 / インストール済み OBS(版は問わない。libobs 30.0〜32.99 が対象)。 以下はすべて 「x64 Native Tools Command Prompt for VS 2022」 から実行する(cmake/cl に PATH が通る。通常の cmd/PowerShell 不可)。

  1. libobs dev files を用意(採用 OBS と同一版のソースをビルド。インストール済み OBS アプリだけではヘッダ/obs.lib が無い)

    bat
    git clone --recursive https://github.com/obsproject/obs-studio.git
    rem <version> はインストール済み OBS に合わせる(obs.dll のファイルバージョン)。
    cd obs-studio && git checkout <version> && git submodule update --init --recursive
    cmake --preset windows-x64
    cmake --build build_x64 --config Release --target libobs

    → build_x64\libobs\Release\{obs.lib,obs.dll}、生成ヘッダ build_x64\config\obsconfig.h、公開ヘッダ libobs\。

  2. switcher-engine.dll をビルド(リポジトリルートで。ヘッダは公開+生成の2フォルダを ; 区切りで渡す)

    bat
    set OBS=<obs-studio のパス>
    set LIBOBS_INCLUDE_DIR=%OBS%\libobs;%OBS%\build_x64\config
    set LIBOBS_LIB=%OBS%\build_x64\libobs\Release\obs.lib
    native\switcher-engine\build.bat

    Switcher.App.csproj がビルド時に switcher-engine.dll を App 出力へ自動コピーする(VS F5/Rebuild でも維持)。

  3. App を起動(obs.dll 等を PATH に通してから)

    • Visual Studio: 構成 Debug/x64 → Switcher.App をスタートアップに → プロパティ「デバッグ」→ デバッグ起動プロファイルUIで環境変数 PATH = C:\Program Files\obs-studio\bin\64bit;%PATH%(版一致のインストール済み OBS)→ F5。
    • コマンドライン:
      bat
      dotnet build src\Switcher.App\Switcher.App.csproj -c Release
      set PATH=%OBS%\build_x64\rundir\Release\bin\64bit;%PATH%
      src\Switcher.App\bin\x64\Release\net9.0-windows\Switcher.App.exe

前提/注意

  • obs.dll + data\ + プラグイン + libobs-d3d11.dll が PATH 上で到達可能、かつ import lib(obs.lib) と同一版であること(不一致は起動失敗/クラッシュ)。
  • L-002 未完のうちは engine_startup が obs_reset_video で失敗する(libobs データパス未配線。L-002 タスクの「実機検証で判明した実装ポイント」参照)。
  • ネイティブ抜きで App を動かすなら DI(src/Switcher.App/Composition/ServiceCollectionExtensions.cs)を FakeVideoEngine に差し替える。

スマホWebブリッジ(React/TS)

sh
cd apps/phone-bridge
npm install
npm run dev      # 開発サーバ
npm run build    # プロダクションビルド
npm test         # vitest

Pico 2W ファームウェア

I/Oに依存しないロジックはホストの gcc でユニットテスト可能(Pico SDK不要)。

sh
cd firmware/pico2w-controller/test
make             # ビルド + 実行(全テスト green で終了コード0)

実機向けクロスビルド(Pico SDK / arm-none-eabi ツールチェーン必要)は firmware/pico2w-controller/README.md を参照。

CI(GitHub Actions)

.github/workflows/ci.yml が 全 PR(タスク → 親Epic の PR も含む)と main / develop への push で走る。すべて ubuntu-latest。

ジョブ内容
.NETdotnet build -c Release -warnaserror → dotnet format --verify-no-changes → dotnet test(結果 .trx をアーティファクト化)
phone-bridgenpm ci → npm run lint(eslint) → npm run build(tsc -b 型チェック + vite) → npm test(vitest)、dist/ をアーティファクト化
firmwarefirmware/pico2w-controller/test と firmware/switcher-module/test のホストテスト(gcc、-Werror)

ブランチ保護の必須チェックには集約ジョブ All checks 1つを指定すればよい。

CI が走るのは個人リポジトリ(public)だけ。 ミラー先の NxTEND-THE-HACK/2026-Team-38 は Free org の private リポジトリで Actions のランナーが割り当てられず、どのジョブも 0 ステップの まま即座に失敗する(ワークフロー側の問題ではなく org の Actions 枠の問題で、修正には org 管理者 による支払い設定・repo の public 化・セルフホストランナー登録のいずれかが要る)。そのため全ジョブに if: github.repository_owner != 'NxTEND-THE-HACK' を付けて向こうでは skip させている。ジョブレベルの if はランナー要求より前に評価されるので、skip されたジョブは失敗扱いにならない。

CI 対象外(ローカル/Windows でのみ検証可能):

  • native/switcher-engine(libobs 依存・Windows + OBS 専用・.sln 外)と、それを要する App の実起動
  • web/build-preview.ps1(Windows PowerShell 前提のパス処理)
  • apps/phone-bridge の Prettier 整形チェック(既存ファイルが未整形のため未導入。npm run format で一括整形後に追加可能)

ミラー(個人リポジトリ → ハッカソン用リポジトリ)

開発を個人アカウントの public リポジトリ(oldsheeep3/TheHack)で行い、ハッカソン用 private リポジトリ(NxTEND-THE-HACK/2026-Team-38)へ push のたびに反映する。片方向(個人 → ハッカソン用)。

ミラー先へ書けるトークンは GitHub に預けない。 実際に push するのは tailnet 上の VPS(gh ログイン済み)で、自分の資格情報を使う。GitHub Actions はその VPS に SSH して起動をかけるだけ なので、この public リポジトリに置く secret は tailnet への参加情報と SSH 鍵だけで済む。

.github/ を含め、履歴をそのまま送る(コミット SHA も個人リポジトリ側と一致する)。ミラー先では CI を走らせないよう、ci.yml と mirror.yml の両方がリポジトリのオーナーを見てジョブを skip する。

text
手元 ── git push origin ──→ oldsheeep3/TheHack (public)
                              ├ Actions: ci.yml(green になったら↓を起動)
                              └ Actions: mirror.yml
                                  ├ tailscale/github-action で tailnet に参加
                                  └ ssh ──→ VPS: mirror-sync <branch>
                                              ├ 個人リポジトリから fetch(~/mirror/TheHack.git)
                                              └ mirror.sh  … mirror/X を push + PR 作成 + マージ
                                                              ↓
                                              NxTEND-THE-HACK/2026-Team-38 (private)

ブランチ X を push すると:

  1. まず CI が走り、green で終わったときだけミラーが起動する(workflow_run トリガー)。 赤い場合・CI が走らないブランチは、直さない限りミラーされない
  2. .github/workflows/mirror.yml が tailnet に ephemeral ノードとして参加し、 VPS へ SSH して mirror-sync X を実行する(CI が通った X だけが対象)
  3. VPS が個人リポジトリから X を fetch し、tools/mirror/mirror.sh を呼ぶ
  4. ミラー先の mirror/X(ミラー専用ブランチ)へ push
  5. mirror/X → X の PR を作成(既にオープンならそれを使う)し、マージコミットでマージする

起点が GitHub 側にあるので、どのマシンから push しても(GitHub 上で直接編集しても)ミラーされる。 同期するのは CI が通ったそのブランチだけ。全ブランチ + 全タグをまとめて送るのは手動実行のとき。

ミラー先の main / develop へ直接 push も force push もしない。force は「手元で rebase / amend して mirror/X が fast-forward できなくなった」場合のフォールバックとして mirror/* に対してのみ使う。 ミラー先の ref を削除することはないので、ブランチ削除は同期されない。

Actions が使えないとき(ワークフローの失敗、tailnet の不調、初回の一括コピー)は VPS 側で mirror-sync を直接実行すれば追いつく。

場所もの役割
GitHub.github/workflows/mirror.ymltailnet に参加して VPS へ SSH し mirror-sync を起動
VPS~/mirror/TheHack.git中継用の bare リポジトリ(remote: personal / hackathon)
VPS~/mirror/mirror.shmirror/X の push・PR 作成・マージ(tools/mirror/mirror.sh)
VPS~/.local/bin/mirror-sync個人リポジトリから取り込んで同期(tools/mirror/mirror-sync)

セットアップ:

sh
# VPS 側(gh でログイン済み・gh auth setup-git 済みであること)
scp -r tools/mirror <vps>:~/mirror-install
ssh <vps> 'bash ~/mirror-install/install-vps.sh'

# CI 用の SSH 鍵を作って公開鍵を VPS に置く
ssh-keygen -t ed25519 -N '' -f mirror_ci
ssh-copy-id -i mirror_ci.pub <vps>

# 手動同期(全ブランチ + 全タグ / ブランチ指定)
ssh sheep 'bash -lc mirror-sync'
ssh sheep 'bash -lc "mirror-sync develop"'

個人リポジトリの Settings → Secrets and variables → Actions に登録する secret:

secret中身
TS_CLIENT / TS_SECRETTailscale の OAuth クライアント ID / シークレット(scope auth_keys write / tag tag:ci)
SSH_HOST / SSH_USERVPS の tailnet アドレス(100.x or MagicDNS 名)とログインユーザー名
SSH_KEYログインに使う秘密鍵(mirror_ci の中身。公開鍵は VPS の authorized_keys へ)
SSH_KNOWN_HOSTSVPS のホスト鍵(ssh-keyscan <host> の出力)。任意だが推奨

tailnet の ACL で tag:ci から VPS の 22/tcp を許可しておくこと。

  • マージは マージコミットで行う(squash / rebase merge だと merge-base が進まず、次回の PR に同じコミットが再び載る)。ブランチ保護で弾かれた場合は gh pr merge --admin で通す。
  • ミラー先に同名ブランチが無いと PR は作れない(mirror/X の push だけ行い notice を出す)。 その場合はミラー先で mirror/X からブランチを作る。
  • 手動で mirror-sync を叩くときは Actions の実行と重ならないようにする(作業リポジトリを共有 していて、排他はしていない)。
  • workflow_run はデフォルトブランチにあるワークフローファイルしか起動しない。mirror.yml は main にも入っている必要がある(develop だけに置いても発火しない)。
  • CI の push トリガーは main / develop だけなので、作業ブランチを直接 push してもミラーは 起動しない(PR を出せば CI は走るが、pull_request 由来の実行はミラーの対象外)。作業ブランチを 今すぐミラーしたいときは VPS で mirror-sync <branch> を叩くか、Actions から手動実行する。
  • ミラーの実行は concurrency で 1 本に絞っている。実行中 + 待機中がいる状態でさらに CI が green になると待機中が追い出され、そのブランチは次の CI green まで待つ。
  • .github/workflows/ も同期するので、VPS の gh ログインには workflow スコープが要る (gh auth refresh -h github.com -s workflow)。無いと push が拒否される。
  • タグは手動同期(引数なしの mirror-sync)のときにまとめて送る。ミラー先で既に別のコミットを 指しているタグは上書きしない。

共通プロトコル / ポート

各コンポーネントは親仕様書 §4 の共通定義に準拠する。

ポートプロトコル用途
8080HTTP/WebSocket設定WebAPI・コントローラー入力受信
9000SRT (Listener)映像入力(ATEM PGM等)
9999UDP broadcastタリー配信(255.255.255.255:9999)
9910UDPATEM遠隔制御(ATEM純正プロトコル)

詳細(イベントペイロード・設定変更API・タリーペイロード)は docs/specs/00-system-overview.md §4 を参照。

ドキュメント

Parts

76
QtyValueFootprintReferences
11100nCapacitor_SMD:C_0201_0603MetricC3, C9, C10, C12, C13, C14, C15, C17, C18, C19, C20
81N4148WDiode_SMD:D_SOD-123D1, D2, D5, D6, D9, D10, D13, D14
8CherryMXCherryMX:CherryMX_1.00uSW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8
8SK6812MINI-Ekicad-keyboard-parts.pretty-master:MX_SK6812MINI-ED3, D4, D7, D8, D11, D12, D15, D16
5100kResistor_SMD:R_0201_0603MetricR8, R9, R13, R14, R15
54u7Capacitor_SMD:C_0402_1005MetricC2, C6, C7, C11, C16
215pCapacitor_SMD:C_0201_0603MetricC1, C4
227RResistor_SMD:R_0201_0603MetricR3, R4
247u 6.3V X5RCapacitor_SMD:C_0805_2012MetricC5, C8
2USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ1, J2
110kResistor_SMD:R_1206_3216MetricR7
110kResistor_SMD:R_0201_0603MetricR6
11RResistor_SMD:R_0201_0603MetricR11
11kResistor_SMD:R_0603_1608MetricR16
11kResistor_SMD:R_0201_0603MetricR1
11kResistor_SMD:R_1206_3216MetricR2
11nCapacitor_SMD:C_0201_0603MetricC21
1200RResistor_SMD:R_0201_0603MetricR10
12u2Inductor_SMD:L_1210_3225MetricL2
133RResistor_SMD:R_0402_1005MetricR12
13u3Inductor_SMD:L_1206_3216MetricL1
15k6Resistor_SMD:R_0201_0603MetricR5
1ASE-xxxMHzOscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mmY1
1CH224KPackage_SO:SSOP-10-1EP_3.9x4.9mm_P1mm_EP2.1x3.3mmU2
1DMG1012TPackage_TO_SOT_SMD:SOT-523Q1
1PMEG6010ELRDiode_SMD:Nexperia_CFP3_SOD-123WD17
1RP2350APackage_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mmU3
1TPS63001Package_SON:Texas_DRC0010J_ThermalViasU4
1W25Q32JVZPPackage_SON:WSON-8-1EP_6x5mm_P1.27mm_EP3.4x4.3mmU1

The 72 most common of 76 parts.

More from oldsheeep3/TheHack

5
  • 2 layers78 × 78 mmSoftswitcher rp2040 v2, the printed circuit board in 3D

    Softswitcher rp2040 v2

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    50 partsGPL-2.0
  • 2 layers78 × 78 mmSoftswitcher hdmi v1, the printed circuit board in 3D

    Softswitcher hdmi v1

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    33 partsGPL-2.0
  • 2 layers78 × 78 mmSoftswitcher, the printed circuit board in 3D

    Softswitcher

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    33 partsGPL-2.0
  • 2 layers40 × 100 mmSoftswitcher module sw4, the printed circuit board in 3D

    Softswitcher module sw4

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    21 partsGPL-2.0
  • 2 layers40 × 100 mmSoftswitcher module master, the printed circuit board in 3D

    Softswitcher module master

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    6 partsGPL-2.0

Similar boards

  • 4 layers71.8 × 89.1 mmRaspberry pi pico, the printed circuit board in 3D

    Raspberry pi pico

    Ons-Nouri/raspberry_Pi_Pico_Prototype

    Custom Raspberry Pi Pico-style development board designed in KiCad, featuring the RP2040/RP2350 microcontroller, USB connectivity, power management, GPIO headers, and custom PCB layout.

    83 parts
  • 4 layers65 × 56 mmRaspberry pi pico 2w, the printed circuit board in 3D

    Raspberry pi pico 2w

    RoyZeng0317/kicad

    This is the kicad circuit diagram layout, it's have more layout in here.

    83 parts
  • 4 layers560.1 × 158.8 mmKeyboard, the printed circuit board in 3D

    Keyboard

    DEV-ajthedj/Keyboard

    A custom RGB keyboard that features three 1D capacitive touch sliders, two joysticks, an OLED screen, a fingerprint sensor, and plenty of macro keys!

    439 parts
  • 4 layers21 × 51 mmShen, the printed circuit board in 3D

    Shen

    Keyaan-07/shen

    47 parts
  • 4 layers26 × 55 mmDeezplay RP2350, the printed circuit board in 3D

    Deezplay RP2350

    zeankundev/boards

    A collection and an archive of KiCad projects I made. Contains projects from 2023 - 2024.

    71 parts1
  • 4 layers162.2 × 100 mmDigital, the printed circuit board in 3D

    Digital

    Dawson-HEP/opentrig

    Open-source acquisition trigger

    438 parts6EPL-2.0
  • 4 layers104.3 × 34.3 mmResonance, the printed circuit board in 3D

    Resonance

    SethTheDev/Resonance

    A powerful STM32F411-based USB audio interface rocking a Cirrus Logic DAC with DSP

    123 parts1
  • 2 layers99.4 × 99.4 mmRP2350 80QFN minimal, the printed circuit board in 3D

    RP2350 80QFN minimal

    alvestav/alvestav-lee-thesis-project-2025

    This is the GitHub repository for the thesis project in computer and electronics engineering by Alvestav and Lee

    166 partsMIT

Questions

How big is the Softswitcher rp2040 PCB?

It measures 78 × 78 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Softswitcher rp2040 use?

76 parts, built around the RP2350A, CH224K, TPS63001DRC and W25Q32JVZPIQ. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Softswitcher rp2040 KiCad files?

From the oldsheeep3/TheHack repository on GitHub, at the commit this page was made from: the board is softswitcher_rp2040/softswitcher_rp2040.kicad_pcb and its schematic softswitcher/softswitcher.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Softswitcher rp2040 design in my own project?

Its repository publishes it under the GPL-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).