先认识“谁在计算,谁在连接”
你不需要先学完整门电路或模拟电子学。本阶段只需要建立一个准确模型:开发板读取九个按钮,再把按键通过 USB 或蓝牙报告给电脑。
当前阶段:认识硬件 · 不接电池 · 不焊接整个系统只有四步
硬件负责“发生了什么”
按钮和电线让开发板知道:D0 现在被按下。它们不懂 F13,也不懂语音输入。
固件负责“这意味着什么”
ZMK 把位置 0 解释为 F13,然后通过标准键盘协议告诉电脑。
.uf2 文件就是编译后的固件。
XIAO nRF52840:这台迷你键盘的小电脑
你买的 Seeed Studio XIAO nRF52840 是一块开发板。它把微控制器、USB-C、天线、供电和可连接引脚放在一块很小的 PCB 上,让我们不用从裸芯片开始。
nRF52840,不是带传感器的 Sense 版本。Nordic 生产的微控制器芯片,内含 CPU、内存、Bluetooth Low Energy 无线能力和可编程引脚。
适合控制具体硬件任务的小型计算机。它不像 PC 那样运行桌面系统,而是持续运行一份专用固件。
Printed Circuit Board,印刷电路板。绿色或黑色板上的铜线把芯片、USB 和引脚连接起来。
既可以供电,也可以传输数据和刷写固件。必须使用数据线,而不是只能充电的线。
我们第一阶段会用到哪些引脚?
D0–D8 用来读取九个按钮; 是九个按钮共用的参考点。
面包板:不用焊接的临时连接器
830 孔面包板内部已经有金属夹片。你把开发板、按钮和杜邦线插进去,就能临时连接电路;拔掉后还可以重新组合。
中间区域
通常每五个孔在内部横向相连,中间凹槽把左右两侧断开。直接把四脚按钮插入面包板时,跨槽是最容易避免短接的默认摆法;如果按钮用两根线引出,只要两端落在不同节点,就不必强行跨槽。
两侧电源轨
标有红色和蓝色的长排孔通常纵向相连。我们会把蓝色轨用作共用 GND,但上电前仍要用万用表确认。
杜邦线:把面包板上的点接起来
你买的是 20 cm 公对公、母对母、公对母套装。这里的“公”是露出的金属针,“母”是可以套住排针的插孔。
面包板 ↔ 面包板
两端都是针,最适合在面包板孔之间跳线。
排针 ↔ 排针
两端都是插孔,适合连接两块已经焊接公排针的模块。
面包板 ↔ 模块
一端插面包板,一端套住模块公排针。
USB-A → USB-C 数据线
它同时承担三件事:给 XIAO 供电、把 UF2 固件传进开发板、让 XIAO 作为 USB 键盘向电脑发送按键。只支持充电的线无法完成后两件事。
每个按钮只有一条规则
按钮的一端接一个 GPIO,另一端接 GND。要理解开发板怎样判断按钮状态,需要先理解电压、高电平和低电平。
高低电平是相对于 GND 的电压状态
GND 是这块电路测量电压时的 0V 参考点。XIAO nRF52840 使用 3.3V 逻辑:GPIO 接近 3.3V 时会被判断为数字 1,称为高电平;GPIO 接近 GND 时会被判断为数字 0,称为低电平。芯片实际按数据手册规定的电压区间判断,并不要求测量值刚好等于 3.300V 或 0.000V。
高电平
GPIO 电压接近工作电压。在本项目的简化模型中,可以先理解为接近 3.3V。
低电平
GPIO 电压接近 GND,在本项目中也就是接近 0V。
GPIO 不能什么都不接
如果 GPIO 既没有被可靠拉向 3.3V,也没有被可靠拉向 GND,它就处于“悬空”状态,可能因为周围噪声随机读到 1 或 0。固件因此启用 GPIO_PULL_UP:使用芯片内部的上拉电阻,让按钮松开时的输入稳定在高电平。
3.3V
│
内部上拉电阻
│
GPIO ── 按钮 ── GND
松开:按钮断开 → GPIO 被上拉 → HIGH → 1
按下:按钮接通 → GPIO 接到 GND → LOW → 0
上拉电阻会限制从 3.3V 流向 GND 的电流,所以按下按钮不是把 3.3V 直接短路到 GND。危险的是用没有限流电阻的导线直接连接 3.3V 和 GND。
为什么按下按钮反而读到 0
“按钮按下”和数字 1 没有天然绑定关系。我们的接法让按钮按下时把 GPIO 接到 GND,因此按下会读到低电平 0。这叫“低电平有效”,overlay 中的 GPIO_ACTIVE_LOW 会把这个 0 正确解释为“按钮已按下”。
GPIO 读到高电平
按钮没有接通 GND。内部上拉电阻把输入拉向 3.3V,GPIO 读到 HIGH / 1,代表按钮松开。
GPIO 读到低电平
按钮接通后,GPIO 被拉到 GND,读到 LOW / 0。overlay 中的 GPIO_ACTIVE_LOW 告诉 ZMK:“这个低电平代表按下”。
ZMK 把位置映射成按键
D0 是位置 0,keymap 的第一个绑定是 &kp F13,所以电脑最终收到 F13,而不是“D0”。
从万用表到可工作的桌面迷你键盘
这一节记录我们实际走过的路径。它不是商品说明书,而是一份可以重新执行、可以用测量结果判断对错的实验记录。
1. 先学会万用表通断档
表笔怎么插
黑表笔 → COM
红表笔 → VΩmA
不要把红表笔插到 20A 插孔。
旋钮拨到带蜂鸣符号 ))) 的通断档。先让两根表笔尖互相接触:正常应蜂鸣并显示接近 0Ω。
四脚按钮怎么找两组
同一组两只脚:不按也蜂鸣
不同组两只脚:松开不响,按下才响
A 组 ↔ B 组 = 真正的开关两端
测试按钮时不要给电路通电。手不够用时,把表笔尖插在两个面包板孔里,或使用鳄鱼夹测试线固定。
VΩmA,黑表笔插 COM。2. 面包板不是“所有孔都相通”
A10 ─ B10 ─ C10 ─ D10 ─ E10 │ F10 ─ G10 ─ H10 ─ I10 ─ J10
中央凹槽
A11 ─ B11 ─ C11 ─ D11 ─ E11 │ F11 ─ G11 ─ H11 ─ I11 ─ J11
A10 ↔ B10:相通
A10 ↔ A11:不相通
A10 ↔ J10:通常不相通,按下跨节点的按钮后才可能导通
因此,像 D1 → A10、按钮一端接 E10,按钮另一端接 E13、GND → A13 的布局是成立的:第 10 行和第 13 行是两个独立节点。直接插入四脚按钮时优先跨槽;按钮用两根线引出时,只要两端接到不同节点即可。
3. 九个按钮的核心规则
Mac / Windows USB-C 数据线 → XIAO nRF52840
D0 ── Voice ──┐
D1 ── Up ──┤
D2 ── Enter ──┤── 公共 GND → XIAO GND
D3 ── Down ──┤
D4 ── Device ──┘
不接 3V3;不需要外接上拉电阻。
每个按钮的一端接一个 GPIO,另一端接公共 GND。蓝色电源轨只是方便汇总 GND 的连接总线;它不会自动接地,必须用一根线连接到 XIAO 的 GND。电源轨中间可能断开,必要时要桥接或用通断档确认。
4. 不需要五颗按钮也能逐个验证固件
实验阶段可以只用一颗按钮:GND 线保持不动,只把信号线从一个 GPIO 移到另一个 GPIO。USB 不必拔掉,但移动前要确认信号线不会碰到相邻引脚、3V3 或 5V。
信号线 → D0:F13
信号线 → D1:↑
信号线 → D2:Enter
信号线 → D3:↓
信号线 → D4:切换 Bluetooth profile
5. USB 刷写:Reset 很小,UF2 磁盘会自动消失
- 用 USB-C 数据线连接 Mac 或 Windows;两者都可以,不需要 Arduino IDE。
- 按 USB-C 左侧那颗很小的
RST/Reset按钮两次,进入 bootloader。 - 电脑出现 UF2 可移动磁盘后,复制 GitHub Actions artifact 中的
ai-voice-remote.uf2。 - 复制完成后磁盘自动消失是正常的:开发板正在重启并作为 USB 键盘重新出现。
- 不要刷
settings-reset.uf2,除非要清除蓝牙配对和持久设置。
6. USB 与 BLE 的验证顺序
USB 键盘
刷写后打开文本编辑器测试 Enter、↑、↓。Voice 是 F13,普通编辑器不会显示文字,需要用键盘事件查看器或支持功能键的测试工具。
蓝牙连接
在 Mac 或 Windows 的系统蓝牙设置里搜索并连接 AI Voice Remote。D4 不是普通键盘字符,而是切换下一个 Bluetooth profile;要测试它,需要第二台蓝牙主机,按下后等待几秒再配对。


