案例
Omi 衍生 3D 打印版
Works with Nexting · DIY 案例
Nexting Devices SDK · 案例
Omi 衍生 3D 打印版
构建 Nexting 对 Omi 开源硬件谱系的 3D 打印改造版,烧录固件,并接到官方 Nexting App。
案例:构建 Omi 衍生的 3D 打印版
这是 Nexting 基于 Omi 开源硬件路线改造的 3D 打印版。我们重新设计了外壳几何、按键手感和夹持结构,并为它编写 Nexting 固件。它不是 Omi 官方硬件,也不使用 Omi 固件。
Omi 改造版的组成
| 部分 | 说明 |
|---|---|
| Omi 开源项目 | 提供外壳结构和硬件设计参考。 |
| Nexting 3D Print Edition | Nexting 改造后的外壳、接线、XIAO 固件和装配文件。 |
| Nexting Devices SDK | 提供设备与 Host 之间的通用加密 BLE/GATT Profile;需要 SDK 适配时按 Profile 接入。 |
下载文件
下面的链接就是制作这台 Omi 改造版所需的文件,按文件名下载即可。
| 你要什么 | 公开路径 | 用途 | 跳转 |
|---|---|---|---|
| 3D 打印外壳 | 当前默认的三件外壳文件。 | 打开外壳文件夹 | |
| 已构建固件 | firmware/pinclaw_zephyr/pinclaw_v2.2.4.uf2 | 仅用于对应的 Seeed XIAO nRF52840 Sense。 | 下载 UF2 |
| 接线与原理图 | docs/SCH_pinclaw_v1.0_diy.pdf | 焊接、供电和引脚核对;不要只凭照片接线。 | 查看原理图 |
| 完整说明 | hardware-opensource/README.md | BOM、装配顺序、固件和许可证的入口。 | 打开 GitHub 说明 |
连接 Nexting App
“下载文件”是制作设备的材料入口;这一节说明设备做好以后如何接入 Nexting App。设备不直接连接 Claude Code、Codex、Grok、Cursor 或云端 Agent,Nexting App 才是管理 BLE、设备身份和 Agent 会话的可信 Host。
下面两张图直接由当前发货文件渲染:第一张是 base.stl 外壳,第二张是 cover.stl 与 button.stl 的组合。它们与上面的公开下载路径一一对应。


