通过NodeJS和Termux与安卓蓝牙设备通信

12
我们希望与连接到Android平板电脑的蓝牙设备进行通信。我们正在使用Termux并已安装NodeJS。有人知道是否可能与蓝牙设备通信吗?我们是否必须尝试直接通过/dev文件夹与设备通信?
我的理解是,Android是建立在Linux内核之上的,但它实现了特定的东西来交互其他功能,例如连通性。通过NodejS“serialport”或其他工具,设备是否可以通过/dev文件夹访问?
作为最后的手段,如果这不可能,我想我们可以尝试通过root终端在Android OS中构建NodeJS。我听说这并不像人们想象的那么容易。通过Termux,我能够访问/dev文件夹并查看所有设备。不确定权限如何工作。谢谢。

enter image description here

1个回答

1
您可以使用该工具通过串口进行通信。我从未使用过此工具,但仅提供其作为参考,因为Android是基于Linux内核构建的,所以可能会起作用。请注意,示例与文档相同。

https://github.com/eelcocramer/node-bluetooth-serial-port

基本客户端使用

var btSerial = new (require('bluetooth-serial-port')).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');
    });
});

btSerial.inquire();

基本的服务器使用(仅适用于Linux)

var server = new(require('bluetooth-serial-port')).BluetoothSerialPortServer();

var CHANNEL = 10; // My service channel. Defaults to 1 if omitted.
var UUID = '38e851bc-7144-44b4-9cd8-80549c6f2912'; // My own service UUID. Defaults to '1101' if omitted

server.listen(function (clientAddress) {
    console.log('Client: ' + clientAddress + ' connected!');
    server.on('data', function(buffer) {
        console.log('Received data from client: ' + buffer);

        // ...

        console.log('Sending data to the client');
        server.write(new Buffer('...'), function (err, bytesWritten) {
            if (err) {
                console.log('Error!');
            } else {
                console.log('Send ' + bytesWritten + ' to the client!');
            }
        });
    });
}, function(error){
    console.error("Something wrong happened!:" + error);
}, {uuid: UUID, channel: CHANNEL} );

2
请不要仅仅在回答中发布指向某个工具或库的链接。至少在回答中演示一下它是如何解决问题的 - Baum mit Augen
此代码无法在安卓设备上的Termux下安装并运行nodejs,因此问题仍然悬而未决。 - split

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接