最近在Qt下使用opencv库,进行一些图像识别和处理相关的工作,主要是通过摄像头采集运动采样视频,然后进行一些跑姿分析和稳定性测试。但仅仅从视频帧来分析,还是有很多缺陷,后来就想着,如果结合公司的智能鞋垫产品,获取跑步实时的脚上各个部位的压力数据可以对视频分析提供很大的数据补充。跟硬件组的小伙伴聊了聊,得知可以通过蓝牙通讯,配对后实时获取鞋垫压力数据。从小伙伴那里搞来一套鞋垫样品,并拿了一份通讯协议列表,就抓紧搞起了。
得益于Qt详尽的文档说明,对照Qt官方Bluetooth Low Enegy文档,再结合一下官网的例子,断断续续搞了一天,算是在我的客户端程序里看到鞋垫传过来的压力数据了。官网的文档流程讲得很清楚,这里自己还是给整个通讯的流程梳理一下。
- 搜寻附近全部的蓝牙设备
- 根据搜寻出的蓝牙设备信息,筛选出要连接的蓝牙设备进行连接
- 建立连接后,去获取该蓝牙设备等services列表,根据约定好的服务uuid筛选出自己需要的服务
- 发现对应的服务后,根据约定好的服务下characteristic特性id,创建特征对象,并监听特征对象内容的变化
- 向客户端特征配置对象写入特征生效消息,开始接收外围蓝牙设备。
蓝牙模块代码如下:
bluedevice.h
bluedevice.cpp
tips:
1.要使用qt蓝牙模块, 项目的 .pro要声明使用
2.有了lambda函数后,不用再一个个声明和创建具名槽函数的感觉挺好,就是代码成一坨了
3.虽然说是低功耗蓝牙,但还是要记得用完后断开和外设店连接,之前忘记断开,一晚上一个纽扣电池的点就被耗光了
4.GATT Profile 简介