ESP32 · Socket.IO · REST API · OSC
GPUB

General Purpose Ubiquitous Board

ESP32ベースの汎用ステッピングモーター/GPIO制御デバイス。Wi-Fi経由でリアルタイム制御。p5.js・Pure Data・TouchDesigner などあらゆる環境から操作可能。

ダウンロード GitHub

特徴

シンプルなコマンド体系で、あらゆる外部アプリケーションからモーターと GPIO を制御

ステッピングモーター制御

ステップ数・方向・速度をリアルタイム指定。motor.goto で絶対位置移動も可能。差分はデバイス側で自動計算。

汎用 GPIO 出力

モーターピンを汎用スイッチ出力に転用。デジタル ON/OFF と PWM 出力(周波数可変)に対応。SSR 経由の AC 機器制御も。

REST API

HTTP POST でコマンド送信。p5.js・Python・Processing など、fetch が使える環境ならどこからでも制御可能。

OSC サポート

UDP ポート 9100 で OSC メッセージを受信。Pure Data・Max/MSP・TouchDesigner からそのまま使用可能。

Wi-Fi セットアップ

初回起動時は AP モードで起動。ブラウザから SSID・サーバー URL・デバイスモードを設定して保存。

Electron コントロールパネル

接続デバイスを自動検出してカード表示。GUI で個別制御しながらログをリアルタイム確認。EN/JA 切替対応。

REST API

HTTP POST で任意の言語からデバイスを制御。CORS 対応済みなのでブラウザからも直接アクセス可能。

デバイス一覧の取得

GET http://localhost:3000/api/devices

コマンド送信

POST http://localhost:3000/api/command
Content-Type: application/json

{
  "deviceId": 1,
  "command":  "motor.move",
  "data": { "steps": 200, "direction": 1, "speed": 5 }
}

p5.js サンプル

// モーターを絶対位置 500 に移動
await fetch('http://localhost:3000/api/command', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    deviceId: 1,
    command:  'motor.goto',
    data:     { position: 500, speed: 5 }
  })
});

deviceId の指定方法

値意味
1, 2, ...デバイス番号(接続順に自動採番)
"192.168.1.x"IP アドレス
"__all__"全デバイスにブロードキャスト

OSC インターフェース

UDP ポート 9100 でメッセージを受信。Pure Data・Max/MSP・TouchDesigner から直接送信可能。

アドレスパターン

/gpub/motor/move   [deviceId] steps dir speed
/gpub/motor/goto   [deviceId] position speed
/gpub/motor/stop   [deviceId]
/gpub/motor/status [deviceId]
/gpub/switch/set   [deviceId] pin value
/gpub/switch/pwm   [deviceId] pin duty freq
/gpub/config/mode  [deviceId] mode

Pure Data サンプル(ELSE ライブラリ)

; デバイス #1 を絶対位置 400 に移動
[list /gpub/motor/goto 1 400 5(
|
[osc.send 9100]

; 全デバイス停止(deviceId 省略)
[list /gpub/motor/stop(
|
[osc.send 9100]

コマンド一覧

コマンドパラメータ説明
motor.movesteps, direction, speeddirection: 1=CW / -1=CCW、speed: ms/step(最小 5)
motor.gotoposition, speed絶対位置移動。差分はデバイス側で自動計算
motor.stop—即停止
motor.status—現在の状態を取得(state / position / mode)
switch.setpin, valueデジタル出力 ON/OFF
switch.pwmpin, duty, freqPWM 出力。duty: 0–255 / freq: Hz
config.modemode"motor" または "gpio"(セッション中のみ)

GPUB Controller

Electron ベースのデスクトップアプリ。Socket.IO サーバー・REST API・OSC サーバーが一体化したコントロールパネル。

デバイスカード

接続デバイスを自動検出してカードを生成。各カードから個別にモーター制御・GPIO 制御・モード切替が可能。

ログパネル

接続・コマンド・ACK をリアルタイム表示。デバッグやプロトタイピング中に通信状況を即座に確認できる。

EN / JA 切替

ヘッダーのボタンで UI 表示言語を英語 / 日本語にワンタップで切替。デバイスカードの動的生成にも対応。

リファレンスパネル

「Ref」ボタンで REST API・OSC の使用例をモーダル表示。コマンドの書き方をその場で確認できる。

デバイスシミュレータ

実機なしでサーバーをテスト可能。npm run sim で 1 台、npm run sim3 で 3 台の仮想デバイスを起動。

マルチプロトコル

Socket.IO(デバイス接続)・REST API・OSC の 3 プロトコルを同時提供。ポート 3000(HTTP/WS)+ 9100(UDP)。

起動(開発)

cd server
npm install
npm start

シミュレータ

npm run sim    # 1台
npm run sim3   # 3台同時
node simulator.js 5  # 任意台数

ダウンロード

最新リリースのインストーラーを GitHub Releases から入手できます。

macOS (Apple Silicon)

M1 / M2 / M3 / M4 搭載 Mac 用
arm64 ビルド

DMG をダウンロード

macOS (Intel)

Intel Mac 用
x64 ビルド

DMG をダウンロード

Windows (x64)

Windows 10 / 11 用
x64 インストーラー

EXE をダウンロード

すべてのリリース

過去バージョンや
リリースノートはこちら

GitHub Releases →

⚠️ 署名なしのため、初回起動時は macOS は「システム設定 → プライバシーとセキュリティ」、Windows は「詳細情報 → 実行」から許可が必要な場合があります。