uniapp连接蓝牙设备

公司做的项目有需要连接第三方的蓝牙设备,要求Android、IOS都要连接这台蓝牙设备,然后去识别NFC标签。

那个设备是德科物联的,DK309的设备,在这记录一下开发的过程。

首先呢,去了解了一下蓝牙设备的一些基础知识,这个可以在很多网站上都可以查得到。大致过程就是:

1. 我这边首先拿到了第三方的设备,然后尝试用自己的手机的蓝牙去连接,一直连接不上,然后找到了厂家,他们给了测试用的APK。结合网络上查询到的知识,得到一个新的知识点。并不是所有蓝牙设备连接的时候都需要确认匹配的那个pin码,以前连耳机这些都是需要点击确认的。

2. 然后就是,厂家只有原生的Android和IOS的方法,并没有那种在uniapp上使用的那种。然后就是下载手机端测试蓝牙连接的软件,IOS和Android平台都有一个叫LightBlue的软件,可以测试和设备的通信。

3. 然后就是基于uniapp的蓝牙连接的过程,有很多可以参考的文档,我这边是参考的这些文章:

https://www.cnblogs.com/mlw1814011067/p/16708559.html

 UNI-APP实现物联网中BLE蓝牙的数据交互 - 知乎

蓝牙设备有设备ID,服务值,特征值。uniapp也提供了蓝牙连接的方法,在官网上就有。大致步骤在文章中也写了思路。

主要踩坑的点是,uniapp的那些关于蓝牙的方法,最好最好最好用settimeout异步一下,不然返回的数据结果很有可能是空的。让你误以为没连接上没数据。

然后就是根据第三方提供的底层协议,向蓝牙设备发送指令,然后解析返回的结果,这个就要根据具体设备进行定制了。






这个代码里面添加了对应的指令以及解析对应的数据。需要一定的NFC标签卡的数据存储结构的知识,可以参考这篇文章。 

浅谈Mifare ultralight原理_liujianhua1989的博客-CSDN博客

大致就是,NFC卡都有16个块存储数据,除了卡片自身的UID 外,还有存储的写入数据。

代码里面加了两个页面的跳转通信,在需要跳转的页面,用这种方法来进行读取设备识别到的NFC标签数据内容。A页面,跳转到蓝牙连接的页面。则在A页面加上:

uni.navigateTo({
					url: '页面的路径',
					events: {
						acceptDataFromOpenedPage: function(data) {
						    console.log(data)
						},
						getNFCCompleteCode: function(NFCData) {
							console.log(NFCData)
						}
					},
					success:function(res){
						res.eventChannel.emit('acceptDataFromOpenerPage', { data: '从巡检列表过来的' })
					}
				})

难点就在于,向设备发送数据,uniapp提供的方法只示例发送0x00的16进制数据。

因为第三方的通行协议上写的指令都是十六进制,所以我这边把指令都转换为10进制对应的值,然后再通过ArrayBuffer和DataView进行转换成数据流。这个在代码的writeDateTo方法可以看到。

你可能感兴趣的:(JavaScript,uniapp,uni-app)