背景

我和我的團隊曾經開發過一款基於藍牙連接的智能家居產品,但由於市場的原因,這個產品和項目已經停止了。最近,想用手上剩下的存貨做一些使用電腦與硬體連接應用實驗。

然後發現在電腦平臺下進行藍牙開發,遠遠沒有在 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
推薦閱讀:
相關文章