0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个蓝牙实战项目USB蓝牙接收器的解析总结

Q4MP_gh_c472c21 来源:TopSemic嵌入式 wuyage 作者:TopSemic嵌入式 wu 2022-10-28 15:43 次阅读

前不久,一名在深圳的大学好友联系到我,他们公司需要做一个USB蓝牙接收器,功能大体如下:

USB蓝牙接收器插在电脑上使用,被识别为键盘;

手机程序连接该USB蓝牙接收器;

手机程序向电脑发送键盘输入指令。

整体来说,他这个需求多少有点非主流,看着像是蓝牙键盘,但物理上却是USB接口的HID设备,并不是BLE的HID,BLE在这里只是用来接收手机发送的数据。

起初我也没太认真想如何实现,就随手发到了交流群里,于是各路高手们纷纷提出了自己的方案:

群友“喵了个咪”的方案是:单片机vwin USB键盘+蓝牙串口透传,可以用CH551+KT6368A,KT6368A可以参考之前的文章《成本不足2元的蓝牙芯片,你能想得到吗?》。

群友“heibus”的方案是:串口转USB HID芯片+蓝牙串口透传,可以用CH9328+KT6368A。

群友“oxlm”、“Pengfei”的方案是:使用单颗蓝牙SOC,可以用Nordic的NRF52840、NXP的QN9080等,蓝牙芯片自带USB接口,一颗芯片搞定。

群友“baolei”的方案是:CH340+KT6368A,通过DeviceSimulation Framework在PC端写个上位机软件,将串口收到的数据转换成虚拟HID。

从原理上来说,以上4种方案都可以实现我这位同学的需求(说到我这个大学同学,请允许我临时跑个题,当年上学时,他住我宿舍正对面,是个不折不扣的单片机迷,最初玩51单片机,后来捣鼓AVR单片机,然后自学uCosII操作系统,后来不知道怎么又自学了Java,技术上特别爱专研。大学毕业后,我们就一南一北各自闯天涯了,他南下深圳直接工作了,从事安卓相关研发工作。这么多年一直在这个领域,在深圳也是纯凭个人能力攒钱买了房子。不得不感慨,干移动互联网的就是比干嵌入式的更容易搞钱)。

那他为什么要整这个USB蓝牙接收器呢?因为他们新开发的这款APP用在国外,而这个蓝牙接收器是用来控制彩票机的。大概意思就是,在手机点一点,实现在彩票机购买彩票的功能。

至于为什么不直接在彩票机上购买,他给我解释了所谓智能的概念,听的我一头懵.

神奇了,最近老和BLE打交道,前段时间才研究了那个超便宜的BLE芯片KT6368A,这又来了一个BLE的相关需求,索性就考虑用群友“heibus”提出的CH9328+KT6368A方案来实现看看。

不过,随着后来进一步的需求沟通,发现用CH9328+KT6368A还不行,原因是它手机端发送的指令并不是原封不动的透传过去就行了,实际上需要做转换,比如说手机端发送十进制1,对应到USB HID 的是两组8字节的16进制数据:00 00 08 00 00 00 00 00和00 00 00 00 00 00 00 00,这样单纯靠硬件就完成不了了,需要涉及到软件开发。

关于00 00 08 00 00 00 00 00和00 00 00 00 00 00 00 00这两组数据的含义,那就得简单补习点USB HID的基础知识了。

键盘发送给PC的数据每次是8个字节:

BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8

定义分别是:

BYTE1 :特殊按键,具体各位含义如下:

|--bit0: Left Control是否按下,按下为1 |--bit1: Left Shift 是否按下,按下为1|--bit2: Left Alt 是否按下,按下为1 |--bit3: Left GUI 是否按下,按下为1 |--bit4: Right Control是否按下,按下为1 |--bit5: Right Shift 是否按下,按下为1|--bit6: Right Alt 是否按下,按下为1 |--bit7: Right GUI 是否按下,按下为1

BYTE2:保留

BYTE3-BYTE8 :这六个为普通按键,键值可以参考USB HID to PS/2 ScanCode Translation Table。

举个例子,比如按键a对应的一帧数据是:00 00 0x04 0x00 00 00 00 00,第3字节04就是由下面这个表定义的:

fbfa9f1c-47bc-11ed-a3b6-dac502259ad0.png

这么说还是有点抽象,得来点更直观的,电脑端我们可以用Bushound等USB分析软件,我这里用的是Free USB Analyzer :

我用的是笔记本电脑,先外接一个USB键盘

在软件左侧找到USB键盘对应的设备,开始监控,这里只选择Raw Data View

fc29c4c2-47bc-11ed-a3b6-dac502259ad0.png

