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

ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘

概述

在这个充满挑战与机遇的数字化时代,键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中,机械键盘,以其独特的触感、清脆的敲击音和经久耐用的特性,已经成为众多游戏玩家和电子工程师的首选。本文将为您介绍 ESP-KeyBoard,一款基于 ESP32-S3 系列模组开发的高性能、高性价比的机械键盘,并对其特性、功能以及软硬件设计进行深入讲解。

项目介绍

ESP-KeyBoard 是一款基于 ESP32-S3 系列模组开发的高性能、高性价比的三模客制化机械键盘。它支持 USB低功耗蓝牙 (BLE)2.4GHz 无线输出 三种工作模式。采用 75 配列键盘(即 75% 的键盘布局),总共 82 个按键,支持 全键无冲热插拔。每个按键都配备了一个独立的 RGB LED,支持 40+ 种的本地灯效控制,以及支持 WINDOWS11 神光同步功能。除此之外,ESP-KeyBoard 配备了 4000mA 的锂电池,并支持多种低功耗的工作模式,可在无线工作模式下,大幅延长电池的使用时间。

如下图所示,从外观上来看,ESP-KeyBoard 在保持整体结构简洁的同时,处处包含着对细节的把控。下面本文将逐步讲解如何轻松地定制一款属于你的 ESP-KeyBoard。

在这里插入图片描述


视频展示:

ESP32-S3 三模机械键盘 1.1 升级版

供电方式

  • USB 工作模式下,通过 USB 接口进行供电;
  • 低功耗蓝牙 (BLE)2.4GHz 无线输出模式下,通过 4000mA 锂电池进行供电。

功能演示与方案优势:

1. 个性化的键盘组装

ESP-KeyBoard 以其创新的键轴设计,提供了前所未有的个性化体验。键盘的键轴支持热插拔功能,意味着开发者无需关闭电源或拆卸键盘,就能在带电模式下轻松更换键轴或键帽,让键盘瞬间焕发新活力。这种设计还极大地方便了日常维护和个性化定制,无论客户追求具有独特手感的机械轴,还是偏好安静免打扰的静音轴,都能根据个人喜好随时调整 ESP-KeyBoard 的键盘配置,享受定制化键盘的乐趣。

在这里插入图片描述

2. 低延迟的输出速率

ESP-KeyBoard 使用矩阵键盘扫描方式,支持高达 20KHz 的软件扫描速率,同时可以做到全键无冲,对所有按键进行精准识别,即使是远距离打字也可以做到低延迟的稳定输出。

  • 在 USB 和 2.4GHz 无线输出工作模式下可达 1KHz 的回报率,低至 1ms 的延时。
  • 在 BLE 工作模式下可达 125Hz 回报率

在这里插入图片描述

3. 自定义的键盘灯效

当前市场上各品牌 RGB 外设普遍配备了专属的灯效控制软件,这导致了不同外设间 RGB 灯效难以实现统一。而 ESP-KeyBoard 不仅内置了超过 40 种本地灯效控制选项,还兼容 Windows 11 的神光同步技术,实现了与各类外设的灯效同步功能。

  • 本地灯效控制
    在这里插入图片描述

  • Windows11 动态等效控制
    在这里插入图片描述

4. 多种低功耗工作模式

在硬件设计上,ESP-KeyBoard 优化了 LED 灯组的电源管理电路,增加了 WS2812 LED 组的总功率控制,允许在使用锂电池供电时完全断开 WS2812 灯带的电源,降低待机电流约 40mA,实现了更低的能耗和更长的电池续航。

ESP-KeyBoard 采用高效的矩阵键盘扫描技术,仅在按键操作时进行全键盘扫描,而在键盘处于空闲状态时自动保持 浅睡眠模式(Light-Sleep),并支持通过任意按键瞬间唤醒键盘,确保在维持低能耗的同时,能够迅速响应用户的输入,以支持无线输出模式下的低功耗运行。

在这里插入图片描述

