安装指南

从硬件连接到软件配置,5分钟内搭建完整的远程电台控制系统

📦 硬件准备

必需硬件

设备 规格/要求 说明
电台设备 支持CAT控制的业余电台 IC-7100、FT-991A、IC-R9000等
计算机 macOS或Linux 推荐8GB+内存,有USB接口
USB声卡 支持16kHz采样率 推荐USB Audio CODEC
串口线 USB转串口(RS-232) 用于电台控制
音频线 3.5mm音频线 电台音频输入/输出

可选硬件

设备 用途
ATR-1000 天调 自动天调、功率/SWR监测
RTL-SDR 频谱显示
NanoVNA 天线分析

连接示意图

    ┌─────────────┐      USB串口       ┌──────────┐
    │   电台设备   │◄──────────────────►│  计算机   │
    │  (IC-7100)  │      USB音频       │ (macOS)  │
    └──────┬──────┘◄──────────────────►└────┬─────┘
           │                                   │
           │ 射频                                │ 网络
           │                                   │
    ┌──────▼──────┐                      ┌────▼─────┐
    │    天线     │                      │  手机/平板 │
    └─────────────┘                      └──────────┘
                    

💻 系统要求

支持的操作系统

🍎
macOS

10.15+ (Catalina及以上)

推荐
🐧
Linux

Ubuntu 20.04+, Debian 10+

支持

软件依赖

软件 最低版本 用途 安装命令
Python 3.9+ 后端运行 brew install python@3.12
Hamlib 4.0+ 电台控制 brew install hamlib
PyAudio 0.2.11+ 音频采集 pip3 install pyaudio
Tornado 6.0+ Web服务器 pip3 install tornado

🚀 安装步骤

1

克隆仓库

git clone https://github.com/cheenle/UHRR_mac.git
cd UHRR_mac
2

安装系统依赖 (macOS)

# 安装Homebrew (如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装依赖
brew install python@3.12 hamlib portaudio ffmpeg

# 安装Python包
pip3 install pyaudio tornado numpy sounddevice soundfile
3

安装WDSP (可选,推荐)

# 下载WDSP源码
cd /tmp
git clone https://github.com/g0orx/wdsp.git
cd wdsp
make

# 安装库
sudo cp libwdsp.dylib /usr/local/lib/

# Linux用户
# sudo cp libwdsp.so /usr/local/lib/ && sudo ldconfig

💡 WDSP提供专业的NR2频谱降噪,显著提升接收音质

4

配置电台参数

编辑 MRRC.conf 文件:

# 电台配置
[HAMLIB]
rig_pathname = /dev/cu.usbserial-230  # 根据实际修改
rig_model = IC_M710                   # 电台型号
rig_rate = 4800                       # 波特率
stop_bits = 2

# 音频设备
[AUDIO]
outputdevice = USB Audio CODEC
inputdevice = USB Audio CODEC

# 服务器配置
[SERVER]
port = 8877
certfile = certs/fullchain.pem
keyfile = certs/radio.vlsc.net.key
5

启动rigctld(电台控制守护进程)

# IC-7100示例
rigctld -m 3070 -r /dev/cu.usbserial-230 -s 4800 -C stop_bits=2

# 或使用控制脚本
./mrrc_control.sh start-rigctld

📌 常用电台型号代码:IC-7100=3070, FT-991A=1035, IC-R9000=30003

⚙️ 配置文件详解

MRRC.conf 完整配置

[SERVER]
port = 8877                           # Web服务器端口
certfile = certs/fullchain.pem        # TLS证书路径
keyfile = certs/radio.vlsc.net.key    # TLS私钥路径
auth = FILE                           # 认证方式: FILE/PAM
db_users_file = MRRC_users.db         # 用户数据库
debug = False                         # 调试模式

[AUDIO]
outputdevice = USB Audio CODEC        # 音频输出设备
inputdevice = USB Audio CODEC         # 音频输入设备
sample_rate = 48000                   # 采样率
buffer_size = 256                     # 缓冲区大小

[HAMLIB]
rig_pathname = /dev/cu.usbserial-230  # 电台串口设备
rig_model = IC_M710                   # 电台型号代码
rig_rate = 4800                       # 波特率
data_bits = 8
stop_bits = 2
serial_handshake = None

