立创EDA开源项目:基于ESP32-C3的CV工程师三键蓝牙键盘DIY全攻略
立创EDA开源项目:基于ESP32-C3的CV工程师三键蓝牙键盘DIY全攻略
最近在B站和立创社区看到不少朋友在玩各种客制化键盘,作为一个经常和代码打交道的嵌入式工程师,我总在想能不能自己做一个既好玩又实用的小玩意儿。于是就有了这个想法:做一个专属于我们“CV工程师”(复制粘贴工程师)的迷你蓝牙键盘,只有三个最核心的键——Ctrl+X、Ctrl+C、Ctrl+V。
说干就干,我选择了ESP32-C3作为主控,因为它自带蓝牙,价格也比STM32亲民不少,非常适合DIY。整个项目从画板、打样到焊接、编程,前后折腾了小一个月,现在第一版已经验证成功,可以稳定使用了。今天我就把这个项目的完整制作过程分享出来,手把手教你从零复刻这个三键小键盘。无论你是刚入门的嵌入式爱好者,还是想找个有趣项目练手的创客,跟着这篇攻略走,都能把它做出来。
1. 项目概览与核心思路
咱们先来看看这个键盘到底是个啥,以及我为什么这么设计。
1.1 什么是“CV工程师键盘”?
顾名思义,这是一个为简化“复制(Ctrl+C)”、“粘贴(Ctrl+V)”、“剪切(Ctrl+X)”这三个高频操作而生的迷你键盘。它只有三个机械轴,通过蓝牙连接到你的电脑、平板甚至手机,按下对应的键,就相当于按下了键盘上的组合键。它的核心价值在于:
- 效率工具:将需要两只手操作(一手按Ctrl,一手按字母键)的组合键,简化成单手一键触发。
- 可编程玩具:基于ESP32-C3,你可以通过Arduino轻松改写键值。比如把X键改成Z,实现“一键撤销(Ctrl+Z)”,或者定义成其他任何你想要的快捷键。
- 入门级DIY项目:涵盖了PCB设计、焊接、电源管理、蓝牙HID(人机接口设备)编程等嵌入式开发的多个基础环节,是个非常综合的练手项目。
1.2 硬件设计总览
为了降低制作难度和成本,我把整个键盘的PCB(电路板)设计成了“三合一”拼版。你只需要在立创EDA下单一次,收到后沿着V-CUT线掰开,就能得到三块板子:
- 定位板:固定机械轴和键帽。
- 主控板:核心大脑,承载ESP32-C3芯片及其最小系统。这里我提供了两个选项:使用现成的合宙ESP32-C3开发板,或者使用我重新绘制的兼容PCB(board1)。
- 底板:承载电池、电源管理芯片、RGB灯和轴座,并与主控板连接。
拼版设计示意图,拿到后剪开即可
核心特性:
- 主控:ESP32-C3(RISC-V内核,集成蓝牙5.0)
- 连接:蓝牙HID,无需接收器
- 轴体:支持全键热插拔(使用凯华热插拔轴座)
- 背光:每键一颗可编程RGB LED(WS2812B反贴灯)
- 供电:内置锂电池,支持充放电管理(ETA9741芯片)
- 结构:螺丝固定,可拆卸维护
2. 物料清单(BOM)与硬件详解
动手之前,先把所有需要的零件备齐。下面这个清单非常详细,你可以在立创商城或其它电子元器件平台一站式购齐。
2.1 电子元器件清单
| 类别 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|
| 电源管理 | ETA9741 | 1颗 | 充放电管理芯片,核心 |
| 0420封装 2.2uH电感 | 1颗 | 用于ETA9741的升压电路 | |
| 0805封装 22uF电容 | 2颗 | 输入/输出滤波 | |
| 0603封装 10uF电容 | 1颗 | ||
| 0603封装 1uF电容 | 2颗 | ||
| 0603封装 100nF (0.1uF)电容 | 3颗 | 退耦电容 | |
| 输入与灯光 | 凯华热插拔轴座 | 3个 | 用于安装机械轴 |
| 反贴WS2812B灯珠 | 3颗 | 注意是反贴(Bottom View),焊接方向很重要 | |
| MSK-12C02拨动开关 | 1个 | 电源总开关 | |
| 供电 | 402020聚合物锂电池 | 1块 | 尺寸20mm x 20mm,标称电压3.7V |
| 主控 | 选项A:合宙ESP32-C3开发板 | 1块 | 带USB串口版本缺货,可用不带串口的版本+外部调试器 |
| 选项B:自制ESP32-C3板(board1) | 1块 | 本工程PCB的一部分,已验证成功 | |
| 结构件 | M2x12mm 螺丝 | 4颗 | 固定上下盖 |
| M2 螺母 | 4颗 | ||
| M2 6+3mm 螺柱 | 4颗 | 用于支撑和确定键盘厚度 |
注意:关于主控的选择,合宙带USB串口(方便烧录程序)的版本经常缺货。我的解决方案是直接在自己画的键盘PCB里集成了一块ESP32-C3的最小系统板(即board1),这样打板回来就自带主控了,省事。如果你选择购买合宙的不带串口版本(价格便宜,约9.9元),则需要额外准备一个USB转TTL串口调试器来烧录程序。
2.2 关键部件说明与选型替代
1. 主控:ESP32-C3这是项目的大脑。我选择它而不是STM32,主要原因就是成本低且原生集成蓝牙,不需要外挂蓝牙模块。ESP32-C3基于RISC-V架构,功耗和性价比都不错。在Arduino环境下开发也非常方便。
2. 电源管理芯片:ETA9741这是一个集成了充电、升压、路径管理的芯片。它的作用是:
- 通过USB口给内置的3.7V锂电池充电。
- 将电池的3.7V电压升压到稳定的5V,供给ESP32-C3和RGB灯珠。
- 实现有USB插入时用USB供电,无USB时自动切换电池供电。 这颗芯片大大简化了DIY的电源设计难度。
3. RGB灯珠:WS2812B(反贴)这是可寻址RGB灯珠,每个灯珠都可以单独控制颜色和亮度。“反贴”的意思是它的发光面朝向PCB板子背面。焊接时务必注意方向:在PCB正面(有丝印的一面)朝上看,灯珠上的小三角标记应该在右下角。焊反了灯不会亮。
RGB灯珠焊接方向示意图(从PCB正面看)
4. 电池:402020锂电池尺寸为20x20mm,非常小巧。实际上键盘内部空间有冗余,甚至可以叠放两块以增加续航。购买时选择带保护板的,更安全。
3. 制作与组装步骤
东西齐了,咱们就开始动手组装。这个过程就像拼乐高,细心一点就能成功。
3.1 焊接PCB
- 分离PCB:收到打样回来的板子后,沿着板子中间的V-CUT线(一条浅浅的切割线),小心地将其掰成定位板、主控板、底板三块。
- 焊接顺序建议:遵循“先贴片,后直插;先矮件,后高件”的原则。
- 首先焊接底板上的贴片元件:电阻、电容、ETA9741芯片、电感、WS2812B灯珠。
- 重中之重:焊接WS2812B灯珠时,务必核对方向(小三角在右下角)。可以使用烙铁或热风枪,注意温度不要过高,避免烫坏灯珠。
- 然后焊接热插拔轴座。轴座有方向,对准PCB上的孔位按压下去,从背面焊接固定即可。
- 最后焊接拨动开关。
- 焊接主控板(如果使用自制的board1):如果你的主控是使用我绘制的board1,则需要焊接ESP32-C3芯片及其周边的阻容元件。如果使用合宙模块,则只需将模块焊接到底板对应的焊盘上。
3.2 机械结构组装
组装顺序可以参考下图,确保螺丝、螺柱、螺母正确配合:
- 将M2螺柱(6+3mm)拧入定位板的四个螺丝孔。
- 将M2x12mm螺丝穿过底板的对应孔位。
- 将底板和定位板对准,把螺丝拧入第一步已经固定在定位板上的螺柱中。
- 在螺丝尾部拧上M2螺母锁紧。
- 将机械轴体插入定位板,并卡入热插拔轴座中。
- 盖上键帽。
- 将电池放入底板预留空间,并用双面胶或泡棉胶固定。
3.3 电池激活与测试
大多数聚合物锂电池出厂时处于“休眠”状态,需要先充电激活。
- 将键盘通过Type-C接口连接到电脑或5V充电器上。
- 此时ETA9741的充电指示灯(通常是一个红色LED)应该会亮起,表示正在充电。
- 充电一段时间(约半小时到一小时)后,可以打开电源开关,测试系统是否上电。
4. 软件环境搭建与程序烧录
硬件组装好了,接下来就是赋予它灵魂——写入程序。
4.1 开发环境准备
你可以选择Arduino IDE或VSCode + PlatformIO。这里以更通用的Arduino IDE为例。
- 安装Arduino IDE:从官网下载并安装。
- 添加ESP32开发板支持:
- 打开Arduino IDE,进入
文件 -> 首选项。 - 在“附加开发板管理器网址”中填入:
https://espressif.github.io/arduino-esp32/package_esp32_index.json - 然后进入
工具 -> 开发板 -> 开发板管理器,搜索“esp32”,找到并安装“Espressif Systems”提供的ESP32开发板包。
- 打开Arduino IDE,进入
提示:如果网络环境导致安装缓慢或失败,可以搜索“Arduino ESP32 离线安装”寻找国内镜像的安装方法。
4.2 烧录程序到键盘
这是最关键的一步,烧录设置不对会导致键盘无法启动。
- 连接键盘:用USB线连接键盘和电脑。
- 选择开发板与端口:
工具 -> 开发板选择 “ESP32C3 Dev Module”。工具 -> Port选择识别到的串口(如COMx或/dev/cu.usbmodemxxx)。
- 关键配置:根据你使用的主控板,进行不同的设置。
- 如果使用合宙的ESP32-C3开发板:
工具 -> Flash Mode选择DIO。
- 如果使用本工程自制的ESP32-C3板(board1):
工具 -> Flash Mode选择QIO。
- 如果使用合宙的ESP32-C3开发板:
- 烧录程序:打开我提供的项目源代码(
.ino文件),点击上传按钮。等待编译和烧录完成。
注意:如果你购买的是合宙“不带串口”的版本(便宜的那款),它没有内置USB转串口芯片。你需要额外使用一个USB转TTL串口调试器,将其RX/TX/GND引脚分别连接到开发板上对应的烧录引脚(通常是GPIO8/U0TXD和GPIO9/U0RXD),并手动让开发板进入下载模式(拉低GPIO9后复位),才能烧录。相比之下,使用我自制的board1或合宙带串口的版本会省事很多。
4.3 程序功能与自定义
我提供的初始程序已经实现了三个按键分别模拟Ctrl+X,Ctrl+C,Ctrl+V的功能,并包含简单的RGB呼吸灯效。代码结构清晰,你可以轻松修改:
// 示例:修改键值映射 const uint8_t keymap[3] = { KEY_LEFT_CTRL, KEY_X, // 第一个键:Ctrl + X (剪切) KEY_LEFT_CTRL, KEY_C, // 第二个键:Ctrl + C (复制) KEY_LEFT_CTRL, KEY_V // 第三个键:Ctrl + V (粘贴) }; // 如果你想改成 Ctrl+Z (撤销),只需将 KEY_X 改为 KEY_Z // const uint8_t keymap[3] = { // KEY_LEFT_CTRL, KEY_Z, // 改为撤销 // KEY_LEFT_CTRL, KEY_C, // KEY_LEFT_CTRL, KEY_V // };RGB灯效在代码中也有独立的函数控制,你可以发挥创意,编写流水灯、彩虹波等效果。
5. 调试与常见问题
制作过程中难免会遇到一些小问题,这里把我踩过的坑总结一下:
问题1:RGB灯不亮
- 检查1:首先确认WS2812B灯珠是否焊反。这是最常见的问题。
- 检查2:检查灯珠的电源(5V)和地线是否焊接良好。
- 检查3:数据线(DIN)是否正确地连接到了ESP32-C3的对应引脚(如GPIO8)。
问题2:按键无反应,但系统有电(RGB灯可能亮)
- 检查1:用镊子短接轴座的两个焊盘,模拟按键按下。如果此时电脑有反应,说明是机械轴体或轴座接触问题。
- 检查2:检查程序中的按键引脚定义是否与实际PCB设计一致。
- 检查3:蓝牙是否连接成功?查看电脑的蓝牙设备列表,确认键盘已配对并连接。
问题3:无法烧录程序
- 检查1:Flash Mode设置是否正确?合宙板用DIO,自制板用QIO,务必核对!
- 检查2:USB线是否只充电不支持数据?换一根线试试。
- 检查3:串口端口是否被其他软件占用?关闭可能的串口监视器。
- 检查4(针对不带串口的合宙板):是否正确连接了外部串口调试器,并使开发板进入了下载模式?
问题4:电池不供电或充不进电
- 检查1:电池是否激活?先插上USB充电一段时间试试。
- 检查2:检查ETA9741芯片及周围的电感、电容是否焊接牢固,有无虚焊或短路。
这个项目从构思到实现,最大的乐趣在于把想法一点点变成现实。虽然它只有三个键,但麻雀虽小五脏俱全,涵盖了开源硬件DIY的完整流程。希望这篇详细的攻略能帮你顺利做出自己的第一把客制化键盘。如果在制作过程中遇到任何问题,欢迎在立创EDA的原项目页面下留言讨论。祝你制作顺利,享受创造的快乐!