除此之外,ESP-KeyBoard 在硬件上增加了 32.768KHz 的外部晶振,这一精准时钟源专为低功耗蓝牙 (BLE) 工作模式而设计,显著提升了锂电池的续航时间。该设计允许键盘在保持 BLE 连接的同时,进入浅睡眠模式 (Light-Sleep),将待机电流降至 2mA,从而实现更高的能效。

5. 高度自定义

ESP-KeyBoard 采用分体式硬件设计,主控板与键盘 PCB 之间通过连接器相连,可方便用户自由更换主控板。

  • 如果想在键盘上配备额外的扩展副屏,只需升级到性能更强的主控 MCU。这不仅能够满足附加显示功能的需求,还能在此基础上进一步自定义更丰富的外观主题;
  • 若追求更优的能效比,可以选择升级至功耗更低的 ESP32-H 系列芯片,以满足不同的使用需求。

这种设计不仅提升了键盘的使用灵活性,还有效降低未来更新迭代的成本,可以轻松实现高度自定义的客制化键盘。

在这里插入图片描述

6. 舒适的敲击体验

ESP-KeyBoard 键盘无空仓,以其坚实的内部结构有效减少振动和噪音,而 PCB 板的悬浮减震设计则减轻了按键触底时的冲击。键盘整体结构采用四周固定、中间悬空的方式,使得触底感更为柔和且富有弹性,提供舒适的敲击体验,有效减轻长时间使用中的手部疲劳。
在这里插入图片描述


硬件设计

ESP-KeyBoard 采用分体式硬件设计,主控板与键盘 PCB 之间通过连接器相连,方便用户自由更换主控板,轻松实现高度自定义的同时降低了键盘更新迭代成本。ESP-KeyBoard 的硬件系统由以下部分组成:

ESP-KeyBoard 主板硬件设计

在这里插入图片描述

  • 主控 MCU : ESP32-S3- WROOM-1- N4 模组

  • 32KHz 晶振:基于 ESP32-S3 主控芯片增加了外部 32.768KHz 晶振,以支持 ESP-KeyBoard 在使用 BLE (低功耗蓝牙)工作模式下进入浅睡眠(Light Sleep)模式来降低待机功耗,此时待机电流约 2mA

  • TYPE-C(USB Type-C):采用 USBC200 芯片与 ESP32-S3 芯片的 USB (GPIO19GPIO20)接口直连,为 ESP-KeyBoard 产品提供一个 USB Type-C 端口,支持 ESP-KeyBoard 通过 USB Type-C 线连接到电脑,并为 ESP-KeyBoard 供电。

  • KEY(按钮):使用一个简单的物理按钮电路,连接到 ESP32-S3 芯片的 GPIO0CHIP_PU(EN)管脚,用于ESP-KeyBoard 产品硬件复位和手动切换 ESP32-S3 的启动模式 (SPI Flash BootDownload Boot)。如果是量产产品,可以省去按键电路。

  • BAT CHG (电池充电): 基于 ME4054BM5 芯片,使用 BAT 引脚连接到电池正极,用于控制电池的充放电,并具有充电状态指示灯来提醒实时电量情况,以确保为锂电池提供安全稳定的充电功能。

  • VBAT->3V3(电源管理):使用 TPS61033 电池管理芯片将电池电压 VBAT(通常在3.0V~4.2V 之间变化)转换为稳定的 3.3V 电压,给电路提供稳定的电压环境。同时使用 ESP32-S3 的 GPIO2 来检测电池电量,并支持使用灯光效果来提醒实时电量情况。

  • CONNECTOR(外部连接器):使用一个 30 针的外部链接器用于主板与子板建立连接,以实现主控板与键盘 PCB 的硬件分体设计。

在这里插入图片描述

ESP-KeyBoard 子板硬件设计

