案例

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 EditionNexting 改造后的外壳、接线、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.mdBOM、装配顺序、固件和许可证的入口。打开 GitHub 说明

连接 Nexting App

“下载文件”是制作设备的材料入口;这一节说明设备做好以后如何接入 Nexting App。设备不直接连接 Claude Code、Codex、Grok、Cursor 或云端 Agent,Nexting App 才是管理 BLE、设备身份和 Agent 会话的可信 Host。

下面两张图直接由当前发货文件渲染:第一张是 base.stl 外壳,第二张是 cover.stl 与 button.stl 的组合。它们与上面的公开下载路径一一对应。

当前发货版 3D 打印外壳 base.stl 渲染
外壳:current-version/base.stl
当前发货版 cover.stl 与 button.stl 组合渲染
面板与按键:current-version/cover.stl + button.stl
  1. 完成硬件和固件

    按上面的公开文件装好 Omi 改造版,刷入 pinclaw_v2.2.4.uf2;先在裸板上验证按键、录音和回放。
  2. 在 App 中登录并扫描

    打开 Nexting App,允许蓝牙权限,扫描附近设备。选择广播名称对应的 Omi 改造版。
  3. 核对并授权

    App 读取设备型号、固件版本和能力后,确认是 XIAO nRF52840 Sense,再完成配对。
  4. 从 App 进入 Agent

    配对后,PTT 录音通过 BLE 音频进入 App,再由 App 转发给云端 Agent;录音、回放和会话都在 App 中管理。
这条产品链路使用现有 BLE 音频协议;BLE 本身不等于已经支持 voice/1、status/1 等公开 SDK Profile。要做 SDK 适配,继续看“接入 Nexting SDK”。

装配与首次开机

按“裸板 → 音频 → 外壳 → App”的顺序装配,完成每一步再进入下一步。

  1. 只接主控和 USB

    给 XIAO nRF52840 Sense 上电,确认能进入 UF2 卷、串口能枚举、板载 LED 有反应。先不接扬声器和电池。
  2. 接 PTT 与功放

    按原理图连接 D4 按钮、A1/A2/A3 I2S、D6 功放使能、3V3 和 GND。MAX98357A 使用 3V3 供电。
  3. 做裸板录音与回放

    不装外壳时验证按住 PTT 开始录音、释放停止、短按播放,以及 LED 的启动、连接和录音状态。
  4. 再装外壳和按钮

    打印件先空装检查孔位与行程,再固定电路板、扬声器和电池。确认按钮可以完整释放。
  5. 最后走 App 配对

    确认产品固件能广播、音频链路能建立,再通过 Nexting App 配对。
需要返修时,先拆电池或断开 USB,再拆外壳。LiPo、电源和功放部分不适合在通电状态下反复插拔;任何闻到异味、芯片异常发热或电池鼓包的情况,都应立即停止实验。

固件结构

固件采用 Zephyr。下面的源码表说明每个模块的作用,便于你修改和构建。

源码位置负责什么改动后的验证
src/button.c / button.hD4 的按下、释放、消抖和短按/长按判断录音、播放、重复按键与抖动测试
src/transport.c / transport.hBLE 音频、命令和心跳传输服务 UUID、notify 顺序、断连重连与包序号
src/codec.c、mic.c、speaker.cPDM 采集、Opus 编码和 I2S 播放录音时长、音频包 START/DATA/END 与播放声音
src/device_id.c / storage.c设备编号和 NVS 持久化重启后 BLE 名称与编号仍然稳定
overlay/*.overlayXIAO、功放和 I2S 的板级引脚描述换 overlay 后必须检查实际焊接和声音输出
prj.conf / CMakeLists.txtZephyr 功能开关和构建入口干净构建,不受旧构建目录影响
从源码构建已知的 XIAO 产品路径bash
# 在 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 中约定的值把电量当作提示,不把缺失电量当成控制权限充电、放电、低电量和无电池设备测试
升级与回滚保留可恢复的启动路径和版本信息只向匹配硬件发放对应固件刷错目标时不会破坏原固件的演练记录
设备只上报物理意图;Agent 映射、权限判断、凭证和会话由可信 Host 管理。设备固件不保存 Agent 凭证。

故障排查

现象检查方法解决方向
电脑完全看不到 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 现象和复现步骤。

两种使用方式

语音产品使用 BLE 音频链路;SDK 设备使用公开 Profile。要接入 SDK,需要在固件或 Host 适配层把按键、LED 和电池状态转换成公开消息,再通过可信 Host 连接 Agent。

烧录固件

  1. 先确认主控型号

    这份 UF2 适用于 Seeed XIAO nRF52840 Sense。请先核对开发板丝印和型号。
  2. 保存当前可恢复状态

    确认设备能开机、能录音、能回放,并保留当前固件文件。MultiPad 的 STM32 固件和其他 UF2 不适用于这块 XIAO。
  3. 双击 Reset 进入 UF2 卷

    XIAO 的 Reset 双击后,电脑应出现可移动磁盘;只在这个卷出现且型号正确时继续。
  4. 拖入 pinclaw_v2.2.4.uf2

    从 GitHub 的 firmware/pinclaw_zephyr 目录下载对应文件并拖入 UF2 卷。没有出现 UF2 卷时,请先排查 USB 和 Reset。
  5. 回到产品路径验证

    重连电池和 USB,确认按键、音频、LED 与 Nexting App 配对流程,再开始做 SDK Profile 适配。
本节针对 Seeed XIAO nRF52840 Sense。其他主控需要使用对应的固件和烧录方法。

把硬件映射到 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 连接