是否可以根据Nodejs脚本中的地址执行蓝牙设备的查找?
那里有一些包,主要是Noble。然而,他们都专注于扫描,而不是查找已知的地址(据我所知,无论如何!)。
我想要实现的是查找已知地址,查看是否可以找到该设备。
就像PyBluez对Python一样:
bluetooth.lookup_name('CC:20:E8:8F:3A:1D', timeout=5)
在Python中,这可以找到设备,即使它是不可发现的,与典型的查询扫描不同。
答案 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;
}
}