发帖
5 0 0

【电子DIY作品】不想当Ai助手的音响不是好对讲机+Ai-WV01-32S

业余菜狗
论坛元老

29

主题

159

回帖

4916

积分

论坛元老

积分
4916
电子DIY 28 5 7 小时前
[i=s] 本帖最后由 业余菜狗 于 2026-7-31 15:07 编辑 [/i]

一句话了解它:基于 Ai-WV01-32S 和 Opus 音频编码,将 AiPi-PalChatV1 开发板改造为互联网对讲机,通过自建 WebSocket 中继服务器实现多设备实时语音对讲,支持 1-16 频道分组通话。

一、创作思路

1.1 项目起源

AiPi-PalChatV1 原本是一款 AI 语音助手开发板,板载了 VB6824 音频编解码芯片、麦克风、扬声器和 WiFi 模组,核心算力由 BL602 提供。这些硬件天然具备语音采集、编码、传输和播放的完整链路,非常适合实现互联网对讲机这一经典应用场景。

刚好手上有两块 AiPi-PalChatV1 开发板,便有了这个想法:把它们改造成一对无需依赖公网云服务、完全自主可控的互联网对讲机

1.2 主要用途

用途场景 说明
🏠家庭内部通话 楼上楼下、房间之间快速沟通
🏢小办公室/商铺 店员之间即时通讯,无需拨号
🏕️户外/临时组网 通过 4G 热点或局域网自建通信
🎓DIY 学习/教学 学习嵌入式网络编程、音频流传输
🔌物联网语音通信 作为智能设备的语音交互入口

1.3 设计理念

  • 自建服务器:不依赖第三方云服务,数据安全可控,无使用限制
  • 低成本硬件:Ai-WV01-32S(BL602)主控,资源占用低
  • Opus 编码:高压缩率下的优秀语音质量
  • 多频道隔离:1-16 个频道,不同群组互不干扰
  • PTT 操作:按住说话,松开即停,符合直觉

1.4 创新点

  1. 让 AI 开发板回归通信本质:不跑大模型,专注低延迟实时语音传输
  2. 极简中继服务器:仅 200+ 行 Python 代码,单核可支撑数十路并发
  3. 开箱即用:不需要账号、不需要认证,配网即用

二、硬件选型与引脚连接

2.1 核心硬件清单

组件 型号 作用
主控 Ai-WV01-32S(BL602) WiFi 通信 + 业务逻辑处理
音频编解码 VB6824 麦克风采集(ADC)+ 扬声器播放(DAC)
麦克风 驻极体麦克风 拾取人声
扬声器 3W/4Ω(2W/8Ω) 播放对方语音
按键 GPIO 按键 PTT(按住说话)
指示灯 板载 LED 连接/发射/接收状态指示
供电 Type-C / 电池 灵活供电

2.2 系统架构框图

text

┌─────────────────────────────────────────────────────────────────┐
│                     AiPi-PalChatV1 硬件                        │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐                │
│  │ 麦克风    │───▶│ VB6824   │───▶│ BL602    │                │
│  │ (MEMS)   │    │ (ADC)   │    │ (主控)   │                │
│  └──────────┘    └──────────┘    └────┬─────┘                │
│                                        │                       │
│  ┌──────────┐    ┌──────────┐         │                       │
│  │ 扬声器    │◀───│ VB6824   │         │                       │
│  │ (2W/8Ω)  │    │ (DAC)   │         │                       │
│  └──────────┘    └──────────┘         │                       │
│                                        │                       │
│  ┌──────────┐                          │                       │
│  │ PTT按键   │─────────────────────────┘                       │
│  └──────────┘                                                  │
└──────────────────────────┬─────────────────────────────────────┘
                           │ WiFi (WSS)
                           ▼
┌─────────────────────────────────────────────────────────────────┐
│                    中继服务器 (自建)                           │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │           intercom_server.py (Python + websockets)      │   │
│  │                                                         │   │
│  │   设备A ──▶ 频道1 ◀── 设备B                            │   │
│  │   设备C ──▶ 频道2 ◀── 设备D                            │   │
│  │                                                         │   │
│  └─────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

三、功能特性

功能 说明
🗣️ PTT 实时通话 按住按键说话,松开即停,低延迟转发
📡 WebSocket 中继 设备间通过 WSS 协议实时转发 Opus 音频流
📶 多频道支持 1-16 个频道,不同频道语音隔离,互不干扰
🔌 灵活部署 支持公网服务器或局域网自建中继
🔋 低功耗设计 BL602 在语音传输场景下功耗表现优秀(约1W)
⚡ 一键切换模式 对讲机模式 ↔ AI 语音助手模式,编译配置即可切换

四、系统架构(通信流程)

text

