当前位置: 首页 > news >正文

DIY QMK量子键盘

        最近放假了,趁这个空余在做一个分支项目,一款机械键盘,量子键盘取自固件名称QMK(Quantum Mechanical Keyboard)。

        键盘作为计算机或其他电子设备的重要输入设备之一,通过将按键的物理动作转换为数字信号,实现用户与设备的交互。

        键盘的工作原理可以分为几个关键部分,包括按键矩阵、扫描电路、信号传输和固件控制等。下面将详细介绍这些基本原理。

1. 键盘按键矩阵

        大多数键盘采用按键矩阵结构来实现多个按键的检测。按键矩阵是一种通过行列交叉的方式连接多个按键的电路布局,这样可以减少所需的电线数量。

  • 行(Rows)和列(Columns):键盘的每个按键通常通过一个行和一个列来标识。当按下某个键时,它连接了一个特定的行和列,这样可以通过电路检测出该按键的位置。

  • 矩阵布局:假设有一个4x4的矩阵布局,代表16个按键。每个按键都由一行和一列组成。按下某个按键时,电路中对应的行和列之间会闭合,从而让控制器可以确定是哪个按键被按下。

    /*

     * ┌───┬───┬───┬───┐

     * │ 7 │ 8 │ 9 │   │

     * ├───┼───┼───┤ + │

     * │ 4 │ 5 │ 6 │   │

     * ├───┼───┼───┼───┤

     * │ 1 │ 2 │ 3 │   │

     * ├───┴───┼───┤Ent│

     * │   0   │ . │   │

     * └───────┴───┴───┘

     */

例如,如果你按下位于第2行和第3列的按键,电路会通过扫描检测到该按键位置,输出6这个数字。

2. 键盘扫描与信号检测

        键盘的扫描是通过控制器(通常是微控制器或专用的键盘芯片)完成的。扫描过程可以分为以下步骤:

  1. 行激活:控制器逐一激活键盘的每一行,并读取与之连接的所有列。

  2. 列检测:在某一行激活时,控制器会读取所有列的信号。如果某个列的信号改变(通常是由按键按下引起的电流流动),说明该行列交点上的按键被按下。

  3. 去抖动:按键的物理开关会在按下和松开时发生微小的震动,这会导致信号的不稳定。为了避免错误的按键输入,控制器会进行去抖动处理,即在按键被按下后,控制器会等待短暂时间再确认按键状态。

  4. 重复检测:当用户按住某个按键时,键盘通常会以一定的速度重复发送按键信号,直到按键松开。这是为了在长时间按住某个按键时能够持续输入。

        提起键盘定制,QMK(Quantum Mechanical Keyboard)固件无疑是其中的佼佼者。作为一个开源项目,QMK固件已经成为了键盘爱好者和DIY者的标配工具。它不仅提供了高度的定制能力,还支持各种复杂的功能和设置,使得用户能够根据自己的需求,打造出个性化的键盘布局和操作体验。QMK固件是一款针对机械键盘的开源固件,基于C语言编写,允许用户自由修改和配置键盘的各项功能。QMK原本是基于一个叫做TMK的开源固件开发的,后来因为功能强大和灵活性高,逐渐成为了社区的主流选择。

        QMK的最大亮点在于它的高度可定制性,它不仅支持常见的按键映射和宏命令,还支持更多复杂的功能,如多层布局、特殊键位、RGB灯效等。用户可以通过修改QMK固件中的代码,轻松实现个人化需求。

QMK固件的强大之处还在于它可以对键盘的各个方面进行深入的定制。以下是QMK固件的一些核心功能:
  • 按键映射(Keymap):QMK允许用户自定义每个按键的功能,包括普通键位、功能键、组合键、宏命令等。通过QMK的配置文件,用户可以为每个按键分配不同的任务,使得每个按键的功能都可以根据需要进行调整。

  • 多层(Layers)支持:QMK固件支持多层布局功能,允许用户通过按下特定的修饰键(如Shift、Ctrl等)来切换不同的键位布局。这使得键盘的功能得到极大的扩展。例如,你可以将一层映射为数字键盘,另一层用于控制媒体播放,或者将一层配置为游戏快捷键。

  • 宏命令(Macros):QMK支持宏命令功能,允许用户定义一组按键序列,并将其绑定到某个单独的按键上。通过按下这个特定的按键,QMK会自动执行这组按键序列。宏命令功能非常适合需要频繁输入复杂命令的用户,比如程序员、游戏玩家等。

  • RGB灯效:QMK还支持RGB背光的控制,可以根据需要调整灯效的颜色、亮度以及动态效果。用户可以通过固件代码自定义灯效模式,例如设置呼吸灯、波浪灯、渐变色等效果,或者根据按键的状态变化调整灯光。

  • 定制功能:QMK固件还支持一些特殊的功能,如按键防抖、长按触发、按键禁用、音效反馈等。这些功能可以进一步提升用户体验,使得键盘更加智能和人性化。