ESP-KeyBoard 使用 75 配列键盘(即 75% 的键盘布局),总共 82 个按键。并为每个按键都串联一个二极管,可以确保按下按键时电流只朝一个方向流动,以防止“重影”并更好地支持 N 键翻转。同时使用成本更低的矩阵键盘扫描方式(行输出列输入),最大可达 20KHz 扫描频率。通过使能按键中断,可以实时的检测按键是否按下,从而决定键盘是否工作,以支持极低的待机功耗。

在这里插入图片描述
另外,使用 ESP32-S3 的 六个 RTC GPIO (GPIO38、GPIO39、GPIO40、GPIO45 、GPIO47、GPIO48) 作为唤醒源,分别连接到矩阵键盘的 ROW0~ROW5 ,以此实现通过任意按键唤醒 ESP-KeyBoard 的待机模式,确保键盘仅在按键按下时工作,从而降低功耗。

除此之外,ESP-KeyBorad 为每个按键配备了一个独立的 WS2812 RGB LED,支持通过单个数据引脚控制每个 LED 的颜色和亮度。这允许用户自定义键盘的整体背光效果,并支持在使用锂电池供电时完全断开 WS2812 电源,将待机电流降低约 40mA

在这里插入图片描述

ESP-KeyBoard 完整的硬件开源资料可在【嘉立创-乐鑫小铁匠】ESP-KeyBoard 获取,更多 ESP 硬件设计说明请参考 《ESP 硬件设计指南》 。

软件设计

ESP-KeyBoard 使用了 ESP32-S3 的 USB 特性、BLE 特性、RMT 外设接口以及多个通用 GPIO 来实现全功能。完整应用代码可参考 “esp-iot-solution/examples/keyboard”示例,此示例支持多种组合模式:

连接模式本地灯效WIN11 灯效全键无冲回报率
USB1 KHz
BLE×125 Hz
2.4 GHz (暂未开源代码)×1 KHz

【技术解析】

  • Windwos11 神光同步:在 Windwos11 上支持基于标准 HID 的灯效控制,设备只需在固件中增加 HID 动态灯效的功能,即可以直接在 Windows 系统内直接控制 ESP-KeyBoard 灯光效果,也可以与其他外设进行灯效同步。在此技术上 ESP32-S3 通过 BLE HID Device 和 USB HID Device 特性来实现。

    • USB HID 应用例程可参考:esp-idf/examples/peripherals/usb/device/tusb_hid , 软件编程指南参见:TinyUSB 组件

    • BLE HID 应用例程可参考:esp-idf/examples/bluetooth/bluedroid/ble/ble_hid_device_demo

  • 多种键盘热键:软件设计参考了 QMK( qmk/qmk_firmware ) 代码逻辑,可以方便修改键盘映射,并支持多种键盘热键,如音量加、音量减等。ESP-KeyBoard 支持如下快捷键:

