小程序蓝牙BLE——自动连接设备(手环)
了解小程序蓝牙API:
/**
*蓝牙API:
* 1.初始化蓝牙(判断蓝牙是否可用);openBluetoothAdapter
* 2.获取蓝牙设备状态(蓝牙是否打开);getBluetoothAdapterState
* 3.监控蓝牙打开/关闭的动作;onBluetoothAdapterStateChange
* 4.开始搜索周围是否有设备;startBluetoothDevicesDiscovery
* 5.获取周围设备列表;getBluetoothDevices
* 6.停止搜索周围设备,减少消耗资源;stopBluetoothDevicesDiscovery
* 7.过滤目标设备;
* 8.是否已经连接蓝牙设备:
* a.获取已经连接的蓝牙设备;getConnectedBluetoothDevices
* b.创建新的低功耗蓝牙设备连接deviceId;createBLEConnection
* 9.获取设备的信息
* a.获取蓝牙设备的服务码;getBLEDeviceServices
* b.获取蓝牙设备的特征值;getBLEDeviceCharacteristics
* c.获取蓝牙设备的write和notify服务;readBLECharacteristicValue
* 10.向蓝牙设备写入指令;writeBLECharacteristicValue
* 11.只有,开启蓝牙设备的notify提醒功能;notifyBLECharacteristicValueChange
* 12.才能,监听接受蓝牙设备返回的数据;onBLECharacteristicValueChange
* 13.断开低功耗的蓝牙连接;closeBLEConnection
* 14.关闭蓝牙,释放资源:closeBluetoothAdapter
*
* */
编程逻辑步骤:
/**
* 第一部分:蓝牙设配器
* 1.微信小程序:是否支持
* 2.手机蓝牙:是否可用;
* 3.手机蓝牙:是否开启
* 4.监听开启手机蓝牙状态的事件
*
*/ /**
* 第二部分:开启搜索、过滤、连接、关闭搜索
* 1.搜索设备;
* 2.获取设备列表;
* 3.连接设备,成功后关闭实时搜索;
*
* */ /**
* 第三部分:服务值、特征、write和notify服务
* 1.获取服务值;
* 2.特征;
* 3.write和notify服务
*
* */ /**
* 第四部分:向蓝牙写入指令、监控接受数据
* 1.写入指令;
* 对应命令转为16进制的形式
* START = [83, 84, 65, 82, 84]+时间戳
* STOP = [83, 84, 79, 80]
* REQDATA = [82, 69, 81, 68, 65, 84, 65]
* AUTO_ACC= [ ...]
* 2.监控接收数据;
*
* */ /**
* 第五部分:断开连接
* 1.断开蓝牙;
* 2.清楚缓存
* */
断开后、自动连接(半成熟):
wx.onBluetoothAdapterStateChange();//监听蓝牙适配器状态变化事件,判断连接状态;
wx.getConnectedBluetoothDevices();//是否有已连接设备,否根据安卓deviceId||苹果uuid唯一识别符重新: wx.getBLEDeviceServices()-->....-->wx.createBLEConnection() 重新自动连接;
附录:蓝牙设备的硬件的知识点:
硬件字节:
ArrayBuffer:类型化数组,JavaScript操作二进制数据的一个接口。 WebGL,指浏览器与显卡之间的通信接口,为了满足JavaScript与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文本格式。 比如,以文本格式传递一个32位整数,两端的JavaScript脚本与显卡都要进行格式转化,将非常耗时。这时要是存在一种机制,可以像C语言那样,直接操作字节,然后将4个字节的32位整数,以二进制形式原封不动地送入显卡,脚本的性能就会大幅提升。 类型化数组(Typed Array)就是在这种背景下诞生的。它很像C语言的数组,允许开发者以数组下标的形式,直接操作内存。有了类型化数组以后,JavaScript的二进制数据处理功能增强了很多,接口之间完全可以用二进制数据通信。
ArrayBuffer作为内存区域,可以存放多种类型的数据。不同数据有不同的存储方式,这就叫做“视图”。目前,JavaScript提供以下类型的视图:
Int8Array:8位有符号整数,长度1个字节。
Uint8Array:8位无符号整数,长度1个字节。
Int16Array:16位有符号整数,长度2个字节。
Uint16Array:16位无符号整数,长度2个字节。
Int32Array:32位有符号整数,长度4个字节。
Uint32Array:32位无符号整数,长度4个字节。
Float32Array:32位浮点数,长度4个字节。
Float64Array:64位浮点数,长度8个字节。
parseInt(s, 16)//十六进制字符串转字节数组
str.toString(16)//字节数组转十六进制字符串
float:浮点数
unsigned:无符号
int :向下取整
char:字符
客户端要产生一个唯一的标识符:deviceId、MAC地址、AndroidId:
AndroidId:
获取AndroidId是不需要权限的但是AndroidId是可能变的,AndroidId是在用户第一次激活这个设备时产生的所以当用户重置手机时AndroidId会产生变化,理论上这个AndroidId是可以接受的毕竟重置手机这个事发生也不会太频繁;
MAC地址:
可以使用WIFI的MAC地址来作为标识符,感觉现阶段这种方式比较可靠总结如下:Mac地址是唯一的,直接产生在硬件上基本上不会变更;
DeviceId:
区别设备唯一设备ID。
其他:
1、profile
profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。蓝牙设备可以包括多个Profile,一个Profile中有多个Service,
2、service服务
service可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据;一个Service中有多个Characteristic,
3、characteristic特征
characteristic特征值,例如:read、notify、write等特征…;ble主从机的通信均是通过characteristic的read、write来实现,可以 理解为一个标签,通过这个标签可以获取或者写入想要的内容。
4、UUID
UUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识
每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile,还是标准的防丢器profile,他们都是由一些列service组成,然后每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。
实际产品中,每个蓝牙4.0的设备都是通过服务和特征来展示自己的,服务和特征都是用UUID来唯一标识的。一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征。特征是与外界交互的最小单位。蓝牙设备硬件厂商通常都会提供他们的设备里面各个服务(service)和特征(characteristics)的功能,比如哪些是用来交互(读写),哪些可获取模块信息(只读)等。比如说,一台蓝牙4.0设备,用特征A来描述自己的出厂信息,用特征B来与收发数据等。
参考:
小程序蓝牙BLE——自动连接设备(手环)的更多相关文章
- 微信小程序蓝牙模块
蓝牙部分知识 关于Service: 每个设备包含有多个Service,每个Service对应一个uuid 关于Characteristic 每个Service包含多个Characteristic,每个 ...
- 微信小程序-蓝牙连接
最近的项目需要使用小程序的蓝牙功能与硬件设备进行连接相互传送数据指令,联调过程中发现一些问题,于是想着记录下来,方便以后查看! 1.0一般使用蓝牙功能肯定是想连接某一个蓝牙设备,所以需要知道这个蓝牙设 ...
- 微信小程序蓝牙开发
微信小程序蓝牙控制方案: 蓝牙模块如何快速改名并绑定用户手机?这样即使多台蓝牙设备在同一个地方使用也可以互不干扰,燧星科技给出解决方案. 长按控制板5秒进入待绑定下状态,点击"添加蓝牙设备& ...
- 微信小程序 图片路径自动加上文件目录导致渲染报错问题
最近 在做小程序时候,发现一些商品图片在渲染时一直报错,也不显示,但是控制台打印出来 的路径却有没有问题 报错提示出错的路径会在前面自动加上“page/**”,思索了之后想到了微信只能解释https的 ...
- 微信小程序弹框提示绑定手环实例
今天想聊一聊小程序里面存在的一些逻辑问题,拿手上的这个小程序来说,(这个小程序是开发出来玩的,每个人手上有一个手环,带着手环时候的心率,运动步数,血压数据都会展现在这个小程序里面,一目了然)用户第一次 ...
- 微信小程序token失效 自动请求后端,适用于自动登录
app.js // app.js App({ onLaunch() { let token = wx.getStorageSync('token') if (!token) { wx.login({ ...
- 微信小程序蓝牙连接小票打印机
1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAda ...
- 记录使用微信小程序的NFC和蓝牙功能读取15693芯片的开发历程
开发目标: (1) 对于Android手机,直接通过微信小程序调用手机的NFC功能,对15693协议的芯片进行读写操作: (2)对于苹果手机(及没有NFC模块的手机),通过微信小程序的蓝牙功能连接到蓝 ...
- 微信小程序开发-蓝牙功能开发
0. 前言 这两天刚好了解了一下微信小程序的蓝牙功能.主要用于配网功能.发现微信的小程序蓝牙API已经封装的很好了.编程起来很方便.什么蓝牙知识都不懂的情况下,不到两天就晚上数据的收发了,剩下的就是数 ...
随机推荐
- spring boot(四) 多数据源
前言 前一篇中我们使用spring boot+mybatis创建了单一数据源,其中单一数据源不需要我们自己手动创建,spring boot自动配置在程序启动时会替我们创建好数据源. 准备工作 appl ...
- Aooms_微服务基础开发平台实战_003_配置文件与简单的web环境搭建
一.前言 本篇文章介绍两个重点 (1) 工程核心配置文件application.yml (2) 如何在一个标准的的SpringCloud工程上构建起一个基本的web结构 二.配置文件applicati ...
- 第49章 令牌端点(Token Endpoint) - Identity Server 4 中文文档(v1.0.0)
令牌端点可用于以编程方式请求令牌.它支持password,authorization_code,client_credentials,refresh_token和urn:ietf:params:oau ...
- .NET: 使用.NET Core CLI开发应用程序
要开发.NET Core应用程序,除了使用强大的Visual Studio之外,还可以使用.NET Core CLI..NET Core CLI (Command-Line Interface),也就 ...
- audio currentTime 时间戳转换(es6语法)
function format(interval){ if (!value) return '' let interval = Math.floor(value) let minute = (Math ...
- 通过Arcpy在ArcMap工具箱中添加脚本计算面图层的起终点坐标
关键词: Arcpy,ArcMap Toolbox, Coordinates of Polygon 需求分析: Arcmap中添加有三个图层:图层“GY乡级河道”(面图层)是全县13个乡镇全部的乡级河 ...
- Jmeter设置代理,抓包之app请求
步骤: 1. Jmeter选择测试计划,添加线程组,添加http请求,添加监听器-察看结果树 2. 添加http代理服务器,右键添加非测试元件-添加http代理服务器 3. 端口改为8889,目标控制 ...
- 挖一挖MongoDB的备份与还原(实现指定时间点还原和增量备份还原)
一 研究背景需求 目前作者所在公司的MongoDB数据库是每天凌晨做一次全库完整备份,但数据库出现故障时,只能保证恢复到全备时间点,比如,00:30 做的完整备份,而出现故障是下午18:00,那么现 ...
- asp.net网页上获取其中表格中的数据(爬数据)
下面的方法获取页面中表格数据,每个页面不相同,获取的方式(主要是正则表达式)不一样,只是提供方法参考.大神勿喷,刚使用了,就记下来了. 其中数据怎么存,主要就看着怎么使用了.只是方便记录就都放在lis ...
- Python生成器、推导式之前襟后裾
生成器 函数体内有yield选项的就是生成器,生成器的本质是迭代器,由于函数结构和生成器结构类似,可以通过调用来判断是函数还是生成器,如下: def fun(): yield "我是生成器& ...