程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

2015-06-14 23:05:25 183点赞 230收藏 105评论

大家好,这次我们继续折腾Cherry的G84-4125。上篇结尾说了加装蓝牙模块,这篇来说说具体怎么做。

一、蓝牙模块

淘宝上有很多现成的蓝牙模块卖,但不是所有的蓝牙模块都适用于改装蓝牙键盘。根本的原因是蓝牙协议分成不同的profile,蓝牙协议的Profile定义了设备如何实现一种连接或者应用,有四种是基本的Profile:GAP/SDAP/SPP/GOEP。淘宝上卖的蓝牙模块大多是支持SPP profile。SPP全称是Serial Port Profile,即串口,主要用于交换数据,不适用于键盘设备。从技术角度讲,我们也可以用这种SPP蓝牙模块来改装我们的键盘,这种键盘需要在PC端安装相应的驱动才能实现PC与改装后的键盘的连接。使用SPP蓝牙模块的好处是技术成熟,成本低。缺点是通用性差,需要写PC端驱动,如果蓝牙键盘与新电脑连接需要重新安装驱动。而且使用SPP蓝牙模块的键盘也不能用于连接手机。一般蓝牙键盘使用的是HID profile,全称是Human Interface Device Profile,即人机接口设备Profile,主要用于鼠标,键盘,游戏杆等设备。因为HID profile是蓝牙协议中支持的标准profile,所以只要是支持HID profile的蓝牙设备都可以互联。张大妈常推荐的罗技K480就是使用HID profile的蓝牙键盘,所以罗技的K480可以同时和多款手机配对互联。

淘宝上有卖采用CSR芯片的HID蓝牙模块,价格便宜。原本我也想使用这款,但是联系卖家后,卖家不提供技术支持,文档也没有,更不用说例程。最后在github上找到了一个键盘开源工程tmk_keyboard,里面使用的蓝牙模块是Bluegiga生产的WT12蓝牙模块。这款蓝牙模块使用的也是CSR的芯片,Bluegiga公司在标准的蓝牙profile上封装了自己的协议栈iWrap,用户通过iWrap控制WT12模块。WT12的售价比较高,淘宝上也有卖WT12的,价格大概在300元人民币。我个人建议不要在淘宝购买,如果想购买可以试试Bluegiga官网上推荐的几个网站,一片的价格大概在90元人民币左右。所以如果各位值友有兴趣改装蓝牙键盘,最好是上淘宝买到有技术文档或者技术支持的CSR蓝牙模块。

二、电源总成

这次要改装成无线键盘,整个键盘的电源需要从USB单供电改成电池和USB双供电。手里正好有块多余的索爱手机电池,大概900mA的样子,用来给键盘供电绰绰有余。 锂电池充电电压是4.2V,输出3.7V,需要一个5V输入/4.2V输出的充电模块和一个3.7V升5V的升压模块给主控板供电。WT12蓝牙模块是3.3V的电源,需要一个5V转3.3V的降压模块。 另外,WT12和主控板使用串口通信,但是电压不同,还需要一个电平转换模块。

这么一堆转换模块下来,整个键盘系统就太复杂了,键盘内部的空间不一定够用,而且各种转换模块的额外电源消耗太多,必须优化。

AVR的单片机是可以5V或者3.3V供电的,但是使用3.3V供电的时候需要降级主频。主控板上的AVR型号是Atmega32l,是Atmega32的低电压版本,标称主频最高8MHz。由于AVRUSB协议栈要求主频最低是12MHz,已经超频使用了,如果再用3.3V供电,有可能达不到AVRUSB协议栈要求的12MHz。不过运气不错,3.3V上12MHz晶振跑AVRUSB完全没有问题。 这样整套系统的电源模块就可以精简成:1. 锂电池充电模块。2. 3.7V转3.3V电压转换模块

为了让键盘能够继续使用USB接口,需要AVR能够检测USB线缆是否插入。检测逻辑是:如果有USB线缆插入,则优先使用USB接口,如果没有USB线缆插入,则使用蓝牙连接。所以从USB的+5V引脚引了一根线到AVR的GPIO。USB的+5V不能直接连到3.3v的GPIO上,所以通过一个5V-3.3V的电压转换模块。

