Nodejs查找已知的蓝牙设备

时间:2017-02-05 10:15:15

标签: javascript python node.js bluetooth

是否可以根据Nodejs脚本中的地址执行蓝牙设备的查找?

那里有一些包,主要是Noble。然而,他们都专注于扫描,而不是查找已知的地址(据我所知,无论如何!)。

我想要实现的是查找已知地址,查看是否可以找到该设备。 就像PyBluez对Python一样: bluetooth.lookup_name('CC:20:E8:8F:3A:1D', timeout=5)

在Python中,这可以找到设备,即使它是不可发现的,与典型的查询扫描不同。

2 个答案:

答案 0 :(得分:0)

据我所知,您希望使用地址连接到设备。然后,我建议使用node-bluetooth-serial-port

var btSerial = new (require('bluetooth-serialport')).BluetoothSerialPort();

btSerial.on('found', function(address, name) {
    btSerial.findSerialPortChannel(address, function(channel) {
        btSerial.connect(address, channel, function() {
        console.log('connected');

        btSerial.write(new Buffer('my data', 'utf-8'), function(err, bytesWritten) {
            if (err) console.log(err);
        });

        btSerial.on('data', function(buffer) {
            console.log(buffer.toString('utf-8'));
        });
    }, function () {
        console.log('cannot connect');
    });

    // close the connection when you're ready
    btSerial.close();
}, function() {
    console.log('found nothing');
});
});

BluetoothSerialPort.findSerialPortChannel(地址,回调[,errorCallback])

检查设备是否正在运行串行端口服务,如果找到它,则传递通道ID以用于RFCOMM连接。

回调(通道) - 在设备上查找完串口后调用。 errorCallback - 称搜索已完成,但未在设备上找到串行端口通道。连接到远程蓝牙设备。

bluetoothAddress - 远程蓝牙设备的地址。

频道 - 要连接的频道。 [successCallback] - 在建立连接时调用。 [errorCallback(err)] - 在连接尝试导致错误时调用。该参数是一个Error对象。

答案 1 :(得分:0)

我遇到了同样的问题并且刚刚找到了btwatch lib,但它对我来说并不适用于最新的raspbian。但是源代码只是调用l2ping并且正在寻找一个我猜不再打印成功的字符串,所以下面的修改后的代码会起作用,类似于lookup_name方法,一旦你安装了l2ping(我认为npm bluetooth或者pybluez有它)

var Spawn = require('child_process').spawn;

function detectMacAddress(macAddress, callback)
{
    //var macAddress = '72:44:56:05:79:A0';
    var ls = Spawn('l2ping', ['-c', '1', '-t', '5', macAddress]);

    ls.stdout.on('data', function (data) {
        console.log("Found device in Range! " + macAddress);
        callback(true);
    });

    ls.on('close', function () {
        console.log("Could not find: " + macAddress);
        callback(false);
    });
}

或者,同步方式,

var execSync = require('child_process').execSync;

function detectMacAddressSync(macAddress)
{
    var cmd = 'l2ping -c 1 -t 5 ' + macAddress;
    try
    {
        var output = execSync(cmd );
        console.log("output : "+ output );
        return true;
    }
    catch(e)
    {
        console.log("caught: " + e);
        return false;
    }
}