按一下按键a并松开,这时软件界面就会显示收到了一串数据,它其实是对应了两组8字节数据,可以看到a确实对应04,另外00 00 00 00 00 00 00 00表示的是按键弹起

fcde8e98-47bc-11ed-a3b6-dac502259ad0.png

如果一直按住a不松手,那么显示的就会是如下信息

fcf93522-47bc-11ed-a3b6-dac502259ad0.png

只有当你弹起按键a时才会显示00 00 00 00 00 00 00 00

如果你要同时按下SHIFT+a组合按键再同时松开,那么对应的数据就如下:

fd0e9e9e-47bc-11ed-a3b6-dac502259ad0.png

第一个字节就表示左侧的Shift键。

当然,如果是你先按下Shift键,再按下a键,再松开a键,最后松开Shift键,那么就对应4组数据,其分别为:

fd293ec0-47bc-11ed-a3b6-dac502259ad0.png

为了搞清楚这个,我就花了好久的时间,毕竟以前也没有怎么实际用过USB。再次回到他的蓝牙接收器需求,手机端输入的范围是数字1-83,有的数字是对应2个8字节数据,表示的是一个按键的按下和松开,有的数字是对应4个字节,表示的是Shift+按键的组合按下与松开,并且每8个字节数据之间的时间间隔是200ms。

既然KT6368A不行,那就换一个可以编程的蓝牙模块,比如TI的CC2541模块、Nordic NRF51822模块都可以,因为我原来支持过NXP的QN9021芯片,对它相对熟一点,所以就用QN9021来实现了。

用QN9021来实现上述软件功能(蓝牙接收手机发送过来的一串数据,然后转码输出)我本来以为分分钟就搞定了,结果实际调试起来并不是想象的那么简单。因为常规的蓝牙透传使用方式是串口接收数据然后蓝牙发送,这个需求正好是一个反向的操作。其中涉及到几个关键的问题:

手机端发送过来的是一串长度可能长、可能短的数据。因为QN9021是BLE 4.0芯片,一次发送字节最多是20个字节,所以要考虑超过20字节的情况。

蓝牙芯片一边蓝牙接收数据,一边串口发送数据,要考虑串口没有发送完,蓝牙又来数据的的情况。

手机发送的不同键值,程序里要实现转码(有的是对应发送2个8字节数据,有的是对应4个8字节数据,每个8字节数据中间都是200ms)的代码实现问题。

有经验的程序高手可能不觉得是什么问题,但对我这样好久没实际写代码的人,还是折腾了不少时间.

上述问题1可以通过手机端分包来解决;

问题2的解决办法是加一个队列,把蓝牙接收的数据放到队列里缓存起来,另外一个地方从队列取数串口发送。队列如何用C语言实现,让我直接写我肯定写不出来,我用了github上的一个开源代码:https://github.com/kuaileguyue/Ring-Buffer

问题3我是在200ms定时器函数里做了一个小状态机来解决的,状态机通过switch/case和标志位就可以实现。

最后,我们再来总结一下这几种方案:

方案 特点 价格(元器件)
CH551+KT6368A CH551可编程,蓝牙只透传不编程 几元钱
CH9328+BLE (NRF51822/CC2541/QN9021等) BLE 可编程,CH9328硬件实现串口转USB HID 数十元
单BLE(NRF52840/QN9080等) SOC可编程 数十元
CH340+KT6368A 硬件不编程,PC上编程 几元钱

从硬件角度来看,这几种方案都具备BLE和USB功能,只不过软件部分跑的地方不同,最终都可以实现所需要的功能。

至于在实际项目或产品中,到底选取哪一种方案,实际上是需要综合考虑多方面的因素的,比如开发周期、成本、软件开发难易,甚至芯片是否好买等。

下一步我会再研究第一个方案的实现,即CH551+KT6368A,后面大概率会用这个方案,原因大家应该都明白。

作者:wuyage来源:TopSemic嵌入式 在此特别鸣谢

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接收器
    +关注

    关注

    14

    文章

    2416

    浏览量

    71415
  • usb
    usb
    +关注

    关注

    60

    文章

    7737

    浏览量

    261870
  • 蓝牙
    +关注

    关注

    114

    文章

    5638

    浏览量

    167657
  • Switch
    +关注

    关注

    1

    文章

    532

    浏览量

    57860
  • HID
    HID
    +关注

    关注

    2

    文章

    124

    浏览量

    46409

