@yesbotics/simple-serial-protocol-node
    TypeScript icon, indicating that this package has built-in type declarations

    2.2.0 • Public • Published

    Simple Serial Protocol for Node.js written in Typescript

    Easy and robust General Purpose Library for the communication between Node.js applications and Arduino devices. Powered by the usage of resource-efficient and microcontroller-friendly Primitive Dataypes. This package covers the Node.js implementation of Simple Serial Protocol.

    NPM registry

    This package is distributed as simple-serial-protocol-node npm package.

    Requirements

    • Node.js >= 12.0.0

    Install

    npm install --save @yesbotics/simple-serial-protocol-node

    Usage example (echo-example written in TypeScript)

    This example sends values of each supported datatype and listen for them sent back. This example can be found as npm application in the simple-serial-protocol-node/examples/echo-example folder. It corresponds with the Arduino sketch at Simple Serial Protocol for Arduino.

    /// don't remove this line!
    import {
        Baudrate,
        SimpleSerialProtocol,
        WriteCommandConfig,
        ReadCommandConfig
    } from '@yesbotics/simple-serial-protocol-node';
     
    export class EchoExampleApp {
     
        public run(portname: string, baudrate: Baudrate): void {
     
            // create instance
            const arduino: SimpleSerialProtocol = new SimpleSerialProtocol(portname, baudrate);
     
            // define command id and callback function
            const readConfig: ReadCommandConfig = new ReadCommandConfig(
                's',
                (
                    byteValuenumber,
                    booleanValueboolean,
                    int8Valuenumber,
                    uint8Valuenumber,
                    int16Valuenumber,
                    uint16Valuenumber,
                    int32Valuenumber,
                    uint32Valuenumber,
                    int64Valuebigint,
                    uint64Valuebigint,
                    floatValuenumber,
                    charValuestring,
                    stringValue1string,
                    stringValue2string,
                    stringValue3string,
                ) => {
                    console.log('Received several values from Arduino:');
                    console.log('byteValue', byteValue);
                    console.log('booleanValue', booleanValue);
                    console.log('int8Value', int8Value);
                    console.log('uint8Value', uint8Value);
                    console.log('int16Value', int16Value);
                    console.log('uint16Value', uint16Value);
                    console.log('int32Value', int32Value);
                    console.log('uint32Value', uint32Value);
                    console.log('int64Value', int64Value);
                    console.log('uint64Value', uint64Value);
                    console.log('floatValue', floatValue);
                    console.log('charValue', charValue);
                    console.log('stringValue1', stringValue1);
                    console.log('stringValue2', stringValue2);
                    console.log('stringValue3', stringValue3);
     
                    //gracefully close the connection
                    arduino.dispose().catch((err) => {
                        console.error('Could not dispose. reason:', err);
                    });
                }
            );
     
            // define expected dataytpes
            readConfig
                .addByteParam()
                .addBooleanParam()
                .addInt8Param()
                .addUInt8Param()
                .addInt16Param()
                .addUInt16Param()
                .addInt32Param()
                .addUInt32Param()
                .addInt64Param()
                .addUInt64Param()
                .addFloatParam()
                .addCharParam()
                .addStringParam()
                .addStringParam()
                .addStringParam();
     
            // register command with prepared config
            arduino.registerCommand(readConfig);
     
            // establish connection to arduino and wait 2 seconds
            // give arduino time to start after getting connected (and resetted too)
            arduino.init(2000)
                .catch((err) => {
                    console.error('Could not init connection. reason:', err);
                })
                .then(() => {
                    console.log('Arduino connected.');
                    console.log('Send several values to Arduino');
     
                    const command: WriteCommandConfig = new WriteCommandConfig('r');
                    command
                        .addByteValue(0xff)
                        .addBooleanValue(true)
                        .addInt8Value(-128)
                        .addUInt8Value(255)
                        .addInt16Value(-32768)
                        .addUInt16Value(65523)
                        .addInt32Value(-2147483648)
                        .addUInt32Value(4294967295)
     
                        // For BigInt Support add `esnext` to your tsconfig lib section
                        .addInt64Value(BigInt(-2147483648000999))
                        .addUInt64Value(BigInt(7294967295000999))
     
                        .addFloatValue(-1.23456789101112)
                        .addCharValue('J')
     
                        .addStringValue("text1: Hey, I'm text one!")
                        .addStringValue("text2: And I am his brother text two!")
                        .addStringValue("text3: Nice!");
     
                    arduino.writeCommand(command);
                });
        }
    }
     
    // entry point
     
    const MY_PORTNAME: string = 'undefinedPortname'; // change this to your serial port name
    const MY_BAUDRATE: Baudrate = 9600; // change this to your partner device's baudrate
     
    const usedPortname: string = (MY_PORTNAME !== 'undefinedPortname' ? MY_PORTNAME : null) || process.argv[2];
    const usedBaudrate: Baudrate = parseInt(process.argv[3]) || MY_BAUDRATE || 9600;
     
    console.log('running echo example');
    console.log('use portname:', usedPortname);
    console.log('use baudrate:', usedBaudrate);
     
    const echoExampleApp = new EchoExampleApp();
    echoExampleApp.run(usedPortname, usedBaudrate);
     

    Links

    Install

    npm i @yesbotics/simple-serial-protocol-node

    DownloadsWeekly Downloads

    69

    Version

    2.2.0

    License

    MIT

    Unpacked Size

    148 kB

    Total Files

    85

    Last publish

    Collaborators

    • avatar
    • avatar