ページコンテンツ
はろーわーるど:音楽家の朝比奈幸太郎です。
金田式バランス電流伝送DC録音のアナログテープ録音は改造のしやすいB77を使っています。
せっかくなので、他の試してみたかった改造、つまりB77の遠隔操作をやってみようと思うわけです。
昨今は安価で性能のよいチップがたくさん売られていますので、そこまで難しくないと思います。
電子接点が採用されているB77なので、比較的簡単にできそう・・・とトライしてみます。
物理スイッチのA77でも、REMOTE端子が搭載されているモデル(MKⅡからは基本的に搭載)だとそこまで難しくないと思います。
今回は、wifiに対応しているESP32(ESP32 DevKitC)を使います。
※現在加筆中で、こちらの記事は現状アイディアのメモになります。実装しましたら追記します。
全体像を整理
┌────────────┐ Wi-Fi ┌─────────────┐
│ スマホなど │ ←――――――――→ │ ESP32 MCU │
└────────────┘ └─┬────────────┘
│GPIO (3.3 V)
▼
┌─────────────────┐
│ SSR / Opto │ 5 V駆動
└─┬─┬─┬─┬─┬─┬────┘
│ │ │ │ │ │
7-pin DIN REMOTE ───┘ │ │ │ │ │
(Pin1=GND, Pin2=STOP, …) │ │ │ │ │
▼ ▼ ▼ ▼ ▼
B77 Tape Transport
全体像と前提を把握しておきましょう。
B77は背面に「7 pin DINのREMOTE端子」を標準装備
- ここに無電圧の短絡信号(いわゆる「ドライ接点」)を与えるだけで
PLAY/STOP/FF/REW/REC を切り替え可能。 - したがって 内部配線を切らずに 制御できるのが最も安全・確実。
また、流れとしてはスマホを使うのが手近にあるデバイスとしては有効だと考えます。
スマホ → Wi-Fi/BLE → ESP32 → ソリッドステートリレー(SSR)
- ESP32 は低価格・Wi-Fi内蔵・GPIO豊富。
- SSR で DIN 端子の各ピンを GND に短絡するだけで操作完了。
- WebUI/MQTT どちらでも実装可。
B77 と ESP32 は完全に絶縁
- フォトカプラ or SSR で 600 V 以上の耐圧を確保し
ビンテージ機器のノイズからマイコンを保護。
必要なものリスト(実物名・型番付き)
種類 | 品名・型番 | 用途 | 備考 |
---|---|---|---|
✅ ESP32マイコン | ESP32-DevKitC | 制御の中心 | Amazonで入手可 |
✅ SSRモジュール | AQW210、または 4ch SSRボード(3.3V対応) | 接点の絶縁制御 | 無音&長寿命 |
✅ ケーブル(信号線) | AWG 24〜26の撚り線 or ジャンパーワイヤー | ESP32 → SSR間 | 基板ピンに直刺し or はんだ |
✅ ケーブル(制御線) | オーディオ用シールド線(2芯 or 5芯) | SSR → B77 REMOTE端子 | 外部ノイズに強い線を推奨 |
✅ コネクタ | DIN 7ピン プラグ(ハンダ式) | B77のREMOTE端子に接続 | 秋月電子などで入手可 |
✅ はんだごて | 30W程度の温調式 | DINプラグの組み立てには必須 | 精密用推奨(goot CXR-41など) |
✅ 熱収縮チューブ | φ1.5〜2.0mm | はんだ部分の絶縁保護 | 絶対おすすめ |
✅ ケース | タカチ UC5-10-3N 等 | ESP32とSSRを収納 | 絶縁&見た目もスマート |
作業手順【超具体的】
① SSR〜DINプラグ側ケーブルを作る(B77接続部)
🔌 使用ケーブル例:
- 2芯シールド線 × 3本(または5芯マルチケーブル)
- 端子側:DINプラグ(ハンダ式)
- 反対側:SSR出力(端子ねじ or ピン)
🧰 手順:
- DINプラグ(ハンダ式)を用意
→ ピン番号1〜6が刻印されている。B77では以下を使う:
機能 | DINピン | 色例(自分で決めてOK) |
---|---|---|
GND共通 | Pin 1 | 黒 |
PLAY | Pin 3 | 赤 |
STOP | Pin 2 | 青 |
REW | Pin 5 | 緑 |
FF | Pin 4 | 黄 |
REC | Pin 6 | 白 |
- ケーブルを必要本数用意(5芯シールド or 2芯×3本)
→ DINプラグのピンに1本ずつハンダ付け(丁寧に!) - ハンダ後、熱収縮チューブで絶縁保護
→ 最後にプラグのシェルを組み立てて完了
② ESP32〜SSRの配線(制御部)
🔌 使用ケーブル例:
- ジャンパーワイヤー(メス–メス) or
- AWG24撚り線 + ピンヘッダはんだ済み
🧰 手順:
- ESP32 の GPIOピン(例:GPIO12〜GPIO26)から SSR モジュールの IN端子へ接続(GND共通)
- SSR の出力端子(NO/NC)から、上記で作成した DINプラグの該当ピンへ接続
- DINピン1(GND)と、SSR出力側の共通GNDは必ず1本で接続!
📦 接続全体図
[ESP32 GPIO]──(ジャンパー)──▶[SSR入力]
[SSR出力]──(撚り線 or AWGシールド)──▶[DINプラグ]
DINピン:
1 → GND(黒)← SSR出力GND共通
2 → STOP(青)
3 → PLAY(赤)
4 → FF(黄)
5 → REW(緑)
6 → REC(白)
→ DINプラグをB77背面に挿して完了!
接続箇所 | はんだ必要? | 理由 |
---|---|---|
DINプラグ | ✅ 必須 | プラグがハンダ式(信頼性あり) |
ESP32→SSR | ⭕ or ❌ | ジャンパーワイヤーなら不要/撚り線なら必要 |
SSR→DIN線 | ⭕ or ❌ | ネジ端子式なら不要/直配線なら必要 |
参考コード(Arduino/ESP32)
/**
* B77 Remote Wi-Fi Bridge (ESP32) – example
* API: http://<ip>/cmd?key=play …etc.
*/
#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "YourSSID";
const char* pass = "YourPass";
WebServer server(80);
// GPIO → SSR (Active-HIGH)
const int pinPlay = 12;
const int pinStop = 13;
const int pinFF = 14;
const int pinREW = 27;
const int pinRec = 26;
void handleCmd() {
String key = server.arg("key");
int dur = 250; // ms
auto pulse = [&](int gpio){
digitalWrite(gpio, HIGH);
delay(dur);
digitalWrite(gpio, LOW);
};
if (key == "play") pulse(pinPlay);
else if (key == "stop") pulse(pinStop);
else if (key == "ff") pulse(pinFF);
else if (key == "rew") pulse(pinREW);
else if (key == "rec") pulse(pinRec);
server.send(200, "text/plain", "OK");
}
void setup(){
pinMode(pinPlay, OUTPUT); pinMode(pinStop, OUTPUT);
pinMode(pinFF, OUTPUT); pinMode(pinREW, OUTPUT);
pinMode(pinRec, OUTPUT);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) delay(100);
server.on("/cmd", handleCmd);
server.begin();
}
void loop(){ server.handleClient(); }
※GPIO番号は基板と環境に合わせて変更してください。
※リセット時にブートピンへ影響しないGPIOを選択。
具体的な接続方法
ここからESP32とB77を繋ぎます。
ESP32は「SSR(無電圧リレー)」を介して、B77背面のREMOTE端子(7ピンDIN)に接続。
項目 | 内容 | 理由 |
---|---|---|
ESP32 GPIO(デジタル出力) | → SSR(ソリッドステートリレー) → B77 | 直接短絡では危険なので絶縁が必要 |
SSRの出力側 | → B77 REMOTE端子の「GND ↔ 各操作ピン」を短絡 | B77の設計仕様に従った「無電圧接点制御」 |
接点の種類 | フォトカプラ or フォトMOS SSR | 接点スパークなし。動作音なし。長寿命 |
ピン番号 | 接続先 | 操作 | ESP32対応GPIO | SSR CH |
---|---|---|---|---|
1 | GND | 全操作共通 | — | — |
2 | STOP | 停止命令 | GPIO 13 | SSR 2 |
3 | PLAY | 再生命令 | GPIO 12 | SSR 1 |
4 | FAST FORWARD | 早送り | GPIO 27 | SSR 4 |
5 | REWIND | 巻き戻し | GPIO 14 | SSR 3 |
6 | RECORD | 録音命令 | GPIO 26 | SSR 5 |
7 | 未使用 or メーカー別機能 | — | — | — |
スマホ操作の全体像
① スマホのWi-Fi設定
↓
② ブラウザでアドレス入力(例:http://192.168.1.100)
↓
③ Web画面が開く(↓例)
┌──────────────┐
│ 🎛 REVOX B77 Controller │
│ ───────────── │
│ ▶︎ PLAY │
│ ■ STOP │
│ ⏪ REWIND │
│ ⏩ FAST FORWARD │
│ ⬤ RECORD │
└──────────────┘
↓
④ ボタンをタップするとリアルにB77が反応!
実装方法:Web UIの仕組み
ESP32には簡易Webサーバを内蔵させ、スマホから操作できるHTML画面を提供させます。
ESP32内に格納されるファイル構成例として
main.cpp ← Arduinoコード
index.html ← Web UI画面(操作ボタン)
となります。
index.html の例(ESP32に埋め込む)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>REVOX B77 Remote</title>
<style>
body { font-family: sans-serif; text-align: center; background: #fafafa; }
h1 { color: #333; }
button {
padding: 1em 2em;
margin: 1em;
font-size: 1.2em;
border: none;
border-radius: 8px;
background: #007bff;
color: white;
}
button:hover {
background: #0056b3;
}
</style>
</head>
<body>
<h1>🎛 REVOX B77 Controller</h1>
<button onclick="send('play')">▶︎ PLAY</button>
<button onclick="send('stop')">■ STOP</button>
<button onclick="send('rew')">⏪ REWIND</button>
<button onclick="send('ff')">⏩ FAST FORWARD</button>
<button onclick="send('rec')">⬤ RECORD</button>
<script>
function send(cmd) {
fetch(`/cmd?key=${cmd}`);
}
</script>
</body>
</html>
実際の手順としては、次のようになります。
手順 | 内容 |
---|---|
① | スマホを ESP32と同じWi-Fiネットワークに接続(自宅Wi-Fiなど) |
② | スマホのブラウザ(Safari / Chrome)を起動 |
③ | アドレスバーに http://192.168.1.100 (※ESP32のIPアドレス)を入力 |
④ | 上記の操作画面が表示され、ボタンタップでB77を操作可能 |
※ESP32がWi-Fiに接続していれば、どのスマホでも使えます(PWA対応でアイコン化も可能)
ESP32のIPアドレスが変動すると、スマホからアクセスできなくなるので注意!
→ IP固定化またはmDNS(例:http://revox.local
)で回避可能
PWA化アプリ風 UI
/data ← LittleFS 用アップロードフォルダ
├─ index.html ← メイン画面(レスポンシブ)
├─ manifest.json ← PWA メタ情報
└─ sw.js ← Service Worker(オフライン対応)
main.cpp ← ESP32 ファームウェア
index.html をスマホのブラウザで開くとホーム画面追加ボタンが表示され、インストールすると全画面・アイコン付き“ネイティブアプリ風”に変身します。
参考までに簡単なHTMLのサンプルをと各種ファイルをメモしておきます。
index.htmlサンプル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="manifest" href="/manifest.json">
<title>REVOX B77 Remote</title>
<style>
:root { --pri:#007bff; --bg:#fafafa; --txt:#222; }
body { font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
text-align:center; margin:0; background:var(--bg); color:var(--txt);}
h1 { font-size:1.5rem; padding:1rem 0; }
.btn { display:block; width:80%; max-width:300px; margin:1rem auto;
padding:1rem; font-size:1.2rem; border:none; border-radius:12px;
background:var(--pri); color:#fff; box-shadow:0 4px 8px #0001;
transition:transform .15s ease;}
.btn:hover{ transform:translateY(-3px); }
</style>
</head>
<body>
<h1>🎛 REVOX B77 Controller</h1>
<button class="btn" onclick="send('play')">▶︎ PLAY</button>
<button class="btn" onclick="send('stop')">■ STOP</button>
<button class="btn" onclick="send('rew')">⏪ REW</button>
<button class="btn" onclick="send('ff')">⏩ FF</button>
<button class="btn" onclick="send('rec')">⬤ REC</button>
<script>
if ('serviceWorker' in navigator) navigator.serviceWorker.register('/sw.js');
// API 送信関数
function send(cmd){ fetch(`/cmd?key=${cmd}`); }
</script>
</body>
</html>
manifest.jsonサンプル
{
"name": "REVOX B77 Remote",
"short_name": "B77 Remote",
"start_url": "/",
"display": "standalone",
"background_color": "#fafafa",
"theme_color": "#007bff",
"icons":[
{ "src": "/icon-192.png", "sizes":"192x192", "type":"image/png" },
{ "src": "/icon-512.png", "sizes":"512x512", "type":"image/png" }
]
}
sw.js
(最小オフラインキャッシュ)
self.addEventListener('install',e=>{
e.waitUntil(caches.open('b77-cache').then(c=>
c.addAll(['/', '/index.html','/manifest.json'])
));
});
self.addEventListener('fetch',e=>{
e.respondWith(caches.match(e.request).then(r=>r||fetch(e.request)));
});
ESP32 への HTML 格納手順(Arduino IDE)
- ESP32 ファイルシステムツール(Arduino ESP32FS)を導入
- スケッチと同じフォルダに
data/
ディレクトリを作成 - 上記
index.html
manifest.json
sw.js
icon-*.png
を格納 - Arduino IDE のメニュー 「ツール → ESP32 Sketch Data Upload」 を実行
→ LittleFS にファイルが書き込まれる - つづけて通常のスケッチ書込み (
main.cpp
) を実行
3️⃣ GPIO 割り当てと配線
B77機能 | GPIO番号 | SSR(フォトMOS)出力 | DINピン | 備考 |
---|---|---|---|---|
PLAY | 12 | CH1 | 3 | |
STOP | 13 | CH2 | 2 | |
REW | 14 | CH3 | 5 | |
FF | 27 | CH4 | 4 | |
REC | 26 | CH5 | 6 | 安全のため長押し0.5 s設定 |
GND は GPIO 側と DIN Pin1 を一点接地。
SSR 出力は無電圧短絡なので B77 内部回路に負担をかけません。
4️⃣ main.cpp
― 完全コード(Arduino/ESP32)
/**
* REVOX B77 Wi-Fi Remote v1.0
* ◇ GPIO → SSR パルスで 7-pin DIN Remote を短絡
* ◇ LittleFS から PWA ファイル群を配信
*
* 2025/07 作成例
*/
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <LittleFS.h>
const char* SSID = "YourSSID";
const char* PASS = "YourPass";
// ==== GPIO 定義 ====
const int PIN_PLAY = 12;
const int PIN_STOP = 13;
const int PIN_REW = 14;
const int PIN_FF = 27;
const int PIN_REC = 26;
AsyncWebServer server(80);
//------------------------
// 接点を 250 ms パルスで短絡
void pulse(int gpio, uint16_t ms=250){
digitalWrite(gpio, HIGH);
delay(ms);
digitalWrite(gpio, LOW);
}
//------------------------
void handleCmd(AsyncWebServerRequest* req){
if(!req->hasParam("key")) { req->send(400,"text/plain","NG"); return; }
String k = req->getParam("key")->value();
if (k=="play") pulse(PIN_PLAY);
else if (k=="stop") pulse(PIN_STOP);
else if (k=="rew") pulse(PIN_REW);
else if (k=="ff") pulse(PIN_FF);
else if (k=="rec") pulse(PIN_REC, 500); // REC は長押し
req->send(200,"text/plain","OK");
}
//------------------------
void setup(){
// GPIO 初期化
pinMode(PIN_PLAY, OUTPUT); pinMode(PIN_STOP, OUTPUT);
pinMode(PIN_REW , OUTPUT); pinMode(PIN_FF , OUTPUT);
pinMode(PIN_REC , OUTPUT);
// オフ状態
digitalWrite(PIN_PLAY, LOW); /* …他も同様 */
// LittleFS マウント
LittleFS.begin();
// Wi-Fi 接続
WiFi.begin(SSID, PASS);
while(WiFi.status()!=WL_CONNECTED) delay(200);
Serial.println(WiFi.localIP());
// 静的ファイル配信
server.serveStatic("/", LittleFS, "/").setDefaultFile("index.html");
// 操作 API
server.on("/cmd", HTTP_GET, handleCmd);
server.begin();
}
void loop(){}
ESP32をSoft-APモードで動かす
仮に現場に母艦となるwifiシステムがない場合はどうすればいいでしょうか?
Wi-Fiがない現場でも、ESP32を「Soft-APモード(アクセスポイント)」で動かせば問題ありません。
ステップ | 操作内容 |
---|---|
① | 電源ON(USB給電)するとESP32がWi-Fiを発信(例:SSID「B77-Remote」) |
② | スマホのWi-Fi設定画面を開き、表示された「B77-Remote」に接続 |
③ | スマホのブラウザで http://192.168.4.1 にアクセス |
④ | 操作画面(PWA UI)が開き、B77を操作できる(PLAY / STOPなど) |
Soft-APモードの設定方法
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <LittleFS.h>
AsyncWebServer server(80);
void setup() {
// ① Soft-APとして起動(自前でWi-Fi発信)
WiFi.softAP("B77-Remote", "revox123"); // SSID, PASS
// ② LittleFSをマウント(Web UIファイルを読む)
LittleFS.begin();
// ③ Web UI配信
server.serveStatic("/", LittleFS, "/").setDefaultFile("index.html");
server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest* req){
String key = req->getParam("key")->value();
// GPIO制御などここに実装
req->send(200, "text/plain", "OK");
});
server.begin();
}
void loop(){}
スマホ側の設定(iOS / Android 共通)
📲 Wi-Fi接続設定
- 設定アプリ → Wi-Fi → 「B77-Remote」を選択
- パスワード(例:
revox123
)を入力して接続 - ※ スマホは「インターネットがないWi-Fi」に警告を出すがそのまま続行OK
🌐 アクセスURL
- ブラウザ(Safari / Chromeなど)で
→http://192.168.4.1
を直接入力 - 初回アクセス時にPWA画面がキャッシュされてオフライン使用OKに
🔋 給電方法(再確認)
- USBモバイルバッテリー(1A以上出力)
- 電源ONで自動でWi-Fiが立ち上がる
🎒 モバイルスタジオ/ロケ録音にも完全対応できます!

音楽家:朝比奈幸太郎
神戸生まれ。2025 年、40 年近く住んだ神戸を離れ北海道・十勝へ移住。
録音エンジニア五島昭彦氏より金田式バランス電流伝送 DC 録音技術を承継し、
ヴィンテージ機材で高品位録音を実践。
ヒーリング音響ブランド「Curanz Sounds」でソルフェジオ周波数音源を配信。
“音の文化を未来へ”届ける活動を展開中。