

Softswitcher rp2040
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
8RP2350A
QFN-60-EP(7x7)Power-on reset (POR)、Undervoltage detection (BOR/LVD/LVR/LVI)、Watchdog reset、Integrated LDO、True random number generator (TRNG)、Hardware ECC check QFN-60-EP(7x7) Microcontrollers (MCU/MPU/SOC) ROHSRaspberry PiMicrocontrollers (MCU/MPU/SOC)CH224K
ESSOP-10-150mil-1mm-40℃~+90℃ 100W 4V~30V 5V、9V、12V、15V、20V Overvoltage Protection、Thermal Protection PD 3.0 Power Receiver Controller ESSOP-10-150mil-1mm USB PD ROHSWCH (Nanjing Qinheng Microelectronics)USB ConvertersTPS63001DRC
VSON-10-EP(3x3)-40℃~+85℃@(TA) 1 1.5MHz 1.8V~5.5V 3.3V 50uA Buck-Boost Buck-Boost Built-in Fixed Yes VSON-10-EP(3x3) DC-DC Converters ROHSTexas InstrumentsDC-DC ConvertersW25Q32JVZPIQ
WSON-8-EP(5x6)-40℃~+85℃ 100,000 cycles 10uA 133MHz 2.7V~3.6V 20 Years 32Mbit 3ms SPI WSON-8-EP(5x6) NOR FLASH ROHSWinbondNOR FLASH1N4148W
SOD-123150mA 1A 1V@50mA 1uA@75V 400mW 4ns 75V Independent SOD-123 Switching Diodes ROHSSTMicroelectronicsSwitching DiodesSK6812MINI-E
SMD-40℃~+85℃ 0.6mA 1.78mm 120mcd~240mcd 120° 160mcd~320mcd 1kHz 2.8mm 2000V 3.2mm 3.7V~5.5V 460nm~470nm 515nm~525nm 620nm~625nm 800Kbit/s 815mcd~1275mcd Semi-transparent lens SMD RGB LEDs(Built-in IC) ROHSOPSCO OptoelectronicsRGB LEDs(Built-In IC)DMG1012T
SOT-523-55℃~+150℃ 1 N-channel 1V 20V 280mW 300mΩ@4.5V、400mΩ@2.5V、500mΩ@1.8V 5.37pF 60.67pF 630mA 736.6pC@4.5V 9.68pF SOT-523 MOSFETs ROHSDiodes IncorporatedMOSFETsPMEG6010ELRX
SOD-123W1A 605mV@1A 60V 90nA@60V Independent SOD-123W Schottky Diodes ROHSNexperiaSchottky Diodes
README
README.mdHybridSwitcher — ハイブリッドIP映像スイッチャー
既存機材(ATEM Mini)と自作ハードウェア(自作スイッチングモジュール群 + Pico 2W)、 ネットワーク技術(SRT / NDI / WebAPI)を融合した、次世代のハイブリッドIP映像スイッチャーシステム。
PC上に常駐する制御アプリを「脳」とし、複数プロトコル(UVC / NDI / SRT)の映像入力・PiP合成・ 仮想カメラ出力・タリー送出・外部機材(ATEM)の遠隔制御を一元化する。DIYでありながらプロ用 スイッチャーに匹敵する多人数オペレーション(メイン/サブ分業)と拡張性を目指す。
全体仕様は
docs/specs/00-system-overview.md(親仕様書)を参照。
システム構成
[ サブ 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 / TypeScript | Web Serial/WebUSBでPico 2Wを中継・ブラウザ設定UI | phone-bridge / 仕様 |
| ワイヤレスタリー子機 | (未着手) | ESP32 (Arduino/ESP-IDF) | UDPブロードキャスト受信→赤/緑LED点灯 | 仕様 |
PC常駐アプリの .NET プロジェクト構成(src/)
| プロジェクト | 役割 |
|---|---|
Switcher.Contracts | 共通インターフェース・DTO(IVideoEngine 抽象を含む契約層) |
Switcher.Engine | IVideoEngine の実体。ネイティブ switcher-engine(libobs) への P/Invoke + テスト用 FakeVideoEngine |
Switcher.Atem | ATEM遠隔制御クライアント(UDP 9910) |
Switcher.Web | WebAPI/WebSocketサーバ・UDPタリーブロードキャスト |
Switcher.App | WPFホスト。上記を1つの常駐プロセスに結線するDI合成ルート |
libobs 移行: 旧
Switcher.Media(GStreamer/DirectX 合成) /Switcher.VirtualCam(自作仮想カメラ) は廃止し、映像パスは libobs に一本化した(docs/specs/libobs-engine-migration.md)。ネイティブswitcher-engine.dllは Windows + OBS でのみビルド/実行し、.slnには含まない(テストはFakeVideoEngine注入でヘッドレス実行)。
リポジトリ構成
.
├── 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 直後に一度)
./setup.sh # 共通(.NET / phone-bridge / firmware).\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 はその依存の連鎖を通しで面倒を見る。
インストール済み OBS を検出 → 同じ版の obs-studio を clone
→ libobs だけビルド → obs.lib
→ .env に LIBOBS_* を記録
→ build.bat → switcher-engine.dll
→ Switcher.App.csproj が App 出力へ自動コピー(既存の仕組み)| オプション | 用途 |
|---|---|
-Check | 検証のみ。clone もビルドも .env の書き換えもしない |
-ObsVersion <version> | 使う OBS の版を明示する |
-Force | obs-studio\ を作り直す(版を切り替えるとき) |
-Bundle | tools/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 の中だけ。呼び出し元のシェルには以下を前置きする。
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 不可)。
-
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\。 -
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.batSwitcher.App.csprojがビルド時にswitcher-engine.dllを App 出力へ自動コピーする(VS F5/Rebuild でも維持)。 -
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
- Visual Studio: 構成
前提/注意
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)
cd apps/phone-bridge
npm install
npm run dev # 開発サーバ
npm run build # プロダクションビルド
npm test # vitestPico 2W ファームウェア
I/Oに依存しないロジックはホストの gcc でユニットテスト可能(Pico SDK不要)。
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。
| ジョブ | 内容 |
|---|---|
.NET | dotnet build -c Release -warnaserror → dotnet format --verify-no-changes → dotnet test(結果 .trx をアーティファクト化) |
phone-bridge | npm ci → npm run lint(eslint) → npm run build(tsc -b 型チェック + vite) → npm test(vitest)、dist/ をアーティファクト化 |
firmware | firmware/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 する。
手元 ── 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 すると:
- まず CI が走り、green で終わったときだけミラーが起動する(
workflow_runトリガー)。 赤い場合・CI が走らないブランチは、直さない限りミラーされない .github/workflows/mirror.ymlが tailnet に ephemeral ノードとして参加し、 VPS へ SSH してmirror-sync Xを実行する(CI が通ったXだけが対象)- VPS が個人リポジトリから
Xを fetch し、tools/mirror/mirror.shを呼ぶ - ミラー先の
mirror/X(ミラー専用ブランチ)へ push 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.yml | tailnet に参加して VPS へ SSH し mirror-sync を起動 |
| VPS | ~/mirror/TheHack.git | 中継用の bare リポジトリ(remote: personal / hackathon) |
| VPS | ~/mirror/mirror.sh | mirror/X の push・PR 作成・マージ(tools/mirror/mirror.sh) |
| VPS | ~/.local/bin/mirror-sync | 個人リポジトリから取り込んで同期(tools/mirror/mirror-sync) |
セットアップ:
# 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_SECRET | Tailscale の OAuth クライアント ID / シークレット(scope auth_keys write / tag tag:ci) |
SSH_HOST / SSH_USER | VPS の tailnet アドレス(100.x or MagicDNS 名)とログインユーザー名 |
SSH_KEY | ログインに使う秘密鍵(mirror_ci の中身。公開鍵は VPS の authorized_keys へ) |
SSH_KNOWN_HOSTS | VPS のホスト鍵(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 の共通定義に準拠する。
| ポート | プロトコル | 用途 |
|---|---|---|
| 8080 | HTTP/WebSocket | 設定WebAPI・コントローラー入力受信 |
| 9000 | SRT (Listener) | 映像入力(ATEM PGM等) |
| 9999 | UDP broadcast | タリー配信(255.255.255.255:9999) |
| 9910 | UDP | ATEM遠隔制御(ATEM純正プロトコル) |
詳細(イベントペイロード・設定変更API・タリーペイロード)は
docs/specs/00-system-overview.md §4 を参照。
ドキュメント
- 技術仕様(現行実装):
docs/spec/technical-overview.md(詳細) /docs/spec/summary.md(要約) /docs/slides/switcher.md(Marp) - 配布サイト:
web/— LP + 使い方(web/build-preview.ps1で1ファイルのプレビューを生成) - ライセンス: GPL-2.0-or-later(
LICENSE/THIRD-PARTY-NOTICES.md) - 仕様書:
docs/specs/— 親仕様書 + コンポーネント別詳細仕様 - 実装計画 / タスク:
docs/tasks/— マルチエージェント実装のオーケストレーション計画とタスク指示書
Parts
76| Qty | Value | Footprint | References |
|---|---|---|---|
| 11 | 100n | Capacitor_SMD:C_0201_0603Metric | C3, C9, C10, C12, C13, C14, C15, C17, C18, C19, C20 |
| 8 | 1N4148W | Diode_SMD:D_SOD-123 | D1, D2, D5, D6, D9, D10, D13, D14 |
| 8 | CherryMX | CherryMX:CherryMX_1.00u | SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8 |
| 8 | SK6812MINI-E | kicad-keyboard-parts.pretty-master:MX_SK6812MINI-E | D3, D4, D7, D8, D11, D12, D15, D16 |
| 5 | 100k | Resistor_SMD:R_0201_0603Metric | R8, R9, R13, R14, R15 |
| 5 | 4u7 | Capacitor_SMD:C_0402_1005Metric | C2, C6, C7, C11, C16 |
| 2 | 15p | Capacitor_SMD:C_0201_0603Metric | C1, C4 |
| 2 | 27R | Resistor_SMD:R_0201_0603Metric | R3, R4 |
| 2 | 47u 6.3V X5R | Capacitor_SMD:C_0805_2012Metric | C5, C8 |
| 2 | USB_C_Receptacle_USB2.0_14P | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J1, J2 |
| 1 | 10k | Resistor_SMD:R_1206_3216Metric | R7 |
| 1 | 10k | Resistor_SMD:R_0201_0603Metric | R6 |
| 1 | 1R | Resistor_SMD:R_0201_0603Metric | R11 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric | R16 |
| 1 | 1k | Resistor_SMD:R_0201_0603Metric | R1 |
| 1 | 1k | Resistor_SMD:R_1206_3216Metric | R2 |
| 1 | 1n | Capacitor_SMD:C_0201_0603Metric | C21 |
| 1 | 200R | Resistor_SMD:R_0201_0603Metric | R10 |
| 1 | 2u2 | Inductor_SMD:L_1210_3225Metric | L2 |
| 1 | 33R | Resistor_SMD:R_0402_1005Metric | R12 |
| 1 | 3u3 | Inductor_SMD:L_1206_3216Metric | L1 |
| 1 | 5k6 | Resistor_SMD:R_0201_0603Metric | R5 |
| 1 | ASE-xxxMHz | Oscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm | Y1 |
| 1 | CH224K | Package_SO:SSOP-10-1EP_3.9x4.9mm_P1mm_EP2.1x3.3mm | U2 |
| 1 | DMG1012T | Package_TO_SOT_SMD:SOT-523 | Q1 |
| 1 | PMEG6010ELR | Diode_SMD:Nexperia_CFP3_SOD-123W | D17 |
| 1 | RP2350A | Package_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mm | U3 |
| 1 | TPS63001 | Package_SON:Texas_DRC0010J_ThermalVias | U4 |
| 1 | W25Q32JVZP | Package_SON:WSON-8-1EP_6x5mm_P1.27mm_EP3.4x4.3mm | U1 |
The 72 most common of 76 parts.
More from oldsheeep3/TheHack
5- 2 layers78 × 78 mm

- 2 layers78 × 78 mm

- 2 layers78 × 78 mm

- 2 layers40 × 100 mm

- 2 layers40 × 100 mm

Softswitcher module master
oldsheeep3/TheHack
HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)
6 partsGPL-2.0
Similar boards
- 4 layers71.8 × 89.1 mm

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 mm

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 mm

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 mm

- 4 layers26 × 55 mm

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 mm

- 4 layers104.3 × 34.3 mm

Resonance
SethTheDev/Resonance
A powerful STM32F411-based USB audio interface rocking a Cirrus Logic DAC with DSP
123 parts1 - 2 layers99.4 × 99.4 mm

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