本节图片:用户实拍的万用表、说明书和面包板接线;开发板 Reset 红圈图基于 Seeed Studio 官方 XIAO nRF52840 参考图。
这节课出现的新词
可由固件配置为输入或输出的通用引脚。本项目把 D0–D8 配置为按钮输入;D5–D8 仍需完成实机验证。
Ground,电路共同参考点。不是“没有用的负极”,而是所有电压判断的基准。
GPIO 电压处于芯片能够识别为逻辑 1 的范围;在本项目中可以先理解为接近 3.3V。
GPIO 电压处于芯片能够识别为逻辑 0 的范围;在本项目中可以先理解为接近 GND。
GPIO 没有被可靠拉高或拉低,容易受噪声影响而随机读到 1 或 0。
MCU 内部用一个较大电阻让输入在按钮松开时稳定为高,不需要额外焊接电阻。
低电平表示动作发生。本项目按钮按下会接地,所以使用 active low。
Bluetooth Low Energy,低功耗蓝牙。适合电池供电的键盘、鼠标和传感器。
Human Interface Device,键盘、鼠标等输入设备的标准协议。电脑无需专用驱动即可识别。
专为现代键盘设计的开源固件,负责按键扫描、USB/BLE HID、多主机配对和低功耗。
一种适合开发板拖拽刷写的固件文件格式。进入 bootloader 后复制到虚拟磁盘即可。
进入接线关卡前,先确认你能回答
这些勾选只保存在当前浏览器,用于个人复习;不会把 Roadmap 阶段自动标成完成。正式完成状态必须来自接线照片、测量和实机测试。