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

立创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线掰开,就能得到三块板子:

  1. 定位板:固定机械轴和键帽。
  2. 主控板:核心大脑,承载ESP32-C3芯片及其最小系统。这里我提供了两个选项:使用现成的合宙ESP32-C3开发板,或者使用我重新绘制的兼容PCB(board1)。
  3. 底板:承载电池、电源管理芯片、RGB灯和轴座,并与主控板连接。

拼版设计示意图,拿到后剪开即可

核心特性:

  • 主控:ESP32-C3(RISC-V内核,集成蓝牙5.0)
  • 连接:蓝牙HID,无需接收器
  • 轴体:支持全键热插拔(使用凯华热插拔轴座)
  • 背光:每键一颗可编程RGB LED(WS2812B反贴灯)
  • 供电:内置锂电池,支持充放电管理(ETA9741芯片)
  • 结构:螺丝固定,可拆卸维护

2. 物料清单(BOM)与硬件详解

动手之前,先把所有需要的零件备齐。下面这个清单非常详细,你可以在立创商城或其它电子元器件平台一站式购齐。

2.1 电子元器件清单

类别型号/规格数量备注
电源管理ETA97411颗充放电管理芯片,核心
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

  1. 分离PCB:收到打样回来的板子后,沿着板子中间的V-CUT线(一条浅浅的切割线),小心地将其掰成定位板、主控板、底板三块。
  2. 焊接顺序建议:遵循“先贴片,后直插;先矮件,后高件”的原则。
    • 首先焊接底板上的贴片元件:电阻、电容、ETA9741芯片、电感、WS2812B灯珠。
    • 重中之重:焊接WS2812B灯珠时,务必核对方向(小三角在右下角)。可以使用烙铁或热风枪,注意温度不要过高,避免烫坏灯珠。
    • 然后焊接热插拔轴座。轴座有方向,对准PCB上的孔位按压下去,从背面焊接固定即可。
    • 最后焊接拨动开关。
  3. 焊接主控板(如果使用自制的board1):如果你的主控是使用我绘制的board1,则需要焊接ESP32-C3芯片及其周边的阻容元件。如果使用合宙模块,则只需将模块焊接到底板对应的焊盘上。

3.2 机械结构组装

组装顺序可以参考下图,确保螺丝、螺柱、螺母正确配合:

  1. M2螺柱(6+3mm)拧入定位板的四个螺丝孔。
  2. M2x12mm螺丝穿过底板的对应孔位。
  3. 将底板和定位板对准,把螺丝拧入第一步已经固定在定位板上的螺柱中。
  4. 在螺丝尾部拧上M2螺母锁紧。
  5. 将机械轴体插入定位板,并卡入热插拔轴座中。
  6. 盖上键帽。
  7. 将电池放入底板预留空间,并用双面胶或泡棉胶固定。

3.3 电池激活与测试

大多数聚合物锂电池出厂时处于“休眠”状态,需要先充电激活。

  1. 将键盘通过Type-C接口连接到电脑或5V充电器上。
  2. 此时ETA9741的充电指示灯(通常是一个红色LED)应该会亮起,表示正在充电。
  3. 充电一段时间(约半小时到一小时)后,可以打开电源开关,测试系统是否上电。

4. 软件环境搭建与程序烧录

硬件组装好了,接下来就是赋予它灵魂——写入程序。

4.1 开发环境准备

你可以选择Arduino IDEVSCode + PlatformIO。这里以更通用的Arduino IDE为例。

  1. 安装Arduino IDE:从官网下载并安装。
  2. 添加ESP32开发板支持
    • 打开Arduino IDE,进入文件 -> 首选项
    • 在“附加开发板管理器网址”中填入:
      https://espressif.github.io/arduino-esp32/package_esp32_index.json
    • 然后进入工具 -> 开发板 -> 开发板管理器,搜索“esp32”,找到并安装“Espressif Systems”提供的ESP32开发板包。

提示:如果网络环境导致安装缓慢或失败,可以搜索“Arduino ESP32 离线安装”寻找国内镜像的安装方法。

4.2 烧录程序到键盘

