Hardware basics · Level 1

先认识“谁在计算,谁在连接”

你不需要先学完整门电路或模拟电子学。本阶段只需要建立一个准确模型:开发板读取九个按钮,再把按键通过 USB 或蓝牙报告给电脑。

当前阶段:认识硬件 · 不接电池 · 不焊接
01 · 全貌

整个系统只有四步

手指按按钮 GPIO 电平变化 ZMK 判断键位 USB / BLE HID 电脑收到按键

硬件负责“发生了什么”

按钮和电线让开发板知道:D0 现在被按下。它们不懂 F13,也不懂语音输入。

固件负责“这意味着什么”

ZMK 把位置 0 解释为 F13,然后通过标准键盘协议告诉电脑。

固件是什么? 固件是运行在开发板里的软件。它比电脑应用更接近硬件,负责读取引脚、处理按键和管理蓝牙。我们的 .uf2 文件就是编译后的固件。
02 · 开发板

XIAO nRF52840:这台迷你键盘的小电脑

你买的 Seeed Studio XIAO nRF52840 是一块开发板。它把微控制器、USB-C、天线、供电和可连接引脚放在一块很小的 PCB 上,让我们不用从裸芯片开始。

官方参考图:Seeed Studio XIAO nRF52840。你购物车中的 SKU 是普通 nRF52840,不是带传感器的 Sense 版本。
nRF52840

Nordic 生产的微控制器芯片,内含 CPU、内存、Bluetooth Low Energy 无线能力和可编程引脚。

MCU / 微控制器

适合控制具体硬件任务的小型计算机。它不像 PC 那样运行桌面系统,而是持续运行一份专用固件。

PCB

Printed Circuit Board,印刷电路板。绿色或黑色板上的铜线把芯片、USB 和引脚连接起来。

USB-C

既可以供电,也可以传输数据和刷写固件。必须使用数据线,而不是只能充电的线。

我们第一阶段会用到哪些引脚?

D0–D8 用来读取九个按钮; 是九个按钮共用的参考点。

官方引脚图经过等比例缩小以便网页加载。点击查看大图。我们只先关注 D0、D1、D2、D3、D4、GND。
Reset 很小。 USB-C 插上后,快速按这颗 RST/Reset 按钮两次,开发板才会进入 UF2 bootloader;电脑随后会出现一个可移动磁盘。
不要把 3V3 和 GND 直接相连 这叫短路,会让电流走一条阻力很小的路径,可能导致开发板复位、发热或损坏。接线阶段只把按钮接在 GPIO 与 GND 之间。
03 · 面包板

面包板:不用焊接的临时连接器

830 孔面包板内部已经有金属夹片。你把开发板、按钮和杜邦线插进去,就能临时连接电路;拔掉后还可以重新组合。

中间区域

通常每五个孔在内部横向相连,中间凹槽把左右两侧断开。直接把四脚按钮插入面包板时,跨槽是最容易避免短接的默认摆法;如果按钮用两根线引出,只要两端落在不同节点,就不必强行跨槽。

两侧电源轨

标有红色和蓝色的长排孔通常纵向相连。我们会把蓝色轨用作共用 GND,但上电前仍要用万用表确认。

“通常相连”不能代替测量 不同面包板的电源轨可能在中间断开。后续接线时会用万用表通断档验证,而不是只看颜色猜。
04 · 轻触按钮

四只脚,不代表四个独立触点

这里的“脚”是你看到的四根金属引脚,“触点”是电路中能够彼此接通或断开的端点。常见 6×6 mm 四脚轻触按钮虽然有四只脚,电气上通常只有 A、B 两个端点:每个端点各复制成两只脚,让按钮焊接和插在面包板上更稳。

从上方看四只脚:先分成 A、B 两组
A1          B1
│           │
A2          B2

A1 与 A2:内部永久连接,合起来叫 A 组
B1 与 B2:内部永久连接,合起来叫 B 组
按钮松开

A 组与 B 组断开

A1 ── A2       B1 ── B2
   A 组    ×     B 组

同组的两只脚仍然相连,但 A 组和 B 组之间没有通路。

按钮按下

A 组与 B 组接通

A1 ── A2 ───── B1 ── B2
        四只脚现在都导通

内部金属片只是在按下时把两个电气端点连接起来。

接线时应从不同组各选一只脚

正确:GPIO 接 A 组,GND 接 B 组
D0 ── A1      B1 ── GND

松开:A 与 B 断开
按下:D0 ── A ── B ── GND
不要让 GPIO 和 GND 都接到同一组 如果 D0 接 A1、GND 接 A2,因为 A1 与 A2 本来就永久连接,D0 会一直连着 GND。无论有没有按按钮,程序都会认为它处于按下状态。

为什么通常建议按钮跨过面包板中间凹槽

跨过凹槽后,可以让 A、B 两组落在彼此隔离的孔组中,避免面包板内部金属夹片提前把它们接通。它是一个可靠的默认方法,但不是电路规则本身:真正的规则是 GPIO 端和 GND 端必须属于两个不同的节点。

断电后用万用表通断档确认
1. 探针接任意两只脚,不按按钮
2. 蜂鸣器已经响:它们属于同一组
3. 不按不响、按下才响:它们分别属于 A、B 两组
4. 最终让 GPIO 和 GND 分别接在不同组

通断档用于判断两点之间是否存在低电阻连接。测试按钮配对时不要给电路通电。

按钮应该怎样插?

05 · 线材

杜邦线:把面包板上的点接起来

你买的是 20 cm 公对公、母对母、公对母套装。这里的“公”是露出的金属针,“母”是可以套住排针的插孔。

公对公

面包板 ↔ 面包板

两端都是针,最适合在面包板孔之间跳线。

母对母

排针 ↔ 排针

两端都是插孔,适合连接两块已经焊接公排针的模块。

公对母

面包板 ↔ 模块

一端插面包板,一端套住模块公排针。

USB-A → USB-C 数据线

它同时承担三件事:给 XIAO 供电、把 UF2 固件传进开发板、让 XIAO 作为 USB 键盘向电脑发送按键。只支持充电的线无法完成后两件事。

06 · 九键电路

每个按钮只有一条规则

按钮的一端接一个 GPIO,另一端接 GND。要理解开发板怎样判断按钮状态,需要先理解电压、高电平和低电平。

高低电平是相对于 GND 的电压状态

GND 是这块电路测量电压时的 0V 参考点。XIAO nRF52840 使用 3.3V 逻辑:GPIO 接近 3.3V 时会被判断为数字 1,称为高电平;GPIO 接近 GND 时会被判断为数字 0,称为低电平。芯片实际按数据手册规定的电压区间判断,并不要求测量值刚好等于 3.300V 或 0.000V。

HIGH · 1

高电平

GPIO 电压接近工作电压。在本项目的简化模型中,可以先理解为接近 3.3V。

LOW · 0

低电平

GPIO 电压接近 GND,在本项目中也就是接近 0V。

高低电平不是“有电”和“没电” 它们是芯片根据相对于 GND 的电压范围识别出的两个逻辑状态,也不表示电流大小。高电平对应逻辑 1,低电平对应逻辑 0。

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 正确解释为“按钮已按下”。

原创教学示意:D0→Voice、D1→Up、D2→Enter、D3→Down、D4→Device;每个按钮另一侧接 GND。真实接线和逐个移动信号线的验证记录见下方“实物实践”。

GPIO 读到高电平

按钮没有接通 GND。内部上拉电阻把输入拉向 3.3V,GPIO 读到 HIGH / 1,代表按钮松开。

07 · 实物实践记录

从万用表到可工作的桌面迷你键盘

这一节记录我们实际走过的路径。它不是商品说明书,而是一份可以重新执行、可以用测量结果判断对错的实验记录。

本次实机证据 原来的五个按键 GPIO↔GND 通断逻辑已确认;ZMK UF2 已刷入;USB 键盘事件、单台 BLE 配对和 Device 多 profile 切换均已在真实设备上测试通过。新增 Left、Right、Esc、Backspace 已写入 V0.2 配置,等待新增按键的实机验证。

1. 先学会万用表通断档

表笔怎么插

黑表笔 → COM
红表笔 → VΩmA

不要把红表笔插到 20A 插孔。

旋钮拨到带蜂鸣符号 ))) 的通断档。先让两根表笔尖互相接触:正常应蜂鸣并显示接近

四脚按钮怎么找两组

同一组两只脚:不按也蜂鸣
不同组两只脚:松开不响,按下才响

A 组 ↔ B 组 = 真正的开关两端

测试按钮时不要给电路通电。手不够用时,把表笔尖插在两个面包板孔里,或使用鳄鱼夹测试线固定。

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,按钮另一端接 E13GND → A13 的布局是成立的:第 10 行和第 13 行是两个独立节点。直接插入四脚按钮时优先跨槽;按钮用两根线引出时,只要两端接到不同节点即可。

3. 九个按钮的核心规则

USB 供电时的完整逻辑
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 不必拔掉,但移动前要确认信号线不会碰到相邻引脚、3V35V

信号线 → D0:F13
信号线 → D1:↑
信号线 → D2:Enter
信号线 → D3:↓
信号线 → D4:切换 Bluetooth profile
这是测试方法,不是最终产品接线 逐个移动信号线可以验证固件映射;现有 D0–D4 的测试可以复用同一方法,新增 D5–D8 需要继续逐个验证。通电移动信号线时只移动 GPIO 线,GND 不动,避免碰到相邻电源引脚。

5. USB 刷写:Reset 很小,UF2 磁盘会自动消失

  1. 用 USB-C 数据线连接 Mac 或 Windows;两者都可以,不需要 Arduino IDE。
  2. 按 USB-C 左侧那颗很小的 RST/Reset 按钮两次,进入 bootloader。
  3. 电脑出现 UF2 可移动磁盘后,复制 GitHub Actions artifact 中的 ai-voice-remote.uf2
  4. 复制完成后磁盘自动消失是正常的:开发板正在重启并作为 USB 键盘重新出现。
  5. 不要刷 settings-reset.uf2,除非要清除蓝牙配对和持久设置。
用户完成通断验证后的 XIAO、按钮和面包板接线近照
用户实物记录:开发板、按钮、面包板和信号线已经通过通断测试。图片中的线材较多,实际排查时应优先按 GPIO、GND 和节点逐条标记。

6. USB 与 BLE 的验证顺序

USB 键盘

刷写后打开文本编辑器测试 Enter。Voice 是 F13,普通编辑器不会显示文字,需要用键盘事件查看器或支持功能键的测试工具。

蓝牙连接

在 Mac 或 Windows 的系统蓝牙设置里搜索并连接 AI Voice Remote。D4 不是普通键盘字符,而是切换下一个 Bluetooth profile;要测试它,需要第二台蓝牙主机,按下后等待几秒再配对。

本节图片:用户实拍的万用表、说明书和面包板接线;开发板 Reset 红圈图基于 Seeed Studio 官方 XIAO nRF52840 参考图。

08 · 术语表

这节课出现的新词

GPIO

可由固件配置为输入或输出的通用引脚。本项目把 D0–D8 配置为按钮输入;D5–D8 仍需完成实机验证。

GND

Ground,电路共同参考点。不是“没有用的负极”,而是所有电压判断的基准。

高电平 / HIGH

GPIO 电压处于芯片能够识别为逻辑 1 的范围;在本项目中可以先理解为接近 3.3V。

低电平 / LOW

GPIO 电压处于芯片能够识别为逻辑 0 的范围;在本项目中可以先理解为接近 GND。

悬空 / Floating

GPIO 没有被可靠拉高或拉低,容易受噪声影响而随机读到 1 或 0。

内部上拉

MCU 内部用一个较大电阻让输入在按钮松开时稳定为高,不需要额外焊接电阻。

Active Low

低电平表示动作发生。本项目按钮按下会接地,所以使用 active low。

BLE

Bluetooth Low Energy,低功耗蓝牙。适合电池供电的键盘、鼠标和传感器。

HID

Human Interface Device,键盘、鼠标等输入设备的标准协议。电脑无需专用驱动即可识别。

ZMK

专为现代键盘设计的开源固件,负责按键扫描、USB/BLE HID、多主机配对和低功耗。

UF2

一种适合开发板拖拽刷写的固件文件格式。进入 bootloader 后复制到虚拟磁盘即可。

09 · 自测

进入接线关卡前,先确认你能回答

这些勾选只保存在当前浏览器,用于个人复习;不会把 Roadmap 阶段自动标成完成。正式完成状态必须来自接线照片、测量和实机测试。

实物实践已通过 你已经完成万用表通断确认、USB UF2 刷写、USB 按键事件、单台 BLE 配对和 Device 多 profile 切换。下一阶段是把经过验证的键位做成桌面 1:1 布局模型,验证稳定性和盲按路径,而不是马上接电池或画最终 PCB。
术语解释