how to receive data from bluetooth device using node.js

前端 未结 3 1102
情话喂你
情话喂你 2021-02-06 00:14

I am new to javascript and node.js. Currently am working in medical project. First i will explain my work. I have to receive data from Bluetooth device (normal BP rate ,pulse ra

相关标签:
3条回答
  • 2021-02-06 00:50

    You can use node-ble a Node.JS library that leverages on D-Bus and avoids C++ bindings. https://github.com/chrvadala/node-ble

    Here a basic example

    async function main () {
      const { bluetooth, destroy } = createBluetooth()
    
      // get bluetooth adapter
      const adapter = await bluetooth.defaultAdapter()
      await adapter.startDiscovery()
      console.log('discovering')
    
      // get device and connect
      const device = await adapter.waitDevice(TEST_DEVICE)
      console.log('got device', await device.getAddress(), await device.getName())
      await device.connect()
      console.log('connected')
    
      const gattServer = await device.gatt()
    
      // read write characteristic
      const service1 = await gattServer.getPrimaryService(TEST_SERVICE)
      const characteristic1 = await service1.getCharacteristic(TEST_CHARACTERISTIC)
      await characteristic1.writeValue(Buffer.from('Hello world'))
      const buffer = await characteristic1.readValue()
      console.log('read', buffer, buffer.toString())
    
      // subscribe characteristic
      const service2 = await gattServer.getPrimaryService(TEST_NOTIFY_SERVICE)
      const characteristic2 = await service2.getCharacteristic(TEST_NOTIFY_CHARACTERISTIC)
      await characteristic2.startNotifications()
      await new Promise(done => {
        characteristic2.once('valuechanged', buffer => {
          console.log('subscription', buffer)
          done()
        })
      })
    
      await characteristic2.stopNotifications()
      destroy()
    }
    
    0 讨论(0)
  • 2021-02-06 01:09

    Try noble library. That's how I get information about my Xiaomi Mi Band 3 device:

    const arrayBufferToHex = require('array-buffer-to-hex')
    const noble = require('noble')
    
    const DEVICE_INFORMATION_SERVICE_UUID = '180a'
    
    noble.on('stateChange', state => {
      console.log(`State changed: ${state}`)
      if (state === 'poweredOn') {
        noble.startScanning()
      }
    })
    
    noble.on('discover', peripheral => {
      console.log(`Found device, name: ${peripheral.advertisement.localName}, uuid: ${peripheral.uuid}`)
    
      if (peripheral.advertisement.localName === 'Mi Band 3') {
        noble.stopScanning()
    
        peripheral.on('connect', () => console.log('Device connected'))
        peripheral.on('disconnect', () => console.log('Device disconnected'))
    
        peripheral.connect(error => {
          peripheral.discoverServices([DEVICE_INFORMATION_SERVICE_UUID], (error, services) => {
            console.log(`Found service, name: ${services[0].name}, uuid: ${services[0].uuid}, type: ${services[0].type}`)
    
            const service = services[0]
    
            service.discoverCharacteristics(null, (error, characteristics) => {
              characteristics.forEach(characteristic => {
                console.log(`Found characteristic, name: ${characteristic.name}, uuid: ${characteristic.uuid}, type: ${characteristic.type}, properties: ${characteristic.properties.join(',')}`)
              })
    
              characteristics.forEach(characteristic => {
                if (characteristic.name === 'System ID' || characteristic.name === 'PnP ID') {
                  characteristic.read((error, data) => console.log(`${characteristic.name}: 0x${arrayBufferToHex(data)}`))
                } else {
                  characteristic.read((error, data) => console.log(`${characteristic.name}: ${data.toString('ascii')}`))
                }
              })
            })
          })
        })
      }
    })
    
    0 讨论(0)
  • 2021-02-06 01:12

    You can use "node-bluetooth" to send and receive data from and to a device respectively. This is a sample code:-

    const bluetooth = require('node-bluetooth');
    
    // create bluetooth device instance
    
    const device = new bluetooth.DeviceINQ();
    
    device
        .on('finished', console.log.bind(console, 'finished'))
        .on('found', function found(address, name) {
            console.log('Found: ' + address + ' with name ' + name);
    
            device.findSerialPortChannel(address, function(channel) {
                console.log('Found RFCOMM channel for serial port on %s: ', name, channel);
    
                // make bluetooth connect to remote device
                bluetooth.connect(address, channel, function(err, connection) {
                    if (err) return console.error(err);
                    connection.write(new Buffer('Hello!', 'utf-8'));
                });
    
            });
    
            // make bluetooth connect to remote device
            bluetooth.connect(address, channel, function(err, connection) {
                if (err) return console.error(err);
    
                connection.on('data', (buffer) => {
                    console.log('received message:', buffer.toString());
                });
    
                connection.write(new Buffer('Hello!', 'utf-8'));
            });
        }).inquire();
    

    It scans for the device name given in "device" variable.

    0 讨论(0)
提交回复
热议问题