21xrx.com
2024-12-22 23:29:26 Sunday
登录
文章检索 我的文章 写文章
使用Node.js控制蓝牙设备
2023-06-27 06:54:46 深夜i     --     --
Node js 控制 蓝牙设备

Node.js是一种开源跨平台的JavaScript运行环境,可用于开发服务器端应用程序。但是,在最近的年份里,Node.js也逐渐发展成了一种可在其他领域开发应用的工具,其中就包括蓝牙设备。

蓝牙技术是一种近距离无线通讯技术,旨在使各种设备彼此连接并在彼此之间进行数据传输。虽然蓝牙技术发展很快,但仍难以访问、配置或控制蓝牙设备,这时Node.js全栈JavaScript能够帮助我们解决这些问题,而且使用Node.js控制蓝牙设备并不会造成额外的负担。

某些列出蓝牙设备的设备管理器中,选择适当的设备,单击右键,然后选择“属性”选项,会发现有一个“详细信息”选项卡。在该选项卡中,找到“蓝牙硬件地址”属性。此属性用于遍历本机上的所有蓝牙设备,寻找已经匹配的设备。我们需要代码来完成此过程。

首先,在Node.js应用程序中,我们需要安装我们蓝牙模块。Noble是Node.js的一个蓝牙库,可用于与BLE设备通信。Noble支持各种设备型号,包括多种操作系统,例如Windows、OS X和Linux。

接下来,将Noble与我们的应用程序集成。使用蓝牙设备必须使用扫描(scan)、连接(connect)、订阅(subscribe)和写(write)等过程。以下是Node.js中的应用程序扫描BLE设备的示例代码:

const noble = require('noble');

noble.on('stateChange', function(state) {

   if (state === 'poweredOn') {

     noble.startScanning();

   } else {

     noble.stopScanning();

   }

});

noble.on('discover', function(peripheral) {

   console.log('peripheral discovered: ' + peripheral.advertisement.localName);

   console.log('peripheral UUID: ' + peripheral.uuid);

});

在这种情况下,我们需要“startScanning”函数来启动扫描,而在发现新设备时事件“discover”将被触发。使用“advertisement”属性可识别设备的名称。此扫描功能将在程序运行时保持活动状态,直到我们调用“stopScanning”函数停止它。

若要连接蓝牙设备,我们将使用“connect”函数。在Node.js中,使用以下示例代码连接蓝牙设备:

const noble = require('noble');

noble.on('stateChange', function(state) {

   if (state === 'poweredOn') {

     noble.startScanning();

   } else {

     noble.stopScanning();

   }

});

noble.on('discover', function(peripheral) {

   if (peripheral.uuid === 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') {

     noble.stopScanning();

     peripheral.connect(function(error) {

        console.log('connected to peripheral: ' + peripheral.uuid);

        console.log('discover services and characteristics');

     });

   }

});

在此代码示例中,我们正在寻找一个已知UUID的设备。一旦找到该设备,就将以该设备的UUID调用“peripheral.connect”函数进行连接。

在连接之后,必须发现蓝牙设备的所有服务和特征,并使用以下代码获取它们:

const noble = require('noble');

noble.on('stateChange', function(state) {

   if (state === 'poweredOn') {

     noble.startScanning();

   } else {

     noble.stopScanning();

   }

});

noble.on('discover', function(peripheral) {

   if (peripheral.uuid === 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') {

     noble.stopScanning();

     peripheral.connect(function(error) {

        console.log('connected to peripheral: ' + peripheral.uuid);

        peripheral.discoverServices([], function(error, services) {

          console.log('discovered the following services:');

          for (let i in services) {

             console.log(' ' + i + ' uuid: ' + services[i].uuid);

          }

        });

     });

   }

});

通过使用“discoverServices”函数,我们将返回所有设备服务的数组。然后,我们可以使用以下代码检索选定服务的特征:

const noble = require('noble');

noble.on('stateChange', function(state) {

   if (state === 'poweredOn') {

     noble.startScanning();

   } else {

     noble.stopScanning();

   }

});

noble.on('discover', function(peripheral) {

   if (peripheral.uuid === 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') {

     noble.stopScanning();

     peripheral.connect(function(error) {

        console.log('connected to peripheral: ' + peripheral.uuid);

        peripheral.discoverServices([], function(error, services) {

          let deviceInformationService = services[0];

          deviceInformationService.discoverCharacteristics([], function(error, characteristics) {

             console.log('discovered the following characteristics:');

             for (let i in characteristics) {

               console.log(' ' + i + ' uuid: ' + characteristics[i].uuid);

             }

          });

        });

     });

   }

});

我们可能还需要写入特定特征的值相关的代码,但是一旦我们掌握了连接到蓝牙设备的方法,其他的代码也很容易编写。

Node.js不仅能够访问和控制蓝牙设备,还非常方便,并且能够轻松处理复杂的BLE功能及其API。开发人员甚至可以在不编写复杂的低级代码的情况下使用高级API实现通信。整个过程非常简单而无比灵活。

在控制蓝牙设备时,使用Node.js会大大减少代码开发时间和难度,加快蓝牙设备的接入和应用场景的实现。未来,我们可以看到更多使用Node.js的BLE项目发布,使人们可以更好地控制和管理不同设备之间的数据传输。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复