组合键功能
FN + F1USB 工作模式
FN + F2BLE 工作模式
FN + F10静音
FN + F11音量+
FN + F12音量 -
FN + Home切换本地灯光颜色
FN + PgUP正向本地灯光效果
FN + PgDN反向本地灯光效果
FN + END切换 WIN11动态灯光效果
FN + Blank切换本地灯光
FN + ↑增加本地灯光亮度
FN + ↓降低本地灯光亮度
FN + ←降低本地灯光变化速度
FN + →增加本地灯光变化速度
  • WS2812 LED 控制:在 WS2812 灯组控制应用上, 使用了 ESP32-S3 的 RTM 外设接口,借助 espressif /led_strip 组件来驱动 WS2812 LED 灯带,以实现 ESP-KeyBoard 灯光调控的功能。应用例程可参考 esp-idf/examples/peripherals/rmt/led_strip,软件编程指南参见:红外遥控 (RMT)

  • 低功耗模式: 在低能耗方面使用了乐鑫提供的 Auto Light Sleep 解决方案来自动进入休眠状态,这里借助了六个 RTC GPIOGPIO38、GPIO39、GPIO40、GPIO45 、GPIO47、GPIO48 )作为唤醒源,分别连接到矩阵键盘的 ROW0~ROW5 ,以此实现通过任意按键唤醒 ESP-KeyBoard 的待机模式。文档说明参见:低功耗模式使用指南 。 对应的 Auto Light Sleep 代码 如下:

            esp_pm_config_t pm_config = {.max_freq_mhz = CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ,.min_freq_mhz = 160,
    #if CONFIG_FREERTOS_USE_TICKLESS_IDLE.light_sleep_enable = true
    #endif};ESP_ERROR_CHECK(esp_pm_configure(&pm_config));
    

总结

无论是长时间的编程工作,还是激烈的游戏竞技,一款性能出色的机械键盘都是我们可靠的助手。ESP-KeyBoard 不仅提升了工作效率,更为用户的学习和娱乐生活带来了定制化的乐趣。欢迎开发者们利用 ESP32-S3 定制属于自己的 ESP-KeyBoard。

相关文章:

ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘

概述 在这个充满挑战与机遇的数字化时代,键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中,机械键盘,以其独特的触感、清脆的敲击音和经久耐用的特性,已经成为众多游戏玩家和电子工程师的首选。本文将为…...

28.UE5游戏框架,事件分发器,蓝图接口

3-3 虚幻游戏框架拆解,游戏规则基础_哔哩哔哩_bilibili 目录 1.游戏架构 2.事件分发器 2.1UI控件中的事件分发器 2.2Actor蓝图中的事件分发器 2.2.1动态决定Actor的分发事件 2.2.2父类中定义事件分发器,子类实现事件分发器 2.3组件蓝图中实现事件…...

Puppeteer 和 Cheerio 在 Node.js 中的应用

Puppeteer 和 Cheerio 在 Node.js 中的应用 引言 在现代 Web 开发中,自动化测试、数据抓取和页面分析是常见的需求。Node.js 提供了丰富的工具和库来满足这些需求。本文将介绍两个在 Node.js 中常用的库:Puppeteer 和 Cheerio,它们分别用于…...

Unity2D 关于N方向俯视角 中 角色移动朝向的问题

通常对俯视角2d游戏的角色移动我们使用简单2d混合树的方式,但是其不移动时的朝向该如何定义? 十分简单:移动和不移动之间形成逻辑自锁 详细说明思路就是再创建一个简单2d混合树 定义其N方向的idle 并用lastDirc二维向量保存玩家输入,当玩家输…...

pytorch 和tensorflow loss.item()` 只能用于只有一个元素的张量. 防止显存爆炸

loss.item() 是 PyTorch 中的一个方法,它用于从一个只包含单个元素的张量(tensor)中提取出该元素的值,并将其转换为一个 Python 标量(即 int 或 float 类型)。这个方法在训练神经网络时经常用到&#xff0c…...

链表刷题|判断回文结构

题目来自于牛客网,本文章仅记录学习过程的做题理解,便于梳理思路和复习 我做题喜欢先把时间复杂度和空间复杂度放一边,先得有大概的解决方案,最后如果时间或者空间超了再去优化即可。 思路一:要判断是否为回文结构则…...

海盗王集成网关和商城服务端功能golang版

之前用golang把海盗王的商城服务端和网关服务端都重写了一次。 后来在同时开启网关和商城服务时,发现窗口数量有点多,有时要找到商城窗口比较麻烦。 既然2个都是用golang govcl写的,是不是可以集成到一起,方便使用呢?…...

SCI 中科院分区中位于4区,JCR分区位于Q2 是什么水平?

环境: ACM Transactions on Interactive Intelligent Systems 《Acm Transactions On Interactive Intelligent Systems》(《交互式智能系统上的 Acm 事务》)是一本由ASSOC COMPUTING MACHINERY (ACM)出版的Computer Interaction-Computer Science-Human学术刊物&…...

微知-Mellanox网卡的另外一种升级方式mlxup?(mlxup -d xxx -i xxx.bin)

背景 一般升级Mellanox网卡使用flint,还有另外一种叫做mlxup。 NVIDIA 提供了两种固件工具来更新和查询适配器固件: MLXUP - 固件更新和查询实用程序。该实用程序允许扫描服务器计算机以查找可用的 NVIDIA 适配器,并指示每个适配器是否需要…...

《Shader入门精要》透明效果

代码以及实例图可以看github :zaizai77/Shader-Learn: 实现一些书里讲到的shader 在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道(Alpha Channel)​。当开启透明混合后,当一个物体被渲染到屏幕上时&…...

Linux之SELinux与防火墙

一、SELinux的说明 开发背景与目的: SELinux由美国国家安全局(NSA)开发,旨在避免资源的误用。传统的Linux基于自主访问控制(DAC),通过判断进程所有者/用户组与文件权限来控制访问,对…...

深度学习使用LSTM实现时间序列预测

大家好,LSTM是一种特殊的循环神经网络(RNN)架构,它被设计用来解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题,特别是在时间序列预测、自然语言处理和语音识别等领域中表现出色。LSTM的核心在于其独特的门控机…...

Vue第一篇:组件模板总结

前言 本文希望读者有一定的Vue开发经验&#xff0c;样例采用vue中的单文件组件&#xff0c;也是我的个人笔记&#xff0c;欢迎一起进步 必须有根元素 这是一个最简单的vue单文件组件&#xff0c;<template></template>被称为模板&#xff0c;模板中必须有一个根元素…...

时钟使能、

时钟使能 如果正确使用&#xff0c;时钟使能能够显著地降低系统功耗&#xff0c;同时对面积或性能的影响极小。但是如果不正确地使用时钟使能&#xff0c; 可能会造成下列后果&#xff1a; • 面积增大 • 密度减小 • 功耗上升 • 性能下降 在许多使用大量控制集的…...

1. Autogen官网教程 (Introduction to AutoGen)

why autogen The whole is greater than the sum of its parts.(整体的功能或价值往往超过单独部分简单相加的总和。) -Aristotle autogen 例子 1. 导入必要的库 首先&#xff0c;导入os库和autogen库中的ConversableAgent类。 import os from autogen import Conversable…...

开源账目和账单

开源竞争&#xff1a; 开源竞争&#xff08;当你无法彻底掌握技术的时候&#xff0c;你就开源这个技术&#xff0c;让更多的人了解这个技术&#xff0c;形成更多的技术依赖&#xff0c;你会说这不就是在砸罐子吗&#xff1f;一个行业里面总会有人砸罐子&#xff0c;你不如先砸…...

vue2面试题10|[2024-11-24]

问题1&#xff1a;vue设置代理 如果你的前端应用和后端API服务器没有运行在同一个主机上&#xff0c;你需要在开发环境下将API请求代理到API服务器。这个问题可以通过vue.config.js中的devServer.proxy选项来配置。 1.devServer.proxy可以是一个指向开发环境API服务器的字符串&…...

c语言与c++到底有什么区别?

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于c语言与c区别的相关内容&#xff01; 关…...

云计算-华为HCIA-学习笔记

笔者今年7月底考取了华为云计算方向的HCIE认证&#xff0c;回顾从IA到IE的学习和项目实战&#xff0c;想整合和分享自己的学习历程&#xff0c;欢迎志同道合的朋友们一起讨论&#xff01; 第二章&#xff1a;服务器基础 服务器是什么&#xff1f; 服务器本质上就是个性能超强的…...

优先算法 —— 双指针系列 - 复写零

目录 1. 复写零 2. 算法原理 一般情况下 改为就地操作&#xff1a;从左到右&#xff08;错误&#xff09; 从右到左 总结一下解决方法&#xff1a; 如何找到最后一个复写的数 特殊情况 完整步骤&#xff1a; 3. 代码 1. 复写零 题目链接&#xff1a;1089. 复写零 - 力…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

搭建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…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...