QMK固件的配置和编程过程是有一定的学习曲线,但一旦掌握了,就可以进行极其灵活和深入的定制。以下是QMK固件配置的基本步骤:

安装QMK MSYS

打开QMK MSYS在shell里面输入qmk setup

        下载QMK固件源代码:会通过git 去QMK官方GitHub仓库下载固件源代码。QMK的源代码中包含了许多已经预定义好的配置文件和示例代码,用户可以根据自己的需求进行修改。本着国内GitHub访问的不稳定性,科学上网是必要的,因为在sub-routine这块很容易失败      

这个最好设置一下git的代理

 如果想取消代理  

 在shell里面输入qmk new-keyboard

输入一个键盘的名称和Github用户名称

选择键盘和布局:在QMK固件中,每个键盘都有一个对应的配置文件,用户需要选择适合自己键盘的文件。如果是自定义键盘,用户需要根据自己的硬件设计来编写新的配置文件。

选择你想要的键盘布局,然后选择开发板,这里手里因为有块树莓派的RP2040的开发板,所以选择了15

这里的RP2040有足够的IO口关键还很便宜10-20RMB,还包邮

修改按键映射和功能:在QMK的配置文件中,用户可以根据自己的需求修改每个按键的功能。可以是单一的字符,也可以是复杂的宏命令。QMK允许用户通过修改C语言代码来自定义每个按键的行为,例如设置某个按键为切换多层、触发宏命令等。

设计好引脚和键盘扫描电路的mapping

一些个性化的定制也可以通过QMK Configurator进行修改,生成的文件替换文件夹里的文件

在编译之前一定修改matrix_pins的对应,因为我用了RP2040

编译并烧录固件:修改完配置后,用户需要使用QMK的编译工具将固件编译成可供键盘使用的二进制文件。然后,使用适当的工具(如QMK Toolbox)将固件烧录到键盘的微控制器中。

输入:qmk compile -kb demo_keyboard -km default

开始编译固件

编译成功

烧录固件,qmk flash -kb demo_keyboard -km default   注意RP2040按住boot键然后松开

调试与测试:烧录完成后,用户需要通过测试确保每个按键的功能都正常工作。如果有任何问题,可以重新调整配置文件并编译新的固件版本。

这个是4*4矩阵键盘打印出的

7++++++7744566456123

相关文章:

DIY QMK量子键盘

最近放假了,趁这个空余在做一个分支项目,一款机械键盘,量子键盘取自固件名称QMK(Quantum Mechanical Keyboard)。 键盘作为计算机或其他电子设备的重要输入设备之一,通过将按键的物理动作转换为数字信号&am…...

C++ 堆栈分配的区别

这两种声明方式有什么区别 1.使用 new 关键字动态分配内存 动态分配:使用 new 关键字会在堆(heap)上分配内存,并返回一个指向该内存位置的指针。生命周期:对象的生命周期不会随着声明它的作用域结束而结束&#xff0…...

范冰冰担任第75届柏林电影节主竞赛单元评委 共鉴电影佳作

近日,备受瞩目的柏林电影节迎来了新一届盛事,而华人演员范冰冰将以主竞赛单元评委身份亮相,引发了广泛关注。此前她已担任过戛纳国际电影节、东京国际电影节、圣塞巴斯蒂安国际电影节等众多电影节主竞赛单元评委。作为国际影坛的知名人物&…...

Pandas进行MongoDB数据库CRUD

在数据处理的领域,MongoDB作为一款NoSQL数据库,以其灵活的文档存储结构和高扩展性广泛应用于大规模数据处理场景。Pandas作为Python的核心数据处理库,能够高效处理结构化数据。在MongoDB中,数据以JSON格式存储,这与Pandas的DataFrame结构可以很方便地互相转换。通过这篇教…...

《DeepSeek 实用集成:大模型能力接入各类软件》

DeepSeek 实用集成 awesome-deepseek-integration/README_cn.md at main deepseek-ai/awesome-deepseek-integration 将 DeepSeek 大模型能力轻松接入各类软件。访问 DeepSeek 开放平台来获取您的 API key。 English/简体中文 应用程序 Chatbox一个支持多种流行LLM模型的桌…...

适配Android16

Android16新特性 Android 16带来了许多新特性和改进,提升了系统的流畅度、用户体验和安全性。对于应用开发者来说,适配Android 16可以确保应用在该版本上的兼容性和性能,同时也可以利用其新特性为用户提供更好的服务。以下是Android 16的一些…...

如何用 Groq API 免费使用 DeepSeek-R1 70B,并通过 Deno 实现国内访问

