127

The following code uses SerialPort module to listen to data from a bluetooth connection.

I am expecting to see a stream of data in Hexadecimal format printed in console. But the console just shows some weird simbols. I want to know how can I decode and display the data in console.

var serialPort = new SerialPort("/dev/tty.EV3-SerialPort", {
  parser: SP.parsers.raw
}, false); // this is the openImmediately flag [default is true]

serialPort.open(function () {
 console.log('open');
 serialPort.on('data', function(data) {
   var buff = new Buffer(data, 'utf8'); //no sure about this
  console.log('data received: ' + buff.toString());
 });  
});
GingerJim
  • 3,737
  • 6
  • 26
  • 36

2 Answers2

280

This code will show the data buffer as a hex string:

buff.toString('hex');
Justin
  • 24,288
  • 12
  • 92
  • 142
Seryh
  • 3,144
  • 1
  • 16
  • 18
3

Top answer is the simplest way to do it.

An alternative method:

data = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);

Array.prototype.map.call(new Uint8Array(data),
               x => ('00' + x.toString(16)).slice(-2))
        .join('').match(/[a-fA-F0-9]{2}/g).reverse().join('');
Alexis Wilke
  • 19,179
  • 10
  • 84
  • 156
Omar Taylor
  • 143
  • 4
  • 5
    This answer was actually useful for me, because I have to join it with '-' for it to interop with C#. Upvoted. – Edza Mar 31 '20 at 09:12