展示部分在真实课堂上录制,有他人说话的噪音确实很正常 : (
页面上方的视频已按要求删除展示部分的背景声。
一键复制、一键粘贴,开学抢课快人一步。
本项目的电路真的很简单,很容易复现。
一、项目与功能应用介绍
一个能够一键复制,一键粘贴的外置宏键盘,在一些文字编辑场合中发挥重要作用,例如编辑实验报告,或网上选课系统抢热门课时高速复制黏贴课程名称。鉴于笔记本电脑USB接口数量有线,我非常需要一个能够实现相关功能的蓝牙CV键盘。
CV小键盘的主控是ESP32-C3-WROOM-02/02U。该键盘有2个机械按键,一个滑动开关,可以实现一键ctrl-c和一键ctrl-v,或一键回车和鼠标连点的功能,带背光灯。此外,还有两个轻触开关用于主控复位和烧录模式配置。笔记本电脑通过蓝牙连接至小键盘,不占用USB接口。小键盘外接5v电源供电。
CV小键盘可以用于智慧家用电器(计算机外设),或者用于电子创意制作教育等领域。
基于蓝牙的无线键盘有不占用USB接口、(理论上)可以在安卓平板电脑上使用,无需额外的OTG数据线,优于传统的有线键盘。ESP32系列处理器在国内外拥有众多开发者,开源资料丰富,是不少新手入门的选择。本项目在完善后,也可以作为电子创意制作的入门内容,以焊接练习或者Arduino实战开发的形式提供给感兴趣的爱好者。
二、规定厂商器件介绍
2.1 乐鑫科技
为了实现无线功能,本项目选择乐鑫科技的ESP32-C3作为主控。ESP32-C3 是一款安全稳定、低功耗、低成本的物联网芯片,搭载 RISC-V 32 位单核处理器,支持 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE),为物联网产品提供行业领先的射频性能、完善的安全机制和丰富的内存资源。ESP32-C3 对 Wi-Fi 和 Bluetooth 5 (LE) 的双重支持降低了设备配网难度,适用于广泛的物联网应用场景。
ESP32-C3拥有良好的生态环境,支持ESP-IDF和Arduino平台开发。它的例程众多,网站博客资料数不胜数。这些资料为我进行开发工作提供了宝贵的参考。ESP32系列处理器的开发难度不高,容易在短时间内实现产品功能。
本项目为了提高设计的可靠性,围绕ESP32-C3-WROOM-02/02U模组进行开发。它以半孔的形式引出部分芯片引脚,手工焊接的难度低,有助于提高焊接成功率。由于某些不合理的原因(ECCN 5A002A ESP)该模组在digikey上暂时无法购买。
2.2 Texas Instruments
TLV1117LV33DCYR是一款静态电流比传统 1117 稳压器低 500 倍的超低功耗器件,可提供出色的线路与负载瞬态性能,从而可在负载电流要求由不足 1mA 变为超过 500mA 时产生幅值极低的下冲与过冲输出电压。该芯片输入电压范围2~5.5V,输出电压3.3V,输出电流1A时压降455mV。
三、设计思路与方案介绍
3.1 整体思路
确定项目需求,选定处理器种类后,我前往乐鑫官网找到相关芯片模组的手册,并参考原厂手册上的推荐设计以及官方开发板的电路,使用KiCad 7.0展开原理图与PCB设计。嵌入式软件使用Arduino平台开发。
3.2 方案框图
使用ESP32-C3采集按键信息,将其转化为对应的蓝牙指令,实现所需按键功能。机械开关采用机械键盘轴体,提供极佳的手感和声音反馈(青轴)。
供电暂时采用外接5V的方式供电,经由TLV1117LV33DCYR芯片转换为ESP32-C3所需的3.3V电源。本项目暂未考虑电池供电的方案,理由是ESP32-C3开启蓝牙后的功耗较大,约为80mA(5V供电),目前尚未找到从软件角度降低功耗的手段。CV小键盘推荐使用充电宝供电。
3.3 原理图说明
CV小键盘通过USB-Micro接口供电和烧录程序。因为USB-Micro接口的焊接难度远低于16-pin USB Type-C接口,可以承受键盘的工作电流,而且器件单价低于充电专用的6-pin USB Type-C接口。两个机械按键(SW3、SW4)、滑动开关(SW5)和复位按键(SW2)全部上拉至3.3V,而且机械按键采用100nF电容硬件滤波。如有必要,除了复位按键外,两个机械按键和滑动开关的上拉电阻可不焊,通过编程配置GPIO引脚上拉。原理图的电路设计可以进一步精简。
另外,使用ESP32-C3-WROOM-02U或ESP32-C3-WROOM-02都可以。使用前者请自备1个I-PEX 1代接口的2.4GHz天线。所有主要元件首先在立创EDA中找到对应封装,然后用插件转换成KiCad的封装导入使用。
四、硬件制作
使用KiCad设计PCB,ESP32-C3模组的PCB天线下方区域不铺铜。导出Gerber文件交由嘉立创打样。随后手工焊接。焊接按照从低到高的顺序焊接,背面的TLV1117芯片使用热风枪焊接。ESP32-C3模组背面的散热焊盘可以不焊,不影响正常使用。机械轴体用胶带固定在PCB后焊接,有助于对准位置。
这是成品正面。图中,左侧的USB接口用于烧录程序,右侧的USB接口仅用于系统供电。MODE开关可以切换以下两个按键功能组合:一键复制/黏贴,和鼠标连点/键盘回车。EN按键用于系统复位,BOOT按键配置系统运行模式(正常/烧录)同视控制背光灯。
成品背面。预留3.3V和5V供电测试点。可以利用这些测试点,增加外置的锂电池供电模块,提高CV小键盘的便携性。但是,系统功耗(约80mA)较大,外置大容量电池体积和成本较高,在改装供电模块时需要加以考虑。
五、关键代码及说明
本项目使用Arduino平台的 ESP32 BLE Combo Keyboard Mouse库完成开发工作,在https://github.com/blackketter/ESP32-BLE-Combo手动下载库文件安装。这个库已实现蓝牙HID复合设备的功能。如果只要蓝牙键盘或鼠标的功能,也可以使用其他的Arduino库。
系统初始化包括初始化串口和蓝牙鼠标、键盘,然后初始化GPIO,最后根据滑动开关的位置,选择两个机械按键的宏定义组合(MODE_A或MODE_B)。一种宏定义组合为复制黏贴,另一种为回车和鼠标连点,可以在代码中按需更改。
void setup() {
Serial.begin(115200);
Serial.println("Starting BLE work!");
Mouse.begin();
Keyboard.begin();
pinMode(ledpin1,OUTPUT);
pinMode(ledpin2,OUTPUT);
pinMode(ledL,OUTPUT);
pinMode(ledR,OUTPUT);
pinMode(key_left,INPUT);
pinMode(key_right,INPUT);
pinMode(key_sw,INPUT);
pinMode(key_btn,INPUT_PULLUP);
digitalWrite(ledpin1,0);
digitalWrite(ledpin2,0);
key_btn_prev=digitalRead(key_btn);
digitalWrite(ledpin1,ledpin1_val);
if(digitalRead(key_sw)==0){
sys_mode=MODE_A;
}
else{
sys_mode=MODE_B;
}
}
按下轻触开关改变背光灯状态:
key_btn_stat=digitalRead(key_btn);
if(key_btn_stat!=key_btn_prev){
delay(10);
key_btn_flag++;
Serial.print(key_btn_flag);
}
key_btn_prev=key_btn_stat;
if(key_btn_flag==2){
ledpin1_val=!ledpin1_val;
ledpin2_val=!ledpin2_val;
digitalWrite(ledpin1,ledpin1_val);
digitalWrite(ledpin2,ledpin2_val);
key_btn_flag=0;
}
模拟ctrl-c组合键:
if(digitalRead(key_left)==LOW){
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.write('c');
Keyboard.releaseAll();
while(digitalRead(key_left)==LOW);
}
模拟鼠标点击:
if(digitalRead(key_left)==LOW){
Mouse.click(MOUSE_LEFT);
delay(1);
}
六、功能展示
鼠标连点功能测试。此处的测试值与计算机性能有关,仅供参考。
其他功能请看页面上方视频。
七、心得体会
这次fastbond2活动提供了自由发挥创造的机会,让我有了收获。之后我还会继续用KiCad设计些有意思的小作品,解决生活中的实际问题。通过这次活动我接触到元器件采购平台:DigiKey。
这是我做的第二个“复制黏贴小键盘”方案,之后应该还会再做几套不同的方案吧,因为STM32F103等一系列常见的处理器都配备了USB控制器。