这几天都被Deepseek刷屏了,而且Deepseek由于异常访问量,这几天都不能愉快的和它玩耍了, 我发现Groq新增了一个Deepseek的70b参数的模型, DeepSeek-R1 70B 作为一款强大的开源模型,提供了卓越的推理能力,而 …...

iperf 测 TCP 和 UDP 网络吞吐量

注:本文为 “iperf 测网络吞吐量” 相关文章合辑。 未整理去重。 使用 iperf3 监测网络吞吐量 Tom 王 2019-12-21 22:23:52 一 iperf3 介绍 (1.1) iperf3 是一个网络带宽测试工具,iperf3 可以擦拭 TCP 和 UDP 带宽质量。iperf3 可以测量最大 TCP 带宽…...

Autogen_core: Model Context

目录 示例代码代码解释另一个例子 示例代码 from dataclasses import dataclassfrom autogen_core import AgentId, MessageContext, RoutedAgent, SingleThreadedAgentRuntime, message_handler from autogen_core.model_context import BufferedChatCompletionContext from …...

SpringBoot AOP 和 事务

SpringBoot 整合 AOP 动态代理技术 JDK 动态代理 JDK 动态代理是 Java 自带的一种代理方式。它要求目标类必须有接口,基于这个接口,JDK 在运行时会动态生成一个代理对象。这个代理对象和目标对象就像 “拜把子” 的兄弟,因为它们都实现了相同…...

Ubuntu全面卸载mysql

如果你已经看到whereis mysql输出了与MySQL相关的路径,说明MySQL仍然存在于系统中。要卸载MySQL,可以按照以下步骤操作,确保完全删除所有相关的文件和配置: 1. 停止MySQL服务 首先,停止MySQL服务: sudo …...

android的gradle

资料: GitHub - ChenSWD/CopyGradleInAction: 备份《Gradle IN Action》书中的源码,添加了部分注释 //github上一个开源项目,外加pdf书 Gradle User Manual gradle官网 讲的挺好的博客 Gradle之重新认识Gradle(项目结构、命令行、tas…...

前端开发之jsencrypt加密解密的使用方法和使用示例

目录 RSA密钥生成选项简介 jsencrypt 使用教程 一、安装 jsencrypt 二、使用 jsencrypt 进行加密和解密 1. 创建密钥对 2. 加密数据 3. 解密数据 三、实际应用示例 加密数据并存储到 localStorage 中: 从 localStorage 中读取加密数据并解密: …...

电路研究9.2.5——合宙Air780EP中GPS 相关命令使用方法研究

注:本命令仅适用于合宙 4G CAT1 模块(Air780EG 系列)。 正好,我们使用的Air780EP好像也有4G CAT1模块,好像也属于Air780EG系列吧。 这个例子好像比较少就个。 18.9 使用方法举例 18.1GPS 开关:ATCGNSPWR 这…...

Python标准库 - os (3) 调度策略、系统信息

文章目录 6 调度策略6.1 调度策略常量6.2 访问和设置进程的调度策略 7 系统信息7.1 系统信息7.2 系统配置信息7.3 系统负载7.4 路径相关常量7.5 生成随机字节 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了进程调度和查看系统…...

【NLP251】NLP RNN 系列网络

NLP251 系列主要记录从NLP基础网络结构到知识图谱的学习 1.原理及网络结构 1.1RNN 在Yoshua Bengio论文中( http://proceedings.mlr.press/v28/pascanu13.pdf )证明了梯度求导的一部分环节是一个指数模型…...

【漫话机器学习系列】067.希腊字母(greek letters)-写法、名称、读法和常见用途

希腊字母(Greek Letters) 希腊字母在数学、科学、工程学和编程中广泛使用,常用于表示变量、常量、参数、角度等。以下是希腊字母的完整列表及其常见用途。 大写与小写希腊字母表 大写小写名称(英文)名称(…...

2.文件IO

2.文件IO **1. 文件I/O概述****2. 文件I/O函数接口****3. 文件定位****4. 文件描述符与文件流指针的转换****5. 文件I/O与标准I/O的比较****6. 练习与作业****7. 文件I/O与标准I/O的对应关系****8. 其他注意事项****9. 总结** 1. 文件I/O概述 文件I/O:操作系统为了…...

毕业设计--具有车流量检测功能的智能交通灯设计

摘要: 随着21世纪机动车保有量的持续增加,城市交通拥堵已成为一个日益严重的问题。传统的固定绿灯时长方案导致了大量的时间浪费和交通拥堵。为解决这一问题,本文设计了一款智能交通灯系统,利用车流量检测功能和先进的算法实现了…...

【SpringBoot教程】Spring Boot + MySQL + HikariCP 连接池整合教程

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 在前面一篇文章中毛毛张介绍了SpringBoot中数据源与数据库连接池相关概念,今天毛毛张要分享的是关于SpringBoot整合HicariCP连接池相关知识点以及底层源码…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...