命令行 蓝牙_Noble - Window平台NodeJs蓝牙BLE开发库
背景
我和我的团队曾经开发过一款基于蓝牙连接的智能家居产品,但由于市场的原因,这个产品和项目已经停止了。最近,想用手上剩下的存货做一些使用电脑与硬件连接应用实验。
然后发现在电脑平台下进行蓝牙开发,远远没有在 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)[https://github.com/noble/node-bluetooth-hci-socket#windows] 库,在安装之前,我们需要先替换我们的 USB蓝牙适配器驱动。这里要注意的是,当我们替换掉驱动以后,我们就不能在 Window 设置里面使用蓝牙了,如果想要恢复,可以通过 设备管理器-打开设备-更新驱动
把驱动替换回来。
替换驱动我们需要使用一个 Zadig 的工具,下载后,打开软件,然后选择 Option - List All Devices
,再在下拉菜单中选中我们的设备,我这款绿联的USB蓝牙适配器的名称是 CSR8510 A10,关于这个蓝牙的名称,可以在 设置 - 蓝牙和其他设备
中查看。
选择好以后,选择 Reinstall Diver
,等待片刻即可。
完成上面的替换驱动操作后,再使用下面的代码安装 node-bluetooth-hci-socket 即可:
npm install bluetooth-hci-socket
最后,我们再把 (noble / github)[https://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
命令行 蓝牙_Noble - Window平台NodeJs蓝牙BLE开发库相关推荐
- Noble - Window平台NodeJs蓝牙BLE开发库
背景 我和我的团队曾经开发过一款基于蓝牙连接的智能家居产品,但由于市场的原因,这个产品和项目已经停止了.最近,想用手上剩下的存货做一些使用电脑与硬件连接应用实验. 然后发现在电脑平台下进行蓝牙开发,远 ...
- linux终端xwindow,如何从命令行重新启动X Window Server?
问题描述 如何从命令行重新启动X Window Server? 我真的很想重新启动我的GUI,而不必重新启动系统. 最佳解决方法 长话短说:在systemd系统上(Ubuntu 15.04及更新版本) ...
- 群晖使用命令行搭建jellyfin流媒体播放平台
官网地址:Downloads - Jellyfin: The Free Software Media System 一.套件中心 安装docker 安装docker 安装完成会有一个docker的文件 ...
- 手把手教你使用nodejs编写一个【使用远程仓库模板,快速创建项目模块】的cli(命令行)
目录 实现步骤 初始化cli项目 项目目录 创建交互式命令 拉取远程仓库代码,读取仓库中的模板 拉取远程仓库代码 ora 终端 loading 读取仓库中的模板 将选择的模板复制写入目标项目 Comm ...
- 在window的cmd命令行中通过chcp修改代码页--正确显示utf-8字符
Mt8616的开发板通过adb工具可以在Windows系统的cmd命令行显示出debug信息,但是mt8516开发板的系统上是移植的裁剪的linux系统,也就是里面的文件是utf-8的编码形式,不能正 ...
- Android蓝牙bt/ble开发
参看文档: 蓝牙开发:https://www.jianshu.com/p/4ecc99679451 蓝牙bt/ble区别:https://zhuanlan.zhihu.com/p/59907996 安 ...
- 使用C#开发交互式命令行应用
前言 如果你开发过vue应用,应该对其交互式命令行印象深刻: 它允许你无需任何编程经验,仅需回答问题,就可完成vue应用创建. 虽然作为.NETer,大部分情况下我们不会使用命令行,但是还是希望能用C ...
- ganache命令行安装
ganache有两种使用方法,一种是gui图形化界面,官网下载地址:http://trufflesuite.com/ganache,另一种就是命令行,下面介绍命令行的使用方法,使用ganache命令行 ...
- 渗透基础——命令行下安装Microsoft .NET Framework
0x00 前言 在渗透测试中,有些工具的运行(例如高版本的Powershell)需要依赖Microsoft .NET Framework 4.0的环境. 而默认配置下,Win7不支持Microsoft ...
最新文章
- 简单html图片轮播_web前端入门到实战:简单的图片轮播
- leetcode算法题--掷骰子的N种方法
- office插入常见数学公式
- 创业团队:找对人就成功了90%
- matlab 实现多维作图函数(slice)
- SpringMVC学习(六)——Spring四种方式整合MyBatis
- AndroidManifest.xml介绍
- 低开销、简单的网站监控工具Checkless开发者专访
- python自动化办公知识点整理汇总_Python自动化办公知识点整理汇总
- 为什么Vue不能观察到数组length的变化?
- phpstorm编辑器乱码问题解决
- linux对于文本的操作,Linux文本文件操作
- android sdk更新失败 解决方案
- Teamcenter - Index search 找不到相关物件的解决方法
- ASP.NET AJAX Programmer's Reference : with ASP.NET 2.0 or ASP.NET 3.5
- Ninject.Web.Common,Ninject.MVC3源码分析
- 《深入实践Spring Boot》阅读笔记之二:分布式应用开发
- 核密度函数图matlab_4.3 描述数据分布:核密度图
- 手写分页sql_MyBatis-Plus 分页查询以及自定义sql分页的实现
- Illustrator CS6高清原创视频教程全集
热门文章
- Resource temporarily unavailable 错误
- Tomcat8配置tomcat-users.xml配置
- 获取服务端https证书
- 变量作用域函数作用域
- Java中迭代列表中数据时几种循环写法的效率比较
- JAVASCRIPT复制到剪贴板
- J2EE项目移植问题二
- linux 编译sqlitecpp,编译安装sqlite3数据库
- android内存加载dex,安卓8.1版本dex加载流程笔记--第一篇:oatfile,oatdexfile与dexfile...
- html权重值_HTML标签权重分值排列