这是最关键的一步,烧录设置不对会导致键盘无法启动。

  1. 连接键盘:用USB线连接键盘和电脑。
  2. 选择开发板与端口
    • 工具 -> 开发板选择 “ESP32C3 Dev Module”。
    • 工具 -> Port选择识别到的串口(如COMx或/dev/cu.usbmodemxxx)。
  3. 关键配置:根据你使用的主控板,进行不同的设置。
    • 如果使用合宙的ESP32-C3开发板
      • 工具 -> Flash Mode选择DIO
    • 如果使用本工程自制的ESP32-C3板(board1)
      • 工具 -> Flash Mode选择QIO
  4. 烧录程序:打开我提供的项目源代码(.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:无法烧录程序

    • 检查1Flash Mode设置是否正确?合宙板用DIO,自制板用QIO,务必核对!
    • 检查2:USB线是否只充电不支持数据?换一根线试试。
    • 检查3:串口端口是否被其他软件占用?关闭可能的串口监视器。
    • 检查4(针对不带串口的合宙板):是否正确连接了外部串口调试器,并使开发板进入了下载模式?
  • 问题4:电池不供电或充不进电

    • 检查1:电池是否激活?先插上USB充电一段时间试试。
    • 检查2:检查ETA9741芯片及周围的电感、电容是否焊接牢固,有无虚焊或短路。

这个项目从构思到实现,最大的乐趣在于把想法一点点变成现实。虽然它只有三个键,但麻雀虽小五脏俱全,涵盖了开源硬件DIY的完整流程。希望这篇详细的攻略能帮你顺利做出自己的第一把客制化键盘。如果在制作过程中遇到任何问题,欢迎在立创EDA的原项目页面下留言讨论。祝你制作顺利,享受创造的快乐!

http://www.jsqmd.com/news/455972/

相关文章:

  • PaddleOCR-VL-WEB新手指南:从零开始,轻松掌握文档解析大模型
  • HTTPS 抓包实战选型:从开发联调到安全渗透,如何构建你的工具组合拳
  • 拖延症福音 AI论文工具 千笔AI VS 学术猹,本科生专属利器!
  • EcomGPT-中英文-7B电商模型在Web开发中的全栈应用:从前端到AI后端
  • 快速上手:10分钟完成cv_resnet101_face-detection_cvpr22papermogface 镜像部署与测试
  • 告别ifconfig!Ubuntu服务器网络配置的正确姿势:netplan实战详解
  • Qt6串口通信实战:如何用QSerialPort实现毫秒级数据响应(附完整QML界面代码)
  • Blender+QGIS实战:如何将带高度的Shapefile一键转成3D模型(FBX/GLB/GLTF全流程)
  • 智能工具如何提升MOOC学习效率:全面解决方案指南
  • MiniCPM-o-4.5-nvidia-FlagOS对话能力深度评测:对比ChatGPT与Claude
  • 告别流氓软件!用图吧工具箱检测二手电脑的5个关键步骤(附验机清单)
  • 立知多模态重排序模型:开箱即用,解决“找得到但排不准”难题
  • 庖丁解牛DDR系列(一)--从内存条标签到内部寻址
  • 达梦DM8数据库TPCC压测全流程:从BenchmarkSQL配置到性能优化实战
  • 微信小程序的汽车租赁系统设计与实现
  • BUCK电源瞬态响应实战:如何用输出电容和环路带宽驯服‘电流豹子’?
  • 手机也能跑!通义千问3-4B保姆级部署教程:打造本地长文本AI
  • 小白友好:通义千问1.8B聊天模型部署与测试完整流程
  • 从零开始:如何用Sirius开源扫描器发现你网站的安全漏洞(实战案例解析)
  • OpenWebUI实战:如何用硅基流动稳定部署DeepSeek R1(含推理显示配置)
  • 微信小程序的流浪动物救助站管理系统
  • 利用快马平台AI能力,十分钟快速生成SpringBoot项目原型
  • 【实战指南】8D报告全流程解析:从理论到落地的关键步骤
  • 微信小程序的老年人康养系统 养老院管理系统k9d90ecb
  • 【实战指南】利用Hawkeye快速定位Windows系统中的恶意进程与隐藏威胁
  • Elasticsearch 聚合查询实战:从基础桶到复杂嵌套分析
  • 利用CodeBuddy的Figma MCP插件,3分钟实现原型图到前端代码的零代码转换
  • GME多模态向量-Qwen2-VL-2B零基础教程:3步搭建智能文档检索系统
  • 微信小程序的车辆维修保养 汽车维修报销管理系统的设计与实现
  • uni-app实战:利用html2canvas和jspdf实现高清PDF生成与优化