原文标题:一个蓝牙实战项目的掏肺总结

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于蓝牙的便携式GPS接收器模块电路设计

    GPS 蓝牙 接收器种便携式、电池供电的手持设备,采用 蓝牙接口,通过无线技术将GPS 信号提供给具有 蓝牙接口的显示装置,能够为用户提供定位和
    发表于09-29 11:45 5949次阅读
    基于<b class='flag-5'>蓝牙</b>的便携式GPS<b class='flag-5'>接收器</b>模块电路设计

    基于BTM334的蓝牙接收器设计

    蓝牙模块采用的芯片是高通(Qualcomm)的QCC3034,支持普通的SBC,AAC编码,还支持高通自家的aptX,aptX-HD,aptX-LL编码,保证了 蓝牙音频的品质;亦可以通过 USB连接电脑作为
    的头像 发表于02-02 10:08 2916次阅读
    基于BTM334的<b class='flag-5'>蓝牙</b><b class='flag-5'>接收器</b>设计

    #硬声创作季 直插式蓝牙接收器

    蓝牙
    jf_27932003
    发布于 :2023年01月10日 20:48:11

    蓝牙基础应用

    在下有 问题,向各位大咖请教!问题描述如下:我准备做 一个关于 蓝牙的应用,设计 蓝牙
    发表于06-09 23:32

    自制有线音响蓝牙无线接收器

    做了 蓝牙 接收器,全是废物利用, 蓝牙模块是以前DIY用过的,按键鼠标锂电池是废旧POS机拆下来的,3.5音频接口电脑主板拆的电源管理手机拆
    发表于03-04 21:39

    设计用于DollaTek蓝牙接收器的AS1711BT

    描述适用于 ReVox B760 和 B780 的 蓝牙适配器插入 Revox B780 或 B760 的 DolbyNR 插槽。设计用于 DollaTek 蓝牙 接收器AS1711BT。它也可能适用于类似的模块。要启用它,请打开
    发表于08-05 06:51

    蓝牙耳机的接收器敏感度

    蓝牙耳机的 接收器敏感度 在保证达到所要求的误比特率的条件下, 接收所需要的最小输入功率。 接收灵敏度 般用dBm来表示,它是以lm
    发表于12-31 13:27 1241次阅读

    小米蓝牙音频99元接收器发布 有线秒变无线

    这次发布的 蓝牙音频 接收器就是 款将有线设备变为无线的 蓝牙设备,支持 蓝牙4.2技术,最高传输距离为10米。
    发表于07-07 14:36 1258次阅读

    逻辑分析仪在USB蓝牙接收器上的实际应用分析

    孕龙逻辑分析仪在数字讯号中提供了多种串行总线译码模块,本篇文章将针对 USB 蓝牙 接收器(Blue tooth dongle )进行讯号实际测量。 USB测量治具 首先,先把逻辑分析仪的测
    发表于10-20 11:33 0次下载

    简单自制蓝牙接收器

    本文主要介绍了 种简单自制 蓝牙 接收器蓝牙 接收器是指能接受传输方式为 蓝牙
    发表于01-12 14:57 5.3w次阅读

    小米蓝牙接收器评测 同价位无敌手

    近日,小米科技发布了 款名为“小米 蓝牙音频 接收器”的智能设备,采用 蓝牙4.2高速传输标准,机身只有
    的头像 发表于08-29 08:54 6.9w次阅读

    魅族蓝牙音频接收器体验 有线耳机秒变蓝牙耳机

    在前不久,魅族官方商城上线了 款售价仅需0.5元的神秘新品,虽然不知道具体是什么产品,但还是有近千名网友购买。这之后这款新品也得到了曝光,它就是魅族 蓝牙音频 接收器,售价为89元。提前购买的网友也直呼真香。
    的头像 发表于05-29 10:16 5463次阅读

    如何使用廉价的破损蓝牙耳机制作蓝牙接收器

    我现在有了 完全由重新设计而成的 蓝牙适配器否则会丢掉的耳机零件。您可能会说我为此 项目花费了$ 0,因为我已经拥有的 切东西,否则将成为垃圾
    的头像 发表于11-11 11:19 1.8w次阅读

    文弄懂工厂蓝牙定位技术的原理、应用场景及优势

    工厂 蓝牙定位是 种基于 蓝牙信号的室内定位技术,通过在工厂内部布置 蓝牙信标设备和 接收器,实现对物品、设备和人员的实时定位和追踪。这些
    的头像 发表于05-23 16:53 1130次阅读
    <b class='flag-5'>一</b>文弄懂工厂<b class='flag-5'>蓝牙</b>定位技术的原理、应用场景及优势

    蓝牙适配器、蓝牙接收器蓝牙发射傻傻分不清?

    蓝牙 接收器种设备,通常用于将非 蓝牙设备转换为 蓝牙设备。 蓝牙
    发表于02-02 10:23 5080次阅读
    <b class='flag-5'>蓝牙</b>适配器、<b class='flag-5'>蓝牙</b><b class='flag-5'>接收器</b>和<b class='flag-5'>蓝牙</b>发射<b class='flag-5'>器</b>傻傻分不清?