Serial Json

Dette eksempel viser hvordan man kan læse fra en serielport vha. node.js. For at kunne køre eksemplet på en meningsfuld måde, kræver det at der er tilsluttet en enhed til serielporten på computeren. Ydermere skal denne enhed sende beskeder afsted i json format, og porten skal være sat op med passende instillinger.

Jeg har tidligere lavet et eksempel, der kan sende json beskeder som output på serielporten på en Arduino, og det er disse data der forventes at være input til dette eksempel.

Først skal der laves et projekt så node kan finde ud af at køre programmet, og har en package.json fil til at holde styr på projektet og afhængigheder af biblioteksmoduler.

Start med at lave en mappe, som kan indeholde dit projekt. Kald den f.eks. serial-json. I denne mappe skal du køre følgende kommando, for at oprette projekt filen package.json.

npm init -y

Dernæst har du mulighed for at installere disse afhængigheder.

npm install serialport --save
{
  "name": "serial-json-read",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "serialport": "^8.0.7"
  }
}

Bemærk de to pakker der er listet under afhængigheder.

Derefter skal du oprette filen serial-json-read.js med følgende indhold.

const SerialPort = require("serialport");
const Readline = require("@serialport/parser-readline");

// Change the serial port to fit your serup
// on linux the device could look like this: "/dev/tty-usbserial1"
const serialPortName = "COM6";

const portOptions = {
  baudRate: 115200
};
const port = new SerialPort(serialPortName, portOptions);

// Open errors will be emitted as an error event
port.on('error', function(err) {
  console.log('Error: ', err.message)
});

const parser = port.pipe(new Readline({ delimiter: "\r\n" }));

parser.on("data", doSomethingWithData);

// Callback function for processing the received data
function doSomethingWithData(data) {
  console.log("--- Line received on serial port ------------");
  console.log('Raw data: ', data);

  // parse json data
  const obj = JSON.parse(data);

  // print object
  console.log("Parsed object:");
  console.log(obj);

  console.log("Contents of object property:");
  console.log(obj.tagId);
  console.log("--- data processing done -------------------");
}

NB! Du skal ændre navnet på serielporten, så det passer med den port din Arduino er tilsluttet til.

Nu kan du køre eksemplet med denne kommando:

node serial-json-read.js

For at få noget meningsfuldt ud af at køre eksemplet skal der, som nævnt ovenfor, være en Arduino tilkoblet til en serielporten på computeren, og denne Arduino skal sende beskeder i det forventede json format. Når dette ellers er opfyldt vil man se noget lignende dette output i terminalen.

$ node .\serial-json-read.js
--- Line received on serial port ------------
Raw data:  {"waitTime":2307,"tagIdIndex":4,"tagId":"E2 00 00 1B 63 15 02 48 15 90 DB 2C"}
Parsed object:
{ waitTime: 2307,
  tagIdIndex: 4,
  tagId: 'E2 00 00 1B 63 15 02 48 15 90 DB 2C' }
Contents of object property:
E2 00 00 1B 63 15 02 48 15 90 DB 2C
--- data processing done -------------------
--- Line received on serial port ------------
Raw data:  {"waitTime":3073,"tagIdIndex":3,"tagId":"E2 00 00 1B 63 15 02 48 17 20 DA F4"}
Parsed object:
{ waitTime: 3073,
  tagIdIndex: 3,
  tagId: 'E2 00 00 1B 63 15 02 48 17 20 DA F4' }
Contents of object property:
E2 00 00 1B 63 15 02 48 17 20 DA F4
--- data processing done -------------------
--- Line received on serial port ------------
Raw data:  {"waitTime":6930,"tagIdIndex":2,"tagId":"E2 00 00 1B 63 15 02 48 17 00 DA F8"}
Parsed object:
{ waitTime: 6930,
  tagIdIndex: 2,
  tagId: 'E2 00 00 1B 63 15 02 48 17 00 DA F8' }
Contents of object property:
E2 00 00 1B 63 15 02 48 17 00 DA F8
--- data processing done -------------------

Materiale