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

news2024/11/27 20:33:57

概述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2248619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch基础05_模型的保存和加载

目录 一、模型定义组件——重构线性回归 二、模型的加载和保存 2、序列化保存对象和加载 3、保存模型参数 一、模型定义组件——重构线性回归 回顾之前的手动构建线性回归案例: 1.构建数据集;2.加载数据集(数据集转换为迭代器);3.参数初…

《Python基础》之函数的用法

一、简介 在 Python 中,函数是一段可重用的代码块,用于执行特定的任务。函数可以帮助你将代码模块化,提高代码的可读性和可维护性。 函数的用途 代码重用:通过函数,你可以将常用的代码块封装起来,避免重复…

java:aqs实现自定义锁

aqs采用模板方式设计模式,需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…

【小白学机器学习34】基础统计2种方法:用numpy的方法np().mean()等进行统计,pd.DataFrame.groupby() 分组统计

目录 1 用 numpy 快速求数组的各种统计量:mean, var, std 1.1 数据准备 1.2 直接用np的公式求解 1.3 注意问题 1.4 用print() 输出内容,显示效果 2 为了验证公式的背后的理解,下面是详细的展开公式的求法 2.1 均值mean的详细 2.2 方差…

vue2 中使用 Ag-grid-enterprise 企业版

文章目录 问题Vue2 引入企业版不生效npm run dev 时卡住了94% after seal 卡在这里了测试打包源 git 解决方案记录 问题 我想用企业版的树状表格 Vue2 引入企业版不生效 编译引入 // vue.config.js module.exports {transpileDependencies: ["ag-grid-enterprise"…

RESTful快速开发

(3)RESTful快速开发 (2)中的控制器仍然存在大量的冗余代码 问题1: 每个方法的RequestMapping注解中都定义了访问路径/users,重复性太高 问题2:每个方法的RequestMapping注解中都要使用method属…

万能门店小程序管理系统 doPageGetFormList SQL注入漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

【作业九】RNN-SRN-Seq2Seq

点击查看作业内容 目录 1 实现SRN (1)使用numpy实现 (2)在(1)的基础上,增加激活函数tanh (3)使用nn.RNNCell实现 (4)使用nn.RNN实现 2 使用R…

Emgu (OpenCV)

Emgu Github Emgu 环境: Emgu CV 4.9.0 netframework 4.8 1、下载 libemgucv-windesktop-4.9.0.5494.exe 安装后,找到安装路径下的runtime文件夹复制到c#项目Debug目录下 安装目录 c# Debug目录

YOLOv8模型pytorch格式转为onnx格式

一、YOLOv8的Pytorch网络结构 model DetectionModel((model): Sequential((0): Conv((conv): Conv2d(3, 64, kernel_size(3, 3), stride(2, 2), padding(1, 1))(act): SiLU(inplaceTrue))(1): Conv((conv): Conv2d(64, 128, kernel_size(3, 3), stride(2, 2), padding(1, 1))(a…

澳洲房产市场数据清洗、聚类与可视化综合分析

本项目涉及数据清洗及分析时候的思路,如果仅在CSDN中看,可能会显得有些乱,建议去本人和鲸社区对应的项目中去查看,源代码和数据集都是免费下载的。 声明:本项目的成果可无偿分享,用于学习交流。但请勿用于…

IT服务团队建设与管理

在 IT 服务团队中,需要明确各种角色。例如系统管理员负责服务器和网络设备的维护与管理;软件工程师专注于软件的开发、测试和维护;运维工程师则保障系统的稳定运行,包括监控、故障排除等。通过清晰地定义每个角色的职责&#xff0…

go-zero(八) 中间件的使用

go-zero 中间件 一、中间件介绍 中间件(Middleware)是一个在请求和响应处理之间插入的程序或者函数,它可以用来处理、修改或者监控 HTTP 请求和响应的各个方面。 1.中间件的核心概念 请求拦截:中间件能够在请求到达目标处理器之…

Qt Graphics View 绘图架构

Qt Graphics View 绘图架构 "QWGraphicsView.h" 头文件代码如下&#xff1a; #pragma once#include <QGraphicsView>class QWGraphicsView : public QGraphicsView {Q_OBJECTpublic:QWGraphicsView(QWidget *parent);~QWGraphicsView();protected:void mouseM…

【eNSP】动态路由协议RIP和OSPF

动态路由RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;和OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是两种常见的动态路由协议&#xff0c;它们各自具有不同的特点和使用场景。本篇会对这两种协…

差分 + 模拟,CF 815A - Karen and Game

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 815A - Karen and Game 二、解题报告 1、思路分析 一个经典的差分数组的…

vue3【实战】响应式的登录界面

效果预览 WEB 端效果 移动端效果 技术方案 vue3 vite Element Plus VueRouter UnoCSS TS vueUse AutoImport 技术要点 响应式设计 移动端&#xff1a;图片切换为绝对定位&#xff0c;下移一层&#xff0c;成为背景图片 <el-imageclass"w-screen h-screen lt-md…

加速科技精彩亮相中国国际半导体博览会IC China 2024

11月18日—20日&#xff0c;第二十一届中国国际半导体博览会&#xff08;IC China 2024&#xff09;在北京国家会议中心顺利举办&#xff0c;加速科技携重磅产品及全系测试解决方案精彩亮相&#xff0c;加速科技创始人兼董事长邬刚受邀在先进封装创新发展论坛与半导体产业前沿与…

php反序列化1_常见php序列化的CTF考题

声明&#xff1a; 以下多内容来自暗月师傅我是通过他的教程来学习记录的&#xff0c;如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考&#xff1a;php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…

RustDesk 搭建

RustDesk 服务端下载&#xff1a;https://github.com/rustdesk/rustdesk-server/releases RustDesk 客户端下载&#xff1a;https://github.com/rustdesk/rustdesk/releases RustDesk 官方部署教程&#xff1a;https://rustdesk.com/docs/zh-cn/ 1&#xff1a;RustDesk 概览# 1…