背景

我和我的团队曾经开发过一款基于蓝牙连接的智能家居产品,但由于市场的原因,这个产品和项目已经停止了。最近,想用手上剩下的存货做一些使用电脑与硬体连接应用实验。

然后发现在电脑平台下进行蓝牙开发,远远没有在 Andorid / iOS 上简单。主要问题如下: - 蓝牙硬体 我所使用的开发电脑并没有蓝牙,于是我在网上买了一个USB蓝牙适配器,但收到货以后,装上后的确是免驱动的,可以传文件,连接蓝牙耳机,但却不能和我的设备进行通讯。搜索了一下资料,发现 Window 自带的蓝牙开发比较复杂,对于没 Window 开发经验的我,Window 蓝牙那套 Api 简直天书一样,到这里是第一次放弃。 - Linux / MacOS 的 Gatttool 工具 后来有一段时间使用 Ubuntu 做开发。然后无意中发现那个 USB蓝牙适配器在 Ubuntu 下也是免驱的,然而系统有一个 hcitool 的工具,可以比较轻松的完成与蓝牙设备的搜索、连接、传输数据。并且使用 pygatt 库可以完成我的大部分需求,但是,在 Window 下并没有这个工具,而且,使用 Python 编写 GUI 也不是太方便,使用 Web 作为 GUI,又涉及到部署,不方便转移,到这里,我完成了设备的指令代码封装就又一次搁浅了。 - noble 再三尝试 Node.js 有一个库叫 Electron,可以通过 JavaScript、HTML、CSS 比较简单的构建跨平台的桌面应用。所以想如果能用 Node.js 去完成这个需求,那也是不错。于是就找到了 noble 这个库。然而,这个库在 Window 上也是没能简单的使用,却在树莓派上成功安装了。这由回到了上面的问题,不能做成桌面应用,就不大方便了,于是再一次搁浅。

新进展

最近有新的需求,需要使用 Electron ,于是最近有研究一下 Node.js,然后又开始心痒痒去研究下这个 noble 库。然后发现之前在 Window 平台上安装,并没有按照它的介绍先去安装依赖以及替换 USB 蓝牙适配器的驱动,所以才会造成安装失败。

然后经过我仔细看说明,然后尝试了一番,终于可以完成 noble 的安装,以及能正常使用。以下是一个搜索的 Demo:

图中可以看到,可以正常使用 noble 搜索到我附近的设备,其中 Upots 是我的设备,另外一个是手上的小米手环3。

依赖安装

noble 在 Linux 和 MacOS 上的安装还是比较简单的,所以可以参考 noble/github 上的介绍就可以了。以下著重演示以下 Window10 下的依赖安装和驱动替换。

首先,我们需要安装的是 node-gyp / github。

在 WIndow 下安装,需要先使用管理员许可权打开 powershell 或者 CMD命令行工具,这里推荐使用 powershell。打开后,输入以下命令:

npm install --global --production windows-build-tools

等待安装完成后即可。

然后,我们需要继续安装 (node-bluetooth-hci-socket / github)[github.com/noble/node-b] 库,在安装之前,我们需要先替换我们的 USB蓝牙适配器驱动。这里要注意的是,当我们替换掉驱动以后,我们就不能在 Window 设置里面使用蓝牙了,如果想要恢复,可以通过 设备管理器-打开设备-更新驱动 把驱动替换回来。

替换驱动我们需要使用一个 Zadig 的工具,下载后,打开软体,然后选择 Option - List All Devices ,再在下拉菜单中选中我们的设备,我这款绿联的USB蓝牙适配器的名称是 CSR8510 A10,关于这个蓝牙的名称,可以在 设置 - 蓝牙和其他设备 中查看。 选择好以后,选择 Reinstall Diver ,等待片刻即可。

完成上面的替换驱动操作后,再使用下面的代码安装 node-bluetooth-hci-socket 即可:

npm install bluetooth-hci-socket

最后,我们再把 (noble / github)[github.com/noble/noble] 安装好即可:

npm install noble

测试

接下来,我们可以测试一下我们的安装和配置是否成功。scan.js / tigoe github 这是在 Github 上的一个 noble 扫描设备的 Demo,可以下载这个程序,测试一下,如果安装正确,就能看到能搜索出来我们周边的蓝牙设备。

后续

到这里为止,我仅仅是完成了这个库的配置和基本的搜索测试,接下来,将继续研究一下内容: - 连接设备 - 发送指令 - Electron 结合开发桌面应用

参考资料

tigoe/BluetoothLE-Examples

noble/noble nodejs/node-gyp noble/node-bluetooth-hci-socket
推荐阅读:
相关文章