[CTRL]
interval_smeter_update = 0.5          # S表更新间隔(秒)

[PANADAPTER]
sample_rate = 960000
center_freq = 68330000
gain = 10

[WDSP]
enabled = True
sample_rate = 48000
buffer_size = 256
nr2_enabled = True                    # 频谱降噪
nb_enabled = True                     # 噪声抑制
anf_enabled = False                   # 自动陷波
agc_mode = 3                          # AGC模式
bandpass_low = 300.0                  # 低切频率
bandpass_high = 2700.0                # 高切频率

查找音频设备

python3 -c "
import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
    info = p.get_device_info_by_index(i)
    print(f'{i}: {info[\"name\"]} (in:{info[\"maxInputChannels\"]}, out:{info[\"maxOutputChannels\"]})')
p.terminate()
"

▶️ 启动服务

方法一:使用控制脚本(推荐)

# 启动所有服务
./mrrc_control.sh start

# 查看状态
./mrrc_control.sh status

# 查看日志
./mrrc_control.sh logs 50

方法二:手动启动

# 1. 启动rigctld
rigctld -m 3070 -r /dev/cu.usbserial-230 -s 4800

# 2. 启动MRRC主服务
python3 ./MRRC

# 3. 启动ATR-1000代理(可选)
./mrrc_control.sh start-atr1000

配置为系统服务(macOS)

# 使用安装脚本
./mrrc_setup.sh install

# 或使用launchd
launchctl load ~/Library/LaunchAgents/com.user.mrrc.plist
launchctl start com.user.mrrc

访问系统

  • 桌面端:https://your-server:8877/
  • 移动端:https://your-server:8877/mobile_modern.html
  • NanoVNA:https://your-server:8877/nanovna/NanoVNA/

🔀 多实例部署

MRRC 支持在一台服务器上运行多个独立实例,每个实例连接不同的电台设备/声卡。

创建新实例

# 创建新实例(自动生成配置文件)
./mrrc_multi.sh create radio1

# 配置实例参数
# 编辑 MRRC.radio1.conf 设置音频设备、串口等

实例控制命令

# 启动指定实例
./mrrc_multi.sh start radio1

# 停止指定实例
./mrrc_multi.sh stop radio1

# 查看所有实例状态
./mrrc_multi.sh status

# 查看实例日志
./mrrc_multi.sh logs radio1 50

# 列出所有实例
./mrrc_multi.sh list

端口分配规则

实例名 Web端口 rigctld端口 Socket路径
radio1 8891 4531 /tmp/mrrc_radio1.sock
radio2 8892 4532 /tmp/mrrc_radio2.sock
radio3 8893 4533 /tmp/mrrc_radio3.sock

📌 每个实例有独立的天调学习参数,存储在 atr1000_tuner.json

🐳 Docker 部署

快速启动

# 构建镜像
docker-compose build

# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

多实例 Docker 部署

# 使用多实例配置
docker-compose -f docker-compose.multi.yml up -d

注意事项

  • 需要将串口设备映射到容器:devices: - /dev/cu.usbserial-230:/dev/ttyUSB0
  • 音频设备需要 PulseAudio 或 ALSA 配置
  • 建议使用 host 网络模式以获得最佳性能

🔧 故障排查

❌ 无法连接WebSocket

症状:页面显示"连接断开"

解决

  • 检查防火墙是否开放8877端口
  • 确认TLS证书路径正确
  • 查看MRRC日志:./mrrc_control.sh logs

❌ 电台无响应

症状:频率/模式无法改变

解决

  • 检查串口设备路径:ls /dev/cu.*
  • 确认rigctld已启动:ps aux | grep rigctld
  • 测试rigctl:rigctl -m 3070 f

❌ 无音频输出

症状:听不到接收音频

解决

  • 检查音频设备名称是否正确
  • 测试音频设备:./dev_tools/test_audio.py
  • 检查系统音量设置

❌ PTT不工作

症状:按住发射无反应

解决

  • 确认页面电源按钮已开启
  • 检查WebSocket连接状态
  • 查看PTT日志:./mrrc_control.sh logs | grep PTT

调试工具

# 测试音频
python3 dev_tools/test_audio.py

# 测试连接
python3 dev_tools/test_connection.py

# 调试音频页面
open dev_tools/debug_audio.html

遇到问题?

查看技术文档或加入社区讨论