设备A(说话方)                中继服务器                    设备B(收听方)
      │                            │                            │
      │  1. WebSocket 连接         │                            │
      │───────────────────────────▶│                            │
      │  2. 注册到频道 1           │                            │
      │───────────────────────────▶│                            │
      │                            │  3. WebSocket 连接         │
      │                            │◀───────────────────────────│
      │                            │  4. 注册到频道 1           │
      │                            │───────────────────────────▶│
      │                            │                            │
      │  5. 按住 PTT,采集语音     │                            │
      │  (Opus 编码,分片发送)     │                            │
      │───────────────────────────▶│                            │
      │                            │  6. 转发至频道 1 所有设备  │
      │                            │───────────────────────────▶│
      │                            │                            │  ◀── 实时播放
      │  7. 松开 PTT,结束发射     │                            │
      │───────────────────────────▶│                            │
      │                            │  8. 转发结束通知           │
      │                            │───────────────────────────▶│

通信协议说明

消息类型 方向 格式 说明
注册 设备→服务器 {"type":"register","channel":1} 加入指定频道
音频数据 设备→服务器 {"type":"audio","data":"<base64>"} Opus 编码的语音分片
开始说话 设备→服务器 {"type":"start_talking"} PTT 按下通知
停止说话 设备→服务器 {"type":"stop_talking"} PTT 松开通知
转发数据 服务器→设备 {"type":"audio","data":"<base64>","from":"xx"} 转发同频道音频

五、源码与仓库

5.1 源码仓库

https://gitee.com/amateur-dog/aipi-palchatv1-ptt

项目已开源,包含完整的对讲机客户端与中继服务器源码:

text

aipi-palchatv1/
├── server/
│   └── intercom_server.py      # 中继服务器(Python + websockets)
├── aipi-palchatv1/
│   ├── intercom_client.c/h     # 对讲机客户端核心逻辑
│   ├── intercom_config.h       # 对讲机配置(服务器地址/频道)
│   ├── key.c                   # PTT 按键处理
│   └── xiaozhi_client/
│       └── ws_demo.c           # WebSocket 通信层
├── os/                         # BL602 操作系统与 SDK
└── build_out/                  # 编译输出目录

5.2 依赖说明

依赖项 版本要求 说明
Python 3.7+ 运行中继服务器
websockets 最新版 Python WebSocket 库
RISC-V GCC 项目已包含 编译 BL602 固件
make 任意版本 构建工具

六、服务器部署指南

6.1 安装与启动

bash

# 1. 进入服务端目录
cd /root/aipi-palchatv1/server

# 2. 安装依赖
pip install websockets

# 3. 启动中继服务器
python3 intercom_server.py

正常启动日志:

text

对讲机中继服务器启动: ws://0.0.0.0:8765
服务器就绪,等待设备连接...

注意:部署在公网时请确保防火墙开放 8765 端口。部署在局域网则无需额外配置。

6.2 设备端配置

编辑 aipi-palchatv1/intercom_config.h

c

// 启用对讲机模式(禁用 AI 语音助手功能)
#define INTERCOM_MODE 1

// 中继服务器地址(修改为你的服务器 IP 或域名)
#define INTERCOM_SERVER_HOST    "192.168.1.100"   // 改为实际 IP
#define INTERCOM_SERVER_PORT    8765

// 默认频道(1-16)
#define INTERCOM_DEFAULT_CHANNEL 1
配置项 说明
INTERCOM_MODE 1=对讲机模式,0=AI 语音助手模式
INTERCOM_SERVER_HOST 中继服务器的 IP 地址或域名
INTERCOM_SERVER_PORT 服务器端口,默认 8765
INTERCOM_DEFAULT_CHANNEL 开机默认频道(1-16)

提示:设备 ID 自动使用 WiFi MAC 地址生成,多台设备无需手动配置 ID。

七、使用方法

7.1 开机启动

开发板上电后,串口日志(115200 baud)应显示:

text

[INTERCOM] Starting in intercom mode
[INTERCOM] Connect task: waiting for WiFi...
[INTERCOM] WiFi connected, starting intercom...
[INTERCOM] Connecting to ws://192.168.1.100:8765
[INTERCOM] WebSocket connected
[INTERCOM] Registered successfully

7.2 PTT 通话操作

操作 功能
按住 PTT 按键 开始说话(采集 → 编码 → 发送)
松开 PTT 按键 停止说话(释放发射通道)

7.3 LED 状态指示

LED 状态 含义
熄灭 空闲 / 未连接服务器
慢速闪烁(1Hz) 正在连接服务器 / WiFi 未就绪
快速闪烁(5Hz) 本机正在发射语音
常亮 正在接收并播放对方语音

八、成品展示

8.1 实物照片

IMG_20260707_194629_compressed.jpeg

8.2 语音交互演示视频

──── 0人觉得很赞 ────

使用道具 举报

非常棒。狗哥,源码好像是私有仓库。
WT_0213 发表于 2026-7-31 14:19
非常棒。狗哥,源码好像是私有仓库。

啊?你们看不到吗?
太强了,给狗哥点个赞
太强了,给狗哥点个赞
噢哟,狗哥出手,天下无敌~
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 31223 个
  • 话题数: 42319 篇