画了个草图,大家凑合看一下。

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

三、调试

我买回来的WT12的iWrap协议栈是4.0的,现在WT12支持的最新iWrap协议栈是5.0,所以用串口升级了WT12的固件。升级固件及升级方法可以在Bluegiga的官网找到,按照步骤做就可以了。

升级完固件后需要对WT12做初始化设置。其实这部分工作可以通过主控板完成,但是我懒了,直接用串口设置好了。具体的初始化和设置方法可以参考这个网页

由于加装了蓝牙模块,主控板原有的代码必须改写来支持蓝牙模块。主控板是从淘宝买的,楼主没有源程序只好自己先扒PCB板,然后扒键盘矩阵,还好在github上找到了键盘开源工程tmk_keyboard,省了写键扫代码。楼主在tmk_keyboard基础上替换了串口驱动,改了键映射,加了一丢丢蓝牙搜索功能。完整代码可以在这里找到

四、组装

G84-4125的内部空间很扁平,只有上半部一小部分稍微厚一些可以放下电池。电池勉强塞进主控板与键盘底板间的缝隙。

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

锂电池充电模块。

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

键盘底板的横向沟槽里放置蓝牙模块,用热熔胶固定。

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

键盘底板的横向沟槽里放置电压转换模块,用热熔胶固定。

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

在原有的线缆出口放置电源开关。

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

最后一张,总体布局图。

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

全部模块放置完后,由于电池有点高,键盘的上半部不能完全闭合,不过不影响使用。

程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块

五、使用

键盘会优先搜索原先配对成功的设备,如果配对不成功会等待其他设备的配对请求,直到完成配对。打开键盘开关,我的Q10,同事的三星note2和笔记本电脑都均可将键盘识别成蓝牙HID设备,配对成功后打字输入没有延迟。

电池充满大概需要3个小时,由于没有留电池充电指示灯,所以每次判断是否充电完成只能靠蒙,不过电池续行还是挺给力的,每天工作时间使用,下班关掉电源开关,可以连续使用一个星期。因为没有使能蓝牙和单片机的低功耗功能,所以一个星期的续航还是可以接受的。

不足的是,没有挖掘出蓝牙模块的全部潜力,比如没有动态切换设备功能,就像逻辑K480那样可以在3个设备之间自由切换;比如WT12模块还支持A2DP profile,可以在键盘上扩展出耳麦接口,实现蓝牙键盘耳机程序猿的自我修养:Cherry 樱桃 G84-4125 加装蓝牙模块 。比如充电指示灯,等等。总之,潜力巨大,可以继续折腾。

完了。

