微信小程序ble卡住在获取服务

微信小程序ble卡住在获取服务,第1张

卡住在获取服务的问题有以下原因。

1、设备连接问题:首先需要确保设备已经连接成功,如果连接不成功则可能会导致获取服务失败。可以通过微信开发者工具的调试功能查看连接状态,或者尝试重新连接设备。

2、蓝牙信号弱:如果蓝牙信号过弱,可能会导致设备连接不稳定或者获取服务失败。可以尝试将设备与手机靠近一些,或者在空旷的地方进行连接和测试。

3、设备服务问题:如果设备本身服务存在问题,也会导致获取服务失败。可以检查设备服务是否正常,或者尝试使用其他设备进行测试。

4、微信版本问题:如果微信版本过低或者过高,也可能会导致BLE功能出现问题。可以尝试更新微信版本或者降低版本进行测试。

直接采集数据的蓝牙模式是BLE(Bluetooth Low Energy)模式。BLE是一种低功耗的蓝牙技术,它可以在消耗极低的电量下传输数据,并支持多种传输速率和连接方式。在BLE模式下,设备可以通过广播数据或建立连接来传输数据,这种模式适用于需要长时间运行,并且需要消耗较少电量的设备,例如智能手表、健康追踪器等。同时,BLE还具有更高的安全性,因为它支持128位和256位的加密算法,可以有效保护用户隐私和数据安全。

蓝牙串口实质上就是把可见的 传统串口连接线 变成了 不可见得 无线 传输(蓝牙)。

举例:如果要使用单片机采集数据,通过蓝牙串口 发回 电脑端实时处理

单片机 串口 TX 接蓝牙串口模块的RX, 单片机 RX 接到 蓝牙串口模块的TX

电脑端搜索蓝牙串口模块,配对(默认密码一般为 1234,请参照模块说明)