完成硬件和固件
按上面的公开文件装好 Omi 改造版,刷入 pinclaw_v2.2.4.uf2;先在裸板上验证按键、录音和回放。在 App 中登录并扫描
打开 Nexting App,允许蓝牙权限,扫描附近设备。选择广播名称对应的 Omi 改造版。核对并授权
App 读取设备型号、固件版本和能力后,确认是 XIAO nRF52840 Sense,再完成配对。从 App 进入 Agent
配对后,PTT 录音通过 BLE 音频进入 App,再由 App 转发给云端 Agent;录音、回放和会话都在 App 中管理。
装配与首次开机
按“裸板 → 音频 → 外壳 → App”的顺序装配,完成每一步再进入下一步。
只接主控和 USB
给 XIAO nRF52840 Sense 上电,确认能进入 UF2 卷、串口能枚举、板载 LED 有反应。先不接扬声器和电池。接 PTT 与功放
按原理图连接 D4 按钮、A1/A2/A3 I2S、D6 功放使能、3V3 和 GND。MAX98357A 使用 3V3 供电。做裸板录音与回放
不装外壳时验证按住 PTT 开始录音、释放停止、短按播放,以及 LED 的启动、连接和录音状态。再装外壳和按钮
打印件先空装检查孔位与行程,再固定电路板、扬声器和电池。确认按钮可以完整释放。最后走 App 配对
确认产品固件能广播、音频链路能建立,再通过 Nexting App 配对。
固件结构
固件采用 Zephyr。下面的源码表说明每个模块的作用,便于你修改和构建。
| 源码位置 | 负责什么 | 改动后的验证 |
|---|---|---|
| src/button.c / button.h | D4 的按下、释放、消抖和短按/长按判断 | 录音、播放、重复按键与抖动测试 |
| src/transport.c / transport.h | BLE 音频、命令和心跳传输 | 服务 UUID、notify 顺序、断连重连与包序号 |
| src/codec.c、mic.c、speaker.c | PDM 采集、Opus 编码和 I2S 播放 | 录音时长、音频包 START/DATA/END 与播放声音 |
| src/device_id.c / storage.c | 设备编号和 NVS 持久化 | 重启后 BLE 名称与编号仍然稳定 |
| overlay/*.overlay | XIAO、功放和 I2S 的板级引脚描述 | 换 overlay 后必须检查实际焊接和声音输出 |
| prj.conf / CMakeLists.txt | Zephyr 功能开关和构建入口 | 干净构建,不受旧构建目录影响 |
# 在 firmware/pinclaw_zephyr 所在的仓库根目录执行
export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
export GNUARMEMB_TOOLCHAIN_PATH="$HOME/Library/Arduino15/packages/Seeeduino/tools/arm-none-eabi-gcc/9-2019q4"
export ZEPHYR_BASE="$HOME/ncs/zephyr"
cd hardware-opensource/firmware/pinclaw_zephyr
west build -b xiao_ble/nrf52840/sense . \
-DDTC_OVERLAY_FILE="$PWD/overlay/xiao_ble_sense_devkitv2-adafruit.overlay" \
--pristine
# 产物:build/zephyr/zephyr.uf2预构建 UF2 用于快速复现,源码构建用于开发。构建时使用与 XIAO nRF52840 Sense 匹配的 board 和 overlay。
接入 Nexting SDK
如果要把这台硬件接入 Nexting SDK,需要增加消息转换层和对应测试。可以先保留语音功能,再把 PTT 和状态灯接入公开 Profile。
| 适配任务 | 设备侧工作 | Host 侧工作 | 验收证据 |
|---|---|---|---|
| 设备身份 | 声明 model、hardware、firmware、capabilities 和唯一编号 | 拒绝缺字段、版本不兼容或身份变化的设备 | Device Info 快照与重启前后对比 |
| PTT 意图 | 把 press / release 转成 voice/1 的有界事件 | 校验会话、时效和重复事件,再交给当前 Agent | 按住、释放、重放、断连四组向量 |
| 状态灯 | 只渲染 Host 下发的有限状态,不自行猜 Agent 状态 | 发送 status/1 全量状态,断连时清空 | 连接、录音、完成、错误和清空向量 |
| 电量 | 报告电池服务或 Device Info 中约定的值 | 把电量当作提示,不把缺失电量当成控制权限 | 充电、放电、低电量和无电池设备测试 |
| 升级与回滚 | 保留可恢复的启动路径和版本信息 | 只向匹配硬件发放对应固件 | 刷错目标时不会破坏原固件的演练记录 |
故障排查
| 现象 | 检查方法 | 解决方向 |
|---|---|---|
| 电脑完全看不到 UF2 卷 | 使用数据线,双击 Reset,并确认主控是 XIAO Sense。 | 更换数据线或重新进入 bootloader。 |
| 有 UF2 卷但刷后不启动 | 检查 board、bootloader、overlay 是否与 XIAO Sense 匹配。 | 重新构建或下载对应版本的 UF2。 |
| LED 正常但没有声音 | 检查 3V3/GND、A1/A2/A3、D6、功放 SD 和扬声器极性。 | 按原理图重新核对音频接线。 |
| 能录音但 App 不回放 | 检查音频 START/DATA/END 顺序、包序号和 BLE 连接。 | 先修复音频链路,再检查 App。 |
| 产品能配对但没有 SDK 控件 | 检查固件是否声明 Profile,以及 Host 是否启用设备注册。 | 完成 Profile 适配和设备声明。 |
| 改完按键后状态重复 | 检查硬件消抖、事件 ID、Host 去重和断连清理。 | 按协议实现幂等处理。 |
提交问题时请提供主控型号、固件文件名、overlay、电脑系统、USB 枚举结果、LED 现象和复现步骤。
两种使用方式
Nexting App ↔ 云端 Agent
加密 BLE GATT ↔ Nexting Host ↔ Agent
语音产品使用 BLE 音频链路;SDK 设备使用公开 Profile。要接入 SDK,需要在固件或 Host 适配层把按键、LED 和电池状态转换成公开消息,再通过可信 Host 连接 Agent。
烧录固件
先确认主控型号
这份 UF2 适用于 Seeed XIAO nRF52840 Sense。请先核对开发板丝印和型号。保存当前可恢复状态
确认设备能开机、能录音、能回放,并保留当前固件文件。MultiPad 的 STM32 固件和其他 UF2 不适用于这块 XIAO。双击 Reset 进入 UF2 卷
XIAO 的 Reset 双击后,电脑应出现可移动磁盘;只在这个卷出现且型号正确时继续。拖入 pinclaw_v2.2.4.uf2
从 GitHub 的 firmware/pinclaw_zephyr 目录下载对应文件并拖入 UF2 卷。没有出现 UF2 卷时,请先排查 USB 和 Reset。回到产品路径验证
重连电池和 USB,确认按键、音频、LED 与 Nexting App 配对流程,再开始做 SDK Profile 适配。
把硬件映射到 SDK
| 硬件能力 | 当前产品路径 | SDK 目标 | 状态 |
|---|---|---|---|
| 按住 PTT | 开始/停止语音采集 | voice/1 的按住说话意图 | 需要 Profile 适配与向量 |
| LED | 本地录音/连接反馈 | status/1 的最小状态 | 需要声明灯光语义 |
| 电池 | 产品 App 的电量显示 | Device Info / battery service | 需要从真实广播核对 |
| 无屏幕 | 不显示文本 | 不声明 text/1;状态由 Host 或 LED 表达 | 可直接作为设计约束 |
| BLE | 产品语音链路 | 加密 GATT Profile 链路 | 协议层需要逐项验证 |
建议先接入一个 PTT 事件和一个状态灯,完成按住、释放、断连、重连和过期清理,再扩展音频、配置、用量和自定义灯效。
完成检查
| 阶段 | 验证动作 | 通过标准 |
|---|---|---|
| 1. 文件 | 从公开仓库取得外壳、原理图和 v2.2.4 UF2 | 链接和文件名可直接核对 |
| 2. 产品 | 按原产品路径完成录音、回放、LED 和配对 | 不依赖 SDK 适配也能稳定工作 |
| 3. 链路 | 抓取 BLE 服务并确认设备身份、方向和断连行为 | 没有把音频特征误标成 SDK Profile |
| 4. Profile | 只验证一个 PTT → voice/1 和一个状态 → status/1 | 消息、重放、过期和清理都有测试向量 |
| 5. 文档 | 记录型号、固件、引脚、回滚和限制 | 其他开发者能按同一份文件复现 |
其他案例
| 案例 | 为什么值得做 | 第一条可交付接口 | 状态 |
|---|---|---|---|
| XIAO 参考控制器 | 最快验证 SDK,不受外壳和复杂音频影响 | approval/1 + status/1 | 可作为下一步开发样板 |
| BLE Ring | 小带宽、旋转/点击天然适合通用物理意图 | rotary/1 + keys/1 | 需要真实硬件规格 |
| MultiPad | 多键、旋钮、屏幕适合验证可扩展映射 | keys/1 + rotary/1 + status/1 | 准备 Bridge 连接 |