zoukankan      html  css  js  c++  java
  • 蓝牙分包写入

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

    我开始各种搜罗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

  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/houxianzhou/p/13723180.html
Copyright © 2011-2022 走看看