• 蓝牙分包写入


    前段时间收到一个蓝牙设备,需求是控制板子上面的电机,这对于从未接触过硬件的小白来说无疑是一个挑战,然而我是一个喜欢挑战的蓝人,于是开始了我的研究。

    我开始各种搜罗Demo,查看文档及各大论坛。

    终于,黄天不负苦心人,我成功的连接上了设备,并且获取到了他的服务及特征值,当然,每台外设可用的服务及特征值都是不一样的,而且有些是不可用的,什么 read、write、notify、indicate 要根据自己的操作需求去看哪个特征值支持。每个服务下面都有不同的特征值,每个特征值下面又分出来几个不同的特征值列表,接下来就是根据自己需求筛选了。

    支持列表:
    read:读取低功耗蓝牙设备的特征值的二进制数据值
    write:向低功耗蓝牙设备特征值中写入二进制数据
    notify || indicate:启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值

    这些都选好后该开始向蓝牙设备写入指令,让他动起来了(想想就有些小激动)

    不过根据官方提供的方式转换指令并写入的时候,意外发生了!
    我在回调里面打印成功与否的时候,显示成功,但是设备却没人任何反应,于是我又开始找原因(设备通过某个App试过,写入指令后是正常的),又开始了我的搜寻之旅。

    之后发现原因是因为我使用的指令转换后超过了20字节,在Api文档中
    https://developers.weixin.qq.com/miniprogram/dev/api/wx.writeBLECharacteristicValue.html
    标注了建议每次写入不超过20字节,但是也不是强制性的呀,导致我很懵逼,明明返回的是成功。

    事到如今,只能接着寻找解决方法了,总不能跟他这么耗着呀。接着我的搜寻之旅吧!(废话那么多,重点该来了)

    终于,找到种分包的方式,把超过20字节的指令分批发送(当然,没有超过20字节的话,也不影响使用),这边需要注意一下,不能直接连发,需要有一个延迟,然后~完美写入指令,我的小电机动起来了。

    整体的流程如下:
    打开蓝牙模块 => 搜索蓝牙 => 获取所有已发现的设备 => 连接蓝牙设备 => 获取蓝牙设备的所有服务 => 获取蓝牙设备服务下的所有特征值 => 向蓝牙设备写入指令 => 完成 =>关闭蓝牙模块

    行了,不哔哔了。我结合官方提供的Demo修改了一下,添加了一个分包写入,已经打包成代码片段,可以直接使用。

    代码片段中服务和特征值这两个地方我写成了固定的,根据自己的需求可以修改下。

    核心代码:
    延时定时器
    格式转换
    判断并分包写入

    代码片段:
    https://developers.weixin.qq.com/s/oFJc70mI7o8K

    如有不对的地方或者更好的解决方案,还望大佬们及时提出,希望对你们有所帮助。

    本文来自博客园,作者:喆星高照,转载请注明原文链接:https://www.cnblogs.com/houxianzhou/p/13723180.html

  • 相关阅读:
    2016——3——16 kmp 7题
    bzoj3942——2016——3——15
    bzoj1355——2016——3——15
    poj 3641 ——2016——3——15
    KMP之我见
    转自他人——————TLE之前,没有一个节点叫失败!!!
    省选必知
    bzoj1449————2016——3——14
    bzoj1070————2016——3——14
    bzoj1562[NOI2009]变换序列——2016——3——12
  • 原文地址:https://www.cnblogs.com/houxianzhou/p/13723180.html
Copyright © 2020-2023  润新知