展开 收起
105评论

  • 精彩
  • 最新
  • 这个走线,真是让有强迫症的人难以忍受,莫名的想起了数电模电的实验

    校验提示文案

    提交
    哈哈哈,我也不忍看了,热熔胶固定完赶忙就把外壳扣上了。看着太糟心

    校验提示文案

    提交
    收起所有回复
  • 服,驱动都会写,电工电子也玩的转。

    校验提示文案

    提交
    没有写驱动,勉强算是固件吧,其实就是给51单片机写代码,而且github上有现成的

    校验提示文案

    提交
    收起所有回复
  • 请教下楼主,蓝牙4.0里有键盘吗?感觉K480比旧的微软蓝牙键盘省电而且反应敏捷,一直以为是因为链接方式有区别。

    校验提示文案

    提交
    filco最新的蓝牙键盘应该是4.0的

    校验提示文案

    提交
    蓝牙4.0应该是支持键盘的,因为4.0是底层的传输规范,键盘是上层应用,应该不会影响

    校验提示文案

    提交
    收起所有回复
  • 读一块钱~ 楼主年收入在70左右

    校验提示文案

    提交
    一块钱输定了 [呵呵]

    校验提示文案

    提交
    收起所有回复
  • 还是自己画块板子吧,看起来舒服点

    校验提示文案

    提交
    想画来着,但就一块板子,成本太高

    校验提示文案

    提交
    多的可以卖掉,比如卖给我。。。

    校验提示文案

    提交
    收起所有回复
  • 线飞得…我也懵逼了…

    校验提示文案

    提交
    光看照片,我现在也看不懂线是咋走的了 [皱眉]

    校验提示文案

    提交
    收起所有回复
  • 续航如何?其实找个罗技优联键盘拆出模块然后键盘上飞线改造是最终极做法,pcwaishe论坛很多案例。

    校验提示文案

    提交
    续航大概一个星期吧

    校验提示文案

    提交
    那就没折腾的必要了,还是研究一下移植优联模块靠谱些。

    校验提示文案

    提交
    收起所有回复
  • 太专业了,我就想问:我的蓝牙键盘怎么和台式机链接,台式机主版没蓝牙

    校验提示文案

    提交
    那就买个usb接口的蓝牙接收器,不过这样就和普通的2.4G无线键盘一样了

    校验提示文案

    提交
    去买个蓝牙模块就成了

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 撸主绝逼不是码农,绝逼电子工程的

    校验提示文案

    提交
    被拆穿了 [皱眉] 。学的是电子工程,工作了干的是码农的活儿

    校验提示文案

    提交
    [装大款] 码农是看着模电数电电路单片机就OO疼的!

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 果然是牛人,就是厉害。话说这个教程可以再详细点。

    校验提示文案

    提交
    写这篇文章主要是抛砖引玉,提供一个思路,毕竟每个人个人情况不同,写太详细了,会影响个人发挥 [高兴]

    校验提示文案

    提交
    你这个很多人搞不好啊。只能你自己玩。

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 撸主你好我在也在蓝牙模块可以请教下你么

    校验提示文案

    提交
    其实我也不是很懂,大家可以一起探讨一下 [高兴]

    校验提示文案

    提交
    收起所有回复
  • 楼主蓝牙模块接了四根线,除了电源和地线外,其余两根是与单片机连接的串口线吧。单片机扫描按键之后,通过串口将数据发送给蓝牙模块,蓝牙模块再对数据进行封装后发送出去,是不是这样呢?蓝牙模块这部分程序怎么处理,求指导。谢谢。

    校验提示文案

    提交
    原理是这样的。单片机和蓝牙模块通信是有专门的协议。在上电阶段初始化蓝牙模块。键扫之后写命令字给蓝牙模块。如果你用WT12的话,可以参考这个网页去看看

    校验提示文案

    提交
    收起所有回复
  • 有人看懂了吗 估计小编也懵逼了直接就过了

    校验提示文案

    提交
  • 看线和胶的乱象,和对不能完全扣盒键盘的忍耐,感觉不到程序员的严谨…

    校验提示文案

    提交
    程序员只是在开始设计的时候严谨好吧(∩_∩),真正写程序的时候,go to啥的多了去了,换人基本看不懂

    校验提示文案

    提交
    代码写得让别人看不懂的一定不是好程序员 [尴尬]

    校验提示文案

    提交
    收起所有回复
  • 有个挑夫彩票中奖得了一笔巨款

    终于有钱了,买点啥好呢?

    思来想去,找人做了一副金扁担

    校验提示文案

    提交
  • 有个挑夫彩票中奖得了一笔巨款

    终于有钱了,买点啥好呢?

    思来想去,找人做了一副金扁担

    校验提示文案

    提交
  • 看到这篇文章之前我一直认为自己是个电脑高手…… [皱眉]

    校验提示文案

    提交
  • [尴尬] 请问变成蓝牙后,有啥用?… 程序员赶紧抓时间去寻找爱情吧

    校验提示文案

    提交
  • 你这个是AVR去读的矩阵么 还是AVR做的USB host 然后读键盘USB的HID然后再转成蓝牙HID的 我现在想做一个USB HID转蓝牙HID的东西 这样 随便一个啥有线键盘插上都能用

    校验提示文案

    提交
    可以看看 博通的20730 当然现在应该叫安高华的20730 这货网上有卖好像不贵. sdk地址如下:去看看

    校验提示文案

    提交
    我也有这打算喵~

    校验提示文案

    提交
    收起所有回复
  • 楼主厉害啊!

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
230
扫一下,分享更方便,购买更轻松