QMK笔记


qmk new-keyboard
qmk new-keymap -kb thebesttv/split27 -km via
qmk compile -kb thebesttv/split27 -km via
qmk console --bootloaders

1. 使用 QMK 从零开始设计一个键盘的流程

  1. 设计 layout:使用 KLE 设计。可以在键位上直接写上矩阵座标,方便之后VIA的配置。
  2. 生成PCB和定位板边框:使用 Plate & Case Builder,直接把 KLE 的 raw data 复制过去。 Switch Type 一般选 t:1,Stabilizer Type 一般 s:2
  3. 在 QMK 中添加新的键盘。 其中 info.json 的 layout 的生成有两种方法:
    1. 使用 Convert KLE raw to QMK info.json 直接把 KLE 的 raw data 转换为 QMK 的 layout。
    2. 不推荐:如果使用了 Keyboard Firmware Builder 的话,生成的 JSON 文件非常大, 需要用 KBFirmware JSON to QMK Parser 再次转换。
  4. 设计 keymap

2. 合宙Air32F103

UPD: 现在有了9.9的树莓派Pico,这个就没啥必要了。

使用合宙的 Air32F103 代替 STM32F103,目前选用 Air32F103CBT6,开发板9.9一个。 基于 Air32F103 的几块 QMK 键盘:

用的都是 zhaqian 的固件和uf2bootloader。

2.1. 烧录QMK

2.1.1. 使用 STM32duino BL

erase flash 再刷入链接中的 BL,然后使用命令

dfu-util -a 2 -d 1EAF:0003 -D <filename>

2.1.2. 使用 UF2 BL

先用串口 erase flash,然后用刷入 u2 bootloader。 刷入后,会显示一个虚拟u盘,把 cmopile 成功的 .u2 文件拖进去即可。

下一次想再次刷入固件的时候,双击 RST 即可。

3. 使用 74HC65 扫描按键

需要修改 matrix.c,具体见 Custom Matrix

Air32F103 目前SPI好像还没有适配,所以直接 bitbang 了。

4. 分体键盘

  • Split Keyboard 通讯方式可以选择串口或者I2C。
  • 'serial' Driver 选择串口的话,可以在这里的三个驱动中选择一个。 目前使用 USART Full-duplex。

如果使用 Bitbang (soft serial),虽然只要一根线, 但在两块键盘相连接时无法连接VIA,需要切断中间的连线才能使用VIA。 而 USART Half-duplex 的方法又要一个上拉电阻,不方便测试。

使用需要两根线的 USART Full-duplex 方案,虽然两边需要调换线序, 不过连接VIA没有问题。

5. VIA

5.1. 固件配置

添加一个 via keymap。

5.2. 配置文件

VIA的键盘配置文件在 the-via/keyboards 中。 在写自己的配置文件时,可以参考别人的,如 ergodoxez/ergodoxez.json。 注意:VIA现在升级到v3了,新的配置在 v3 文件夹中,src 中都是老的。

文件位置:如,QMK中键盘在 keyboards/thebesttv/split27 中, 则VIA中对应配置文件位于 v3/thebesttv/split27.json 中。

.json 文件的格式如下:

{
    "name": "Split27",                 // 键盘名称
    "vendorId": "0x1A5A",              // vid
    "productId": "0x1234",             // pid
    "matrix": {"rows": 10, "cols": 6}, // matrix大小
    "layouts": {
        "keymap":  ...  // KLE的JSON文件内容复制到这里
    }
}

其中 keymap 的结果需要这样获取: 在 KLE 中把键盘对应的 layout 画出来,每个按键的 top-left legnd 上标出它在 matrix 中对应座标,其余部分留白。 每个按键都标注完后,去下方的 Raw data 一栏,选择 Download json, 然后把文件内容复制过来即可。文件内容应是大概是这个样子的(不考虑缩进):

[
    ["0,0","0,1","0,2","0,3","0,4","0,5",{x:1},"5,0","5,1","5,2","5,3","5,4","5,5"],
    ["1,0","1,1","1,2","1,3","1,4","1,5",{x:1},"6,0","6,1","6,2","6,3","6,4","6,5"],
    ["2,0","2,1","2,2","2,3","2,4","2,5",{x:1},"7,0","7,1","7,2","7,3","7,4","7,5"],
    ["3,0","3,1","3,2","3,3","3,4","3,5",{x:1},"8,0","8,1","8,2","8,3","8,4","8,5"],
    [{x:3},"4,3","4,4","4,5",{x:1},"9,0","9,1","9,2"]
]

配置文件完成后,可以打开 VIA App,在 Settings 中,选择 Show Design Tab, 然后去 Design Tab,把配置文件上传,这样就可以正常连接键盘了。

5.3. VIA网页端使用

如果需要添加一些复杂的 keycode,如 MT(MOD_LCTL,KC_F), 选择 Special 下的 Any,然后手动输入 keycode。

5.4. Linux 下可能遇到的问题

Linux 下,试图 Authorize Device 时,如果 HID 列表中显示了自己的键盘, 但点击 Connect 后没有反应;再次尝试 Authorize Device, 发现列表中显示已配对,但点击还是没反应,这可能是权限问题。

判断方法:浏览器访问 chrome://device-log/,查找类似 HID "failed to open /dev/hidraw2" 的消息,有的话就因该是权限问题了。可以参考这里

解决方法:修改 udev 规则


Authorthebesttv
Created2023-08-03 12:45
Modified2023-08-26 20:12
Generated2024-06-11 02:39
VersionEmacs 29.3 (Org mode 9.6.15)
Rawqmk.org