是否有可能通過Nodejs腳本中的地址來查找藍牙設備?已知藍牙設備的Nodejs查找
這裏有幾個軟件包,主要是Noble。然而,他們都專注於掃描,而不是查找一個已知的地址(據我所知,無論如何!)。
我想實現的是查找一個已知地址,看看是否可以找到該設備。 就像PyBluez確實爲Python: bluetooth.lookup_name('CC:20:E8:8F:3A:1D', timeout=5)
在Python中,這樣可以找到該設備,即使它是不可發現,不像一個典型的查詢會掃描。
是否有可能通過Nodejs腳本中的地址來查找藍牙設備?已知藍牙設備的Nodejs查找
這裏有幾個軟件包,主要是Noble。然而,他們都專注於掃描,而不是查找一個已知的地址(據我所知,無論如何!)。
我想實現的是查找一個已知地址,看看是否可以找到該設備。 就像PyBluez確實爲Python: bluetooth.lookup_name('CC:20:E8:8F:3A:1D', timeout=5)
在Python中,這樣可以找到該設備,即使它是不可發現,不像一個典型的查詢會掃描。
我有這個相同的問題,只是找到btwatch庫,但它不適合我最新的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;
}
}
據我瞭解你想連接到使用地址的設備的問題。然後,我會建議使用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對象。
HI rresol,我剛纔已經做了一些與此玩耍。它似乎沒有像Python例子那樣工作。這似乎是因爲我測試的設備沒有廣播任何頻道,「BluetoothSerialPort.findSerialPortChannel」總是失敗,除非它是可發現的。在這個階段,我的目標是簡單地檢查設備是否存在。我不確定這些中的任何內部工作原理,但似乎Pythons'.lookup_name'只是查找設備,但藍牙串口庫正在尋找設備**和**以獲得可用的通道。如果這是有道理的? – jdrucey
啊!驚人!這正是我所追求的。謝謝。 – jdrucey