配对连接成功后会在设备管理器串口设备里面新生成蓝牙串口(如Bluetooth设备 链接上的标准串行(com17) - 请记住这一端口号

单片机通电运行,串口数据发送给蓝牙串口模块

电脑端通过上位机,或者串口助手等软件,打开com17

这时候单片机发送的串口数据,就都可以实时在电脑端收到了

注意事项:蓝牙串口模块的串口通讯波特率需要设置成跟单片机通讯波特率一致,否则会产生乱码!

万物互联的物联网时代的已经来临,ble蓝牙开发在其中扮演着举重若轻的角色。最近刚好闲一点,抽时间梳理下这块的知识点。

涉及ble蓝牙通讯的客户端(开启、扫描、连接、发送和接收数据、分包解包)和服务端(初始化广播数据、开始广播、配置Services、Server回调 *** 作)整个环节以及一些常见的问题即踩过的一些坑。

比如

1、在Android不同版本或不同手机的适配问题,扫描不到蓝牙设备

2、如何避免ble蓝牙连接出现133错误?

3、单次写的数据大小有20字节限制,如何发送长数据

蓝牙有传统(经典)蓝牙和低功耗蓝牙BLE(Bluetooth Low Energy)之分,两者的开发的API不一样,本文主讲Ble蓝牙开发,传统蓝牙不展开,有需要的可以自行了解。

相对传统蓝牙,BLE低功耗蓝牙,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输。

客户端

服务端

Android43(API Level 18)开始引入BLE的核心功能并提供了相应的 API。应用程序通过这些 API 扫描蓝牙设备、查询 services、读写设备的 characteristics(属性特征)等 *** 作。

BLE蓝牙协议是GATT协议, BLE相关类不多, 全都位于androidbluetooth包和androidbluetoothle包的几个类:

androidbluetooth

BluetoothGattService 包含多个Characteristic(属性特征值), 含有唯一的UUID作为标识

BluetoothGattCharacteristic 包含单个值和多个Descriptor, 含有唯一的UUID作为标识

BluetoothGattDescriptor 对Characteristic进行描述, 含有唯一的UUID作为标识

BluetoothGatt 客户端相关

BluetoothGattCallback 客户端连接回调

BluetoothGattServer 服务端相关

BluetoothGattServerCallback 服务端连接回调

androidbluetoothle

AdvertiseCallback 服务端的广播回调

AdvertiseData 服务端的广播数据

AdvertiseSettings 服务端的广播设置

BluetoothLeAdvertiser 服务端的广播

BluetoothLeScanner 客户端扫描相关(Android50新增)

ScanCallback 客户端扫描回调

ScanFilter 客户端扫描过滤

ScanRecord 客户端扫描结果的广播数据

ScanResult 客户端扫描结果

ScanSettings 客户端扫描设置

BLE设备分为两种设备: 客户端(也叫主机/中心设备/Central), 服务端(也叫从机/外围设备/peripheral)

客户端的核心类是 BluetoothGatt

服务端的核心类是 BluetoothGattServer 和 BluetoothLeAdvertiser

BLE数据的核心类是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor

下面详细讲解下客户端和服务端的开发步骤流程

安卓手机涉及蓝牙权限问题,蓝牙开发需要在AndroidManifestxml文件中添加权限声明:

在搜索设备之前需要询问打开手机蓝牙:

注意: BLE设备地址是动态变化(每隔一段时间都会变化),而经典蓝牙设备是出厂就固定不变了!

通过扫描BLE设备,根据设备名称区分出目标设备targetDevice,下一步实现与目标设备的连接,在连接设备之前要停止搜索蓝牙;停止搜索一般需要一定的时间来完成,最好调用停止搜索函数之后加以100ms的延时,保证系统能够完全停止搜索蓝牙设备。停止搜索之后启动连接过程;

BLE蓝牙的连接方法相对简单只需调用connectGatt方法;

参数说明

与设备建立连接之后与设备通信,整个通信过程都是在BluetoothGattCallback的异步回调函数中完成;

BluetoothGattCallback中主要回调函数如下:

上述几个回调函数是BLE开发中不可缺少的;

当调用targetdDeviceconnectGatt(context, false, gattCallback)后系统会主动发起与BLE蓝牙设备的连接,若成功连接到设备将回调onConnectionStateChange方法,其处理过程如下:

判断newState == BluetoothGattSTATE_CONNECTED表明此时已经成功连接到设备;

mBluetoothGattdiscoverServices();

扫描BLE设备服务是安卓系统中关于BLE蓝牙开发的重要一步,一般在设备连接成功后调用,扫描到设备服务后回调onServicesDiscovered()函数,函数原型如下:

BLE蓝牙开发主要有负责通信的BluetoothGattService完成的。当且称为通信服务。通信服务通过硬件工程师提供的UUID获取。获取方式如下:

具体 *** 作方式如下:

开启监听,即建立与设备的通信的首发数据通道,BLE开发中只有当客户端成功开启监听后才能与服务端收发数据。开启监听的方式如下:

BLE单次写的数据量大小是有限制的, 通常是20字节 ,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。

监听成功后通过向 writeCharacteristic写入数据实现与服务端的通信。写入方式如下:

其中:value一般为Hex格式指令,其内容由设备通信的蓝牙通信协议规定;

若写入指令成功则回调BluetoothGattCallback中的onCharacteristicWrite()方法,说明将数据已经发送给下位机;

若发送的数据符合通信协议,则服务端会向客户端回复相应的数据。发送的数据通过回调onCharacteristicChanged()方法获取,其处理方式如下:

通过向服务端发送指令获取服务端的回复数据,即可完成与设备的通信过程;

当与设备完成通信之后之后一定要断开与设备的连接。调用以下方法断开与设备的连接:

源码上传在CSDN上了,有需要的可以借鉴。

=====> Android蓝牙Ble通讯Demo示例源码–扫描,连接,发送和接收数据,分包解包

BLE单次写的数据量大小是有限制的,通常是20字节,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。

总体流程如下:

1、定义通讯协议,如下(这里只是个举例,可以根据项目需求扩展)

2、封装通用发送数据接口(拆包)

该接口根据会发送数据内容按最大字节数拆分(一般20字节)放入队列,拆分完后,依次从队列里取出发送

3、封装通用接收数据接口(组包)

该接口根据从接收的数据按协议里的定义解析数据长度判读是否完整包,不是的话把每条消息累加起来

4、解析完整的数据包,进行业务逻辑处理

5、协议还可以引入加密解密,需要注意的选算法参数的时候,加密后的长度最好跟原数据长度一致,这样不会影响拆包组包

一般都是Android版本适配以及不同ROM机型(小米/红米、华为/荣耀等)(EMUI、MIUI、ColorOS等)的权限问题

蓝牙开发中有很多问题,要静下心分析问题,肯定可以解决的,一起加油;

没接触过低功耗蓝牙协议,也没实际开发过和低功耗蓝牙有关的东西,最近需要获取一款低功耗蓝牙产品的数据,听说有专门的低功耗蓝牙抓包工具和软件可供使用,刚好手里也有硬件(USB蓝牙适配器),就硬着头皮,准备尝试一下,因为还在尝试阶段,很多知识点还不甚明了,所以我会随时更改此文里面的内容。

可用于第三方蓝牙设备交互,必须要支持蓝牙 40。

iOS上:硬件至少是 iphone4s,系统至少是 iOS6。

android上:系统版本至少是 android43。

蓝牙 40 以低功耗著称,一般也叫 BLE(BluetoothLowEnergy)。目前应用比较多的案例:运动手坏、嵌入式设备、智能家居

在蓝牙通讯中有两个主要的部分,Central 和 Peripheral,有一点类似Client Server。Peripheral 作为周边设备是服务器。Central 作为中心设备是客户端。所有可用的蓝牙设备可以作为周边(Peripheral)也可以作为中央(Central),但不可以同时既是周边也是中央。

一般手机是客户端, 设备(比如手环)是服务器,因为是手机去连接手环这个服务器。周边(Peripheral)是生成或者保存了数据的设备,中央(Central)是使用这些数据的设备。你可以认为周边是一个广播数据的设备,他广播到外部世界说他这儿有数据,并且也说明了能提供的服务。另一边,中央开始扫描附近有没有服务,如果中央发现了想要的服务,然后中央就会请求连接周边,一旦连接建立成功,两个设备之间就开始交换传输数据了。

除了中央和周边,我们还要考虑他俩交换的数据结构。这些数据在服务中被结构化,每个服务由不同的特征(Characteristics)组成,特征是包含一个单一逻辑值的属性类型。

上文中提到了特征(Characteristics),这里简单说明下什么是特征。

特征是与外界交互的最小单位。蓝牙40设备通过服务(Service)、特征(Characteristics)和描述符(Descriptor)来形容自己,同一台设备可能包含一个或多个服务,每个服务下面又包含若干个特征,每个特征下面有包含若干个描述符(Descriptor)。比如某台蓝牙40设备,用特征A来描述设备信息、用特征B和描述符b来收发数据等。而每个服务、特征和描述符都是用 UUID 来区分和标识的。

source ==> 字符串

count ==> 切割的位数

转换接收的ios数据

初始化蓝牙40管理器 => initManager

搜索蓝牙40设备,模块内部会不断的扫描更新附近的蓝牙40设备信息 => scan

注: 参数(params):single 类型:布尔 true 为单例模式,false为非单例模式;默认为false; 描述:(可选项)则扫描附近的所有支持蓝牙40的设备类型:parmas:布尔 true 为单例模式,false为非单例模式;默认为false; 非单例模式为仅在本页面生效连接,单例模式为在连接成功后整个app全局生效

获取当前扫描到的所有外围设备信息 => getPeripheral

连接指定外围设备。iOS端无超时判断,android端默认有30秒超时判断 => connect

根据指定的外围设备 UUID 获取该外围设备的所有服务 => discoverService

根据指定的外围设备 UUID 及其服务 UUID 获取该外围设备的所有特征(Characteristic)=> discoverCharacteristics

根据指定的外围设备 UUID 及其服务 UUID 和特征 UUID 监听数据回发 =>setNotify

根据指定的外围设备 UUID 及其服务 UUID 和特征 UUID 写数据 => writeValueForCharacteristic

剩余方法根据需求酌情使用

此次开发需求 传递字节以及ASCII码,apicloud中ble模块仅仅满足于传递字节,并且初始低功耗蓝牙仅仅满足于传递20字节以下数据,需设置MTU进行大数据传输,此次流控为蓝牙的特征FF03监听来进行数据流控, 蓝牙模块使用百瑞互联,如需定制开发模块或SDK可联系!

以上就是关于微信小程序ble卡住在获取服务全部的内容,包括:微信小程序ble卡住在获取服务、直接采集数据的蓝牙模式是、蓝牙设备 串口通讯 怎么